1.Keepalived高可用軟件
前端
Keepalived軟件起初是專爲LVS負載均衡軟件設計的,用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了能夠實現高可用的VRRP功能。所以,keepalived除了可以管理LVS軟件外,還能夠做爲其餘服務的高可用解決方案軟件。
nginx
keepalived軟件主要是經過VRRP協議實現高可用功能的。VRRP是Virtual Router Redundancy Protocol(虛擬路由冗餘協議)的縮寫,VRRP出現的目的就是爲了解決靜態路由的單點故障問題的,它能保證當個別節點宕機時,整個網絡能夠不間斷地運行。因此,keepalived一方面具備配置管理LVS的功能,同時還具備對LVS下面節點進行健康檢查的功能,另外一方面也能夠實現系統網絡服務的高可用功能。
web
2.Keepalived高可用故障切換轉移原理vim
Keepalived高可用服務對之間的故障切換轉移,是經過VRRP來實現的。在keepalived服務工做時,主Master節點會不斷地向備節點發送(多播的方式)心跳消息,用來告訴備Backup節點本身還活着。當主節點發生故障時,就沒法發送心跳的消息了,備節點也所以沒法繼續檢測到來自主節點的心跳了。因而就會調用自身的接管程序,接管主節點的IP資源和服務。當主節點恢復時,備節點又會釋放主節點故障時自身接管的IP資源和服務,恢復到原來的備用角色。
windows
3. Keepalived高可用實驗環境說明後端
以下圖所示,前端有兩臺的Nginx負載均衡器,用來分發接收到客戶端的請求。在前文已經配置好了Nginx01,Nginx02也是同樣的配置。如今要在兩個Nginx負載均衡器上作高可用配置,Nginx01做爲主節點,Nginx02做爲備節點。瀏覽器
4.安裝並啓用keepalivedbash
keepalived的安裝很是簡單,直接使用yum來安裝便可。
服務器
yum install keepalived -y
安裝以後,啓動keepalived服務,順便把keepalived寫入開機啓動的腳本里面去。。網絡
/etc/init.d/keepalived star echo "/etc/init.d/keepalived start" >>/etc/rc.local
啓動以後會有三個進程,沒問題以後能夠關閉keepalived軟件,接下來要修改keepalived的配置文件。
5.修改keepalived配置文件而且重啓keepalived服務
/etc/init.d/keepalived stop #關閉keepalived服務 vim /etc/keepalived/keepalived.conf #用vim打開編輯
主節點的配置文件 | 備節點的配置文件 |
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id lb01 } vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 55 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.31.5/24 dev eth1 label eth1:1 } } ...... |
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id lb02 } vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 55 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.31.5 dev eth1 label eth1:1 } } ...... |
註解:修改配置文件主要就是上面加粗的幾個地方,下面說明一下那幾個參數的意思:
router_id 是路由標識,在一個局域網裏面應該是惟一的;vrrp_instance VI_1{...}這是一個VRRP實例,裏面定義了keepalived的主備狀態、接口、優先級、認證和IP信息;state 定義了VRRP的角色,interface定義使用的接口,這裏個人服務器用的網卡都是eth1,根據實際來填寫,virtual_router_id是虛擬路由ID標識,一組的keepalived配置中主備都是設置一致,priority是優先級,數字越大,優先級越大,auth_type是認證方式,auth_pass是認證的密碼。 virtual_ipaddress {...}定義虛擬IP地址,能夠配置多個IP地址,這裏我定義爲192.168.31.5,綁定了eth1的網絡接口,虛擬接口eth1:1.
修改好主節點以後,保存退出,而後啓動keepalived,幾分鐘內會生成一個虛擬IP:192.168.31.5
而後修改備節點的配置文件,保存退出後啓動keepalived,不會生成虛擬IP,若是生成那就是配置文件出現了錯誤。備節點和主節點爭用IP資源,這個現象叫作「裂腦」。
5.進行高可用的主備服務器切換實驗
停掉主節點的keepalived服務,查看備節點會不會生成VIP:192.168.31.5
啓動主節點的keepalived服務,而後查看主節點和備節點的VIP,主節點應該會搶奪回來VIP:
6.搭配Nginx負載均衡來測試
修改windows的hosts文件,把域名指向到VIP上
而後用瀏覽器打開www.pcm.com的頁面,在web01上查看access.log日誌記錄到的客戶端IP地址
能夠看到日誌記錄到的客戶端的IP地址是192.168.31.1,反向代理服務器是主服務器192.168.31.3.下面咱們中止keepalived服務,看備節點會不會接替主節點的VIP和服務。
能夠看到,備節點確實接替了主節點的工做。從新啓用主節點,實驗的結果就不驗證了。
7.編寫Nginx Web服務的守護腳本
上面的實驗測試有一個問題就是,咱們是用Nginx作負載均衡分發請求的數據包的。若是主節點的Keepalived服務正常運行,而Nginx運行異常,那麼將會出現Nginx負載均衡服務失靈,沒法切換到Nginx負載均衡器02上,後端的Web服務器沒法收到請求。因此,咱們應該要檢測Nginx的服務是否正常運行,若是不是正常運行,應該停掉Keepalived的服務,這樣才能自動切換到備節點上。
咱們能夠經過檢測80端口是否開啓來斷定Nginx的運行狀況,2秒鐘檢測一次,腳本以下
#!/bin/bash while true do if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ] then /etc/init.d/keepalived stop fi sleep 2 done
實驗的結果能夠後臺執行命令以後而後中止Nginx服務檢驗