首頁歷史 > 正文

keepalived簡單配置實現nginx高可用

2022-02-07由 頂級飯糰 發表于 歷史

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簡單配置實現nginx高可用

備機的keepalived配置

使用ip addr show 檢視master機器的IP資訊:

可以發現128這個ip目前在這個機器上:

keepalived簡單配置實現nginx高可用

master ip addr show

將master的keepalived停掉:

[lh@nginx-master keepalived]$ sudo service keepalived stop

Stopping keepalived: [ OK ]

然後在備機檢視ip資訊:

keepalived簡單配置實現nginx高可用

備機 ip addr show

可以發現IP已經漂移到了備機上,如果此時master上的keepalived重新啟動,會發現128這個ip又會回到master機器上,因為master優先順序比backup的高。

keepalived簡單配置實現nginx高可用

附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]$

頂部