keepalived簡單配置實現nginx高可用
keepalived主要是透過VRRP協議實現高可用的,VRRP是Virtual Router RedundancyProtocol(虛擬路由器冗餘協議)的縮寫,VRRP出現的目的就是為了解決靜態路由單點故障問題的,它能夠保證當個別節點宕機時,整個網路可以不間斷地執行,VRRP是透過一種競選機制來將路由的任務交給某臺VRRP路由器的。
在 Keepalived服務正常工作時,主 Master節點會不斷地向備節點發送(多播的方式)心跳訊息,用以告訴備Backup節點自己還活看,當主 Master節點發生故障時,就無法傳送心跳訊息,備節點也就因此無法繼續檢測到來自主 Master節點的心跳了,於是呼叫自身的接管程式,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
VRRP是遑過競選機制來確定主備的,主的優先順序高於備,因此,工作時主會優先獲得所有的資源,備節點處於等待狀態,當主掛了的時候,備節點就會接管主節點的資源,然後頂替主節點對外提供服務。在 Keepalived服務對之間,只有作為主的伺服器會一直髮送 VRRP廣播包,告訴備它還活著,此時備不會槍佔主,當主不可用時,即備監聽不到主傳送的廣播包時,就會啟動相關服務接管資源,保證業務的連續性。接管速度最快可以小於1秒。
一個master的配置示例:
[lh@nginx-master keepalived]$ cat /etc/keepalived/keepalived。conf
! Configuration File for keepalived
global_defs {
router_id yw #定義路由標識資訊,相同區域網要唯一
}
vrrp_script chk_nginx_proxy {
script “/server/scripts/chk_nginx_proxy。sh” #監控nginx的指令碼
interval 2
weight 2
}
vrrp_instance VI_1 { #定義例項
state MASTER # 狀態引數
interface eth1 #指定網絡卡
virtual_router_id 55 #同一個叢集ID要一致
priority 150 #優先順序 越大越優先
advert_int 1 #主備通訊時間間隔
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10。97。190。128/24 #定義的虛擬IP地址
}
track_script {
chk_nginx_proxy
}
}
備機的keepalived配置
備機的keepalived配置
使用ip addr show 檢視master機器的IP資訊:
可以發現128這個ip目前在這個機器上:
master ip addr show
將master的keepalived停掉:
[lh@nginx-master keepalived]$ sudo service keepalived stop
Stopping keepalived: [ OK ]
然後在備機檢視ip資訊:
備機 ip addr show
可以發現IP已經漂移到了備機上,如果此時master上的keepalived重新啟動,會發現128這個ip又會回到master機器上,因為master優先順序比backup的高。
附chk_nginx_proxy。sh的指令碼內容:
[lh@nginx-master keepalived]$ cat /server/scripts/chk_nginx_proxy。sh
#! /bin/sh
if [ `netstat -lntup|grep nginx|wc -l` -ne 2 ];then
/etc/init。d/keepalived stop
fi
[lh@nginx-master keepalived]$