用keepalived配置高可用集群
Keepalived軟件起初是專為LVS負載均衡軟件設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。
Keepalived軟件主要是通過VRRP協議實現高可用功能的。VRRP是Virtual Router RedundancyProtocol(虛擬路由器冗余協議)的縮寫,VRRP出現的目的就是為了解決靜態路由單點故障問題的,它能夠保證當個別節點宕機時,整個網絡可以不間斷地運行。
所以,Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實現系統網絡服務的高可用功能。
keepalived官網http://www.keepalived.org
2 keepalived服務的三個重要功能
管理LVS負載均衡軟件
實現LVS集群節點的健康檢查中
作為系統網絡服務的高可用性(failover)
3 Keepalived高可用故障切換轉移原理
Keepalived高可用服務對之間的故障切換轉移,是通過 VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗余協議)來實現的。
在 Keepalived服務正常工作時,主 Master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備Backup節點自己還活看,當主 Master節點發生故障時,就無法發送心跳消息,備節點也就因此無法繼續檢測到來自主 Master節點的心跳了,於是調用自身的接管程序,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
那麽,什麽是VRRP呢?
VRRP ,全 稱 Virtual Router Redundancy Protocol ,中文名為虛擬路由冗余協議 ,VRRP的出現就是為了解決靜態踣甶的單點故障問題,VRRP是通過一種競選機制來將路由的任務交給某臺VRRP路由器的。
4 keepalived 原理
5 keepalived部署
實驗配置環境:
系統:centos 6.5
主:master 192.168.11.130
從:backup 192.168.11.131
vip: 192.168.11.100
主從都關閉防火墻或清除規則
主從都安裝keepalived和nginx
#yum install -y keepalived
#yum install -y nginx
1編輯主上配置文件:
# vim /etc/keepalived/keepalived.conf
global_defs { #全局配置 notification_email { 定義報警郵件地址 [email protected] } notification_email_from [email protected] #定義發送郵件的地址 smtp_server 127.0.0.1 smtp_connect_timeout 30 #定義超時時間 router_id LVS_DEVEL #定義路由標識信息,相同局域網唯一 } vrrp_script chk_nginx { #check模塊,檢測一個服務是否正常,需要寫腳本 script "/usr/local/sbin/check_ng.sh" #檢測腳本 interval 3 #檢測的時間間斷 } vrrp_instance VI_1 { #定義master相關 state master #狀態參數 master/backup 只是說明 interface eth0 #虛IP地址放置的網卡位置 virtual_router_id 51 #同一家族要一直,同一個集群id一致 priority 100 # 優先級決定是主還是備 越大越優先 advert_int 1 authentication { #認證相關的信息 auth_type PASS auth_pass aminglinux>com } virtual_ipaddress { #vip 192.168.11.100 }
編輯主上監控腳本
# vim /usr/local/sbin/check_ng.sh
#!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #如果進程為0,則啟動nginx,並且再次檢測nginx進程數量, #如果還為0,說明nginx無法啟動,此時需要關閉keepalived if [ $n -eq "0" ]; then service nginx restart n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log service keepalived stop fi fi
給腳本755權限
# chmod 755 /usr/local/sbin/check_ng.sh
啟動keepalived
service keepalived start
啟動keepalived後,nginx會自動加載啟動
編輯從上配置文件:
# vim /etc/keepalived/keepalived.conf
global_defs { #全局配置 notification_email { 定義報警郵件地址 [email protected] } notification_email_from [email protected] #定義發送郵件的地址 smtp_server 127.0.0.1 smtp_connect_timeout 30 #定義超時時間 router_id LVS_DEVEL #定義路由標識信息,相同局域網唯一 } vrrp_script chk_nginx { #check模塊,檢測一個服務是否正常,需要寫腳本 script "/usr/local/sbin/check_ng.sh" #檢測腳本 interval 3 #檢測的時間間斷 } vrrp_instance VI_1 { #定義master相關 state backup #狀態參數 master/backup 只是說明 interface eth0 #虛IP地址放置的網卡位置 virtual_router_id 51 #同一家族要一直,同一個集群id一致 priority 90 # 優先級決定是主還是備 越大越優先 advert_int 1 authentication { #認證相關的信息 auth_type PASS auth_pass aminglinux>com } virtual_ipaddress { #vip 192.168.11.100 }
編輯從上監控腳本
# vim /usr/local/sbin/check_ng.sh
#!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #如果進程為0,則啟動nginx,並且再次檢測nginx進程數量, #如果還為0,說明nginx無法啟動,此時需要關閉keepalived if [ $n -eq "0" ]; then service nginx restart n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log service keepalived stop fi fi
給腳本755權限
# chmod 755 /usr/local/sbin/check_ng.sh
啟動keepalived
service keepalived start
啟動keepalived後,nginx會自動加載啟動
測試高可用:
先確定好兩臺機器上nginx差異
主上:# echo master11111111111111 > /usr/share/nginx/html/index.html
從上:# echo backup22222222222222 > /usr/share/nginx/html/index.html
測試1:關閉master上的nginx服務
測試2:在master上增加iptabls規則
iptables -I OUTPUT -p vrrp -j DROP
測試3:關閉master上的keepalived服務
測試4:啟動master上的keepalived服務
瀏覽器緩存測試不準,用另外一臺虛擬機curl測試
# curl 192.168.11.100
參考文章: https://www.cnblogs.com/clsn/p/8052649.html
用keepalived配置高可用集群