Keepalived雙機熱備
Keepalived是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健檢查功能,如判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換爲新的服務器,當故障主機恢復後將其重新加入羣集。在非LVS羣集環境中使用時Keepalived也可以作爲熱備軟件使用。
Keepalived採用VRRP(virtual router redundancy protocol,虛擬路由冗餘協議)熱備份協議,以軟件的方式實現linux服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案-----由多臺路由器組成一個熱備組。通過共用的虛擬IP地址對外提供服務;每個熱備組內同一時刻只有一臺主服務器提供服務,其他服務器處於冗餘狀態,若當前在線的服務器失敗,其他服務器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。
熱備組內的每臺服務器都可以成爲主服務器,虛擬IP地址(VIP)可以在熱備組內的服務器之間進行轉移,所以也稱爲漂移IP地址,使用Keepalived時,漂移地址的實現不需要手動建立虛擬接口配置文件(如eth0:0),而是由Keepalived根據配置文件自動管理。
案例:負載均衡+高可用羣集 (LVS-DR+HA):拓撲圖如下所示
上圖設計目的是用Keepalived構建高可用性的LVS負載均衡羣集。使用Keepalived構建LVS羣集更加簡便易用,主要優勢體現在:對LVS負載調度器實現熱備切換,提高可用性,對WEB服務器池中的節點進行分健康檢查,自動移除失敗節點,恢復後再重新加入。
在基於LVS-Keepalived實現的LVS羣集結構中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器,本例將以DR模式的LVS羣集爲基礎,增加一臺從負載調度器,使用Keepalived來實現主、從調度器的熱備,從而構建建有負載均衡、高可用兩種能力的LVS網站羣集平臺。
實驗環境:參照上圖可知每臺主機網卡的IP地址,如下所示:共7臺主機
VIP(虛擬IP地址):172.16.16.172/24
主調度器:eth0 172.16.16.173/24 eth1: 192.168.7.173/24
從調度器:eth0 172.16.16.174/24 eth1: 192.168.7.174/24
WEB節點1: 172.16.16.177/24 eth1: 192.168.7.177/24
WEB節點2: 172.16.16.178/24 eth1: 192.168.7.178/24
NFS共享存儲:eth0 192.168.7.250/24
具體操作步驟如下:
1、LVS+keepalived高可用羣集---調度器組中的主、從調度器配置(主/從),即構建高可用的LVS負載均衡羣集
Keepalived的設計目標是構建高可用的LVS負載均衡羣集,可以調用ipvsadm工具來創建虛擬服務器、管理服務器池,而不僅僅用來做雙機熱備。使用Keepalived構建LVS羣集更加簡便易用,主要優勢體現在:對LVS負載調度器實現熱備切換,提高可用性;對服務器池中的節點進行健康檢查,自動移除失效點節,恢復後再重新加入。
基於LVS+keepalived實現的LVS羣集中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器。本案例以DR模式的LVS模式羣集爲基礎。
使用 Keepalived構建LVS羣集時,也需要用到ipvsadm管理工具,但大部分工作會由Keepalived自動完成,不需要手動執行ipvsadm(除了查看和監控羣集以外)
查看主調度器網卡接口IP地址:
查看從調度器網卡接口IP地址:
1)主服務器的配置:
安裝keepalived軟件包與服務控制
在編譯安裝Keepalived之前,必須先安裝內核開發包kernel-devel以及openssl-devel、popt-devel等支持庫,除此之外,在LVS羣集環境中應用時,也需要用到ipvsadm管理工具。
安裝ipvsadm軟件包:
編譯安裝Keepalived
使用指定的linux內核位置對keepalived進行配置,並將安裝路徑指定爲根目錄,這樣就無需額外創建鏈接文件了,配置完成後,依次執行make、make install進行安裝。
使用keepalived服務
執行make install操作之後,會自動生成/etc/init.d/keepalived腳本文件,但還需要手動添加爲系統服務,這樣就可以使用service、chkconfig工具來對keepalived服務程序進行管理了。
主服務器的配置
Keepalived服務的配置目錄位於/etc/keepalived。其中keepalived.conf是主配置文件,另外包括一個子目錄samples/,提供了許多配置樣列作爲參考。在keepalived的配置文件中,使用”global_defs {……}”區段指定全局參數。使用”vrrp_instance 實例名稱 {……}”區段指定VRRP熱備參數,註釋文字以”!”符號開頭。
相關配置及主要配置項解釋如下:
! Configuration File for keepalived #!表示註釋
global_defs {
notification_email {
[email protected] #接收警報的 email 地址,可以添加多個
}
notification_email_from root@localhost
smtp_server 127.0.0.1 #使用本機轉發 email
smtp_connect_timeout 30
router_id LVS_DEVEL #load balancer 的標識 ID,即本服務器的名稱標識
}
vrrp_instance VI_1 { #定義VRRP熱備實例
state MASTER #熱備狀態,MASTER表示主服務器;SLAVE表示備用服務器;當有多臺備用的服務器,熱備狀態改爲 BACKUP,此狀態是由 priority 的值來決定的,當前priority 的值小於備機的值,那麼將會失去 MASTER 狀態
interface eth0 #HA 監測網絡接口即承載VIP地址的物理接口
virtual_router_id 50 #虛擬路由器的ID號。主、備機的 virtual_router_id必須相同
priority 150 #主機的優先級,數值越大優先能越高。備份機改爲 50
advert_int 1 #主備之間的通告間隔秒數(心跳頻率)
authentication { #認證信息,每個熱備組保持一致
auth_type PASS #認證類型,主備切換時的驗證
auth_pass 1111 #密碼字串
}
virtual_ipaddress { #指定漂移地址(VIP),可以有多個
172.16.16.172 #HA 虛擬 ip,可加多個
}
}
virtual_server 172.16.16.172 80 { #虛擬服務器地址(VIP)、端口
delay_loop 6 #健康檢查的間隔時間(秒),每隔 6 秒查詢 realserver狀態
lb_algo rr #lvs 調度算法,這裏使用輪詢
lb_kind DR #lvs 負載均衡機制,這裏使用直連路由
! persistence_timeout 50 #同一 IP 的連接 50 秒內被分配到同一臺 realserver
protocol TCP #用 TCP 協議檢查 realserver 狀態
real_server 172.16.16.177 80 { #第一個WEB節點的地址、端口
weight 1 #節點的權重
TCP_CHECK { #健康檢查方式
connect_port 80 #檢查的目標端口
connect_timeout 3 #故障重試秒數(即連接超時)
nb_get_retry 3 #重試延遲(即重試次數)
delay_before_retry 3 #重試間隔(秒)
}
}
real_server 172.16.16.178 80 { #第二個WEB節點的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
配置主調度器:修改keepalived.conf文件中的全局參數、熱備參數、WEB服務器池配置,相關配置參數如下圖:
重新啓動keepalived服務
2)配置從調度器:
從調度器的配置與主調度器基本相同,也包括全局參數、熱備參數、服務器池配置,只需要調整router_id、state、prority參數即可,其餘內容完全相同,配置完成以後重啓keepalived服務。
安裝keepalived軟件包與服務控制
在編譯安裝Keepalived之前,必須先安裝內核開發包kernel-devel以及openssl-devel、popt-devel等支持庫,除此之外,在LVS羣集環境中應用時,也需要用到ipvsadm管理工具。
安裝ipvsadm軟件包:
編譯安裝Keepalived
使用指定的linux內核位置對keepalived進行配置,並將安裝路徑指定爲根目錄,這樣就無需額外創建鏈接文件了,配置完成後,依次執行make、make install進行安裝。
使用keepalived服務
執行make install操作之後,會自動生成/etc/init.d/keepalived腳本文件,但還需要手動添加爲系統服務,這樣就可以使用service、chkconfig工具來對keepalived服務程序進行管理了。
配置從調度器:修改keepalived.conf文件,只修改紅線標註的參數,其他參數和主調度器的配置文件完全一樣。修改的地方如下圖所示:
重新啓動keepalived服務
在同一個keepalived熱備組內,所有服務器的keepalived配置文件基本相同。不同之處主要在於服務器的名稱標識、熱備狀態、優先級。
服務器的名稱標識(router_id):建議爲每個參與熱備的服務器指定不同的名稱
熱備狀態(state):至少應有一臺主服務器,狀態設爲MASTER;可以有多臺備用的服務器,將狀態設爲BACKUP.
優先級(priority):數值越大則取得VIP控制權的優先級越高,回此主服務器的優先級應設爲最高;其他備用服務器的優先級可依次遞減,但不要相同,以免在爭奪VIP控制權時發生衝突。
3)測試主、從調度器:
若防火牆不關閉的話可以在input鏈上建規則.
iptables -I INPUT -p ip -d 224.0.0.18 -jACCEPT
注:VRRP協議的通告報文使用固定的組播地址224.0.0.18,用IP 報文作爲傳輸協議進行協議報文的傳送。
當啓動keepalived服務後,實際狀態爲MASTER的主服務器取得VIP控制權,並將eth0接口自動添加VIP地址,通過ip命令可以查看(注意:ifconfig命令看不到)
查看主服器的eth0接口信息:
從調度器服務器上啓動keepalived服務,此時主服務器仍然在線,VIP地址實際上仍然由主服務器控制,其他服務器處於備用狀態,因此在備用服務器中將不會爲eth0接口添加VIP地址。
此時查看從服務器的eth0接口信息:
Keepalived的日誌消息保存在/var/log/messages文件中,在測試主、從故障自動切換功能時,可以跟蹤此日誌文件來觀察熱備狀態的變化。以連通性測爲例
在internet的測試機上執行ping 172.16.16.172 –t,(172.16.16.172爲VIP地址),能夠正常ping通,說明主服務器以接管VIP地址,並及時響應客戶機的請求。
禁用主服務器的eth0網卡,發現ping測試會中斷3~4個包即恢復正常,說明已有其他服務器接替VIP地址,並及時響應客戶機的請求。
重新啓用主服務器的eth0網卡,發現ping測試再次中斷3~4個包即恢復正常,說明主服務器已恢復正常,並奪回VIP地址的控制權。
在這述過程中可以查看日誌記錄來了解MASTER、SLAVE狀態的遷移記錄。
2、LVS+HA ----配置負載調度器(ipvsadm)
要在主、從負載調度器主機上分別配置負載調度器,加載ip_vs模塊,安裝ipvsadm軟件包.這裏使用的是LVS-DR模式,需要調整/proc系統的內核響應參數。
在sysctl.conf添加如下內容:
詳細配置參考我在前面介紹的LVS-DR的有關設置。
3、在共享存儲設備主機上配置共享存儲服務(這裏使用NFS發佈共享服務),具體操作如下:
修改/etc/exports文件,內容如下:
/opt/wwwroot 192.168.7.0/24(rw,sync,no_root_squash)
允許192.168.7.0/24網段的主機訪問NFS的共享。
參考LVS+NAT方式的虛擬服務器中有關NFS的防火牆設置或將NFS服務器的防火牆規則清除。
4、LVS+HA ---配置服務器池中的WEB節點服務器(172.16.16.177和172.16.16.178)
根據所選擇的羣集工作模式不同(DR或NAT),節點服務器的配置也有些差異。以DR模式爲例。除了需要調整/proc系統的ARP響應參數以外,還需要爲虛擬接口lo:0配置VIP地址。具體參考前面有關LVS-DR的配置。所以WEB節點的配置和LVS-DR配置是一樣的。
使用DR模式時,節點服務器也需要配置VIP地址,並調整內核的ARP響應參數以阻止更新VIP的MAC地址,避免發生衝突。
調整/proc響應參數
在sysctl.conf添加如下內容:
注:上圖中參數的含義:
net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
arp_ignore:定義了網卡在響應外部ARP請求時候的響應級別
0:默認值,不管哪塊網卡接收到了ARP請求,只要發現本機有這個MAC都給與響應
1:總是使用最合適的網卡來響應,一個主機有多塊網卡,其中一塊網卡接收到了ARP請求,發現所請求的MAC是本機另一塊網卡的,這個時候接收到ARP請求的這塊網卡就一定不響應,只有發現請求的MAC是自己的纔給與響應。
net.ipv4.conf.default.arp_announce= 0 net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.lo.arp_announce= 0
定義了網卡在向外宣告自己的MAC-IP時候的限制級別
有三個值:
0:默認值,不管哪塊網卡接收到了ARP請求,只要發現本機有這個MAC都給與響應
1:儘量避免響應ARP請求中MAC不是本網卡的,一個主機有多塊網卡,其中一塊網卡接收到了ARP請求,發現所請求的MAC是本機另一塊網卡的,這個時候接收到ARP請求的這塊網卡就儘量避免響應
2:總是使用最合適的網卡來響應,一個主機有多塊網卡,其中一塊網卡接收到了ARP請求,發現所請求的MAC是本機另一塊網卡的,這個時候接收到ARP請求的這塊網卡就一定不響應,只有發現請求的MAC是自己的纔給與響應。
執行sysctl -p使修改生效
配置虛擬IP地址(VIP)-----節點服務器1的配置
在每個節點服務器,同樣需要具有VIP地址172.16.16.172,但此地址僅用作發送WEB響應數據包的源地址,並不需要監聽客戶機的訪問請求(改由調度器監聽並分發)。因此使用虛擬接口lo:0來承載VIP地址,併爲本機添加一條路由記錄,將訪問VIP的數據限制在本地以避免通信紊亂。
修改內容如下:
//特別注意:子網掩碼必須爲全1
重啓network腳本使修改後的IP生效。
添加VIP本地訪問路由:
安裝httpd,創建測試頁(略,採用和NAT模式一樣設置),啓用httpd服務程序
安裝httpd軟件包,創建測試網頁
修改/etc/fstab文件,實現自動掛載
其他服務器節點做相同的備配,不再重複敘述。
5、安排多臺測試機,從internet中直接訪問http://172.16.16.172,將能夠看到由真實服務器提供的網頁內容
在LVS負載調度器中,通過查看節點狀態可以觀察當前的負載分配情況,對於輪詢算法來說,每個節點所獲得的連接負載應大致相當
至此有關LVS+keepalived羣集配置完畢,這樣即實現了lvs負載平衡又實現了調度器的熱備。