1. 程式人生 > >Nginx+Keepalived高可用叢集

Nginx+Keepalived高可用叢集

1.Keepalived高可用軟體

    Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,keepalived除了能夠管理LVS軟體外,還可以作為其他服務的高可用解決方案軟體。

    keepalived軟體主要是通過VRRP協議實現高可用功能的。VRRP是Virtual  Router  Redundancy Protocol(虛擬路由冗餘協議)的縮寫,VRRP出現的目的就是為了解決靜態路由的單點故障問題的

,它能保證當個別節點宕機時,整個網路可以不間斷地執行。所以,keepalived一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可以實現系統網路服務的高可用功能。

2.Keepalived高可用故障切換轉移原理

    Keepalived高可用服務對之間的故障切換轉移,是通過VRRP來實現的。在keepalived服務工作時,主Master節點會不斷地向備節點發送(多播的方式)心跳訊息,用來告訴備Backup節點自己還活著。當主節點發生故障時,就無法傳送心跳的訊息了,備節點也因此無法繼續檢測到來自主節點的心跳了。於是就會呼叫自身的接管程式,接管主節點的IP資源和服務

。當主節點恢復時,備節點又會釋放主節點故障時自身接管的IP資源和服務,恢復到原來的備用角色。

3. Keepalived高可用實驗環境說明

    如下圖所示,前端有兩臺的Nginx負載均衡器,用來分發接收到客戶端的請求。在前文已經配置好了Nginx01,Nginx02也是一樣的配置。現在要在兩個Nginx負載均衡器上做高可用配置,Nginx01作為主節點,Nginx02作為備節點。

image.png

4.安裝並啟用keepalived

    keepalived的安裝非常簡單,直接使用yum來安裝即可。

 yum install keepalived -y

    安裝之後,啟動keepalived服務,順便把keepalived寫入開機啟動的腳本里面去。。

/etc/init.d/keepalived star
echo "/etc/init.d/keepalived start" >>/etc/rc.local

    啟動之後會有三個程序,沒問題之後可以關閉keepalived軟體,接下來要修改keepalived的配置檔案。

image.png

5.修改keepalived配置檔案並且重啟keepalived服務

/etc/init.d/keepalived stop    #關閉keepalived服務   
vim /etc/keepalived/keepalived.conf  #用vim開啟編輯
主節點的配置檔案 備節點的配置檔案

! Configuration File for keepalived

 

global_defs {

   notification_email {

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]

   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 {

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]

   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

image.png

然後修改備節點的配置檔案,儲存退出後啟動keepalived,不會生成虛擬IP,如果生成那就是配置檔案出現了錯誤。備節點和主節點爭用IP資源,這個現象叫做“裂腦”。

image.png

5.進行高可用的主備伺服器切換實驗

    停掉主節點的keepalived服務,檢視備節點會不會生成VIP:192.168.31.5

image.png

image.png

    啟動主節點的keepalived服務,然後檢視主節點和備節點的VIP,主節點應該會搶奪回來VIP:

image.png

image.png

6.搭配Nginx負載均衡來測試

    修改windows的hosts檔案,把域名指向到VIP上

image.png

    然後用瀏覽器開啟www.pcm.com的頁面,在web01上檢視access.log日誌記錄到的客戶端IP地址

image.png

image.png

    可以看到日誌記錄到的客戶端的IP地址是192.168.31.1,反向代理伺服器是主伺服器192.168.31.3.下面我們停止keepalived服務,看備節點會不會接替主節點的VIP和服務。

image.png

image.png

image.png

    可以看到,備節點確實接替了主節點的工作。重新啟用主節點,實驗的結果就不驗證了。

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服務檢驗