天天看點

keepalived的知識概括

1.1 背景:

最近有客戶在雲上使用keepalived的實作應用高可用的場景,對keepalived的相關知識進行總結,虛機進行的安裝測試,對相關測試進行記錄

環境:

作業系統 節點名稱 IP位址 VIP
centos-7.6 keepalived001 172.20.128.5 172.20.128.100
keepalived002 172.20.128.6

1.2 keepalived介紹

Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理并監控LVS叢集系統中各個服務節點的狀态,後來又加入了可以實作高可用的VRRP功能。是以,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟體。Keepalived軟體主要是通過VRRP協定實作高可用功能的。VRRP是Virtual Router RedundancyProtocol(虛拟路由器備援協定)的縮寫,VRRP出現的目的就是為了解決靜态路由單點故障問題的,它能夠保證當個别節點當機時,整個網絡可以不間斷地運作。是以,Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實作系統網絡服務的高可用功能。

1.3 keepalived服務的三個重要功能

* 管理LVS負載均衡軟體
* 實作LVS叢集節點的健康檢查中
* 網絡服務的高可用性(failover)
           

1.4 Keepalived高可用故障切換轉移原理Keepalived高可用服務對之間的故障切換轉移,是通過 VRRP (Virtual Router Redundancy Protocol ,虛拟路由器備援協定)來實作的。在 Keepalived服務正常工作時,主 Master節點會不斷地向備節點發送(多點傳播的方式)心跳消息,用以告訴備Backup節點自己還活看,當主 Master節點發生故障時,就無法發送心跳消息,備節點也就是以無法繼續檢測到來自主 Master節點的心跳了,于是調用自身的接管程式,接管主Master節點的 IP資源及服務。而當主 Master節點恢複時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢複到原來的備用角色。

1.5 VRRP原理VRRP ,全 稱 Virtual Router Redundancy Protocol ,中文名為虛拟路由備援協定 ,VRRP的出現就是為了解決靜态路由的單點故障問題。

VRRP的工作過程:

* 虛拟路由器中的路由器根據優先級選舉出Master。Master路由器通過發送ARP封包,将自己的虛拟MAC位址通知給與它連接配接的裝置或者主機,進而承擔封包轉發任務;
* Master路由器周期性發送VRRP封包,以公布其配置資訊(優先級等)和工作狀況;
* 如果Master路由器出現故障,虛拟路由器中的Backup路由器将根據優先級重新選舉新的Master;
* 虛拟路由器狀态切換時,Master路由器由一台裝置切換為另外一台裝置,新的Master路由器隻是簡單地發送一個攜帶虛拟路由器的MAC位址和虛拟IP位址資訊的免費ARP封包,這樣就可以更新與它連接配接的主機或裝置中的ARP相關資訊。網絡中的主機感覺不到Master路由器已經切換為另外一台裝置。
* Backup路由器的優先級高于Master路由器時,由Backup路由器的工作方式(搶占方式和非搶占方式)決定是否重新選舉Master。
           

VRRP的主要作用:

* Master路由器的選舉;
* Master路由器狀态的通告;
* 同時,為了提高安全性,VRRP還提供了認證功能;下面将從上述三個方面詳細介紹VRRP的工作過程。
           

1、Master的選舉過程:

* 如果VRRP封包中Master路由器的優先級高于自己的優先級,則路由器保持在Backup狀态;

* 如果VRRP封包中Master路由器的優先級低于自己的優先級,采用搶占工作方式的路由器将搶占成為Master狀态,周期性地發送VRRP封包,采用非搶占工作方式的路由器仍保持Backup狀态;

* 如果在一定時間内沒有收到VRRP封包,則路由器切換為Master狀态。
           

VRRP優先級的取值範圍為0到255(數值越大表明優先級越高),可配置的範圍是1到254,優先級0為系統保留給路由器放棄Master位置時候使用,255則是系統保留給IP位址擁有者使用。當路由器為IP位址擁有者時,其優先級始終為255。是以,當虛拟路由器記憶體在IP位址擁有者時,隻要其工作正常,則為Master路由器。

2、 Master路由器狀态的通告

* Master路由器周期性地發送VRRP封包,在虛拟路由器中公布其配置資訊(優先級等)和工作狀況。Backup路由器通過接收到VRRP封包的情況來判斷Master路由器是否工作正常。

* Master路由器主動放棄Master地位(如Master路由器退出虛拟路由器)時,會發送優先級為0的VRRP封包,緻使Backup路由器快速切換變成Master路由器。這個切換的時間稱為Skew time,計算方式為:(256-Backup路由器的優先級)/256,機關為秒。

* 當Master路由器發生網絡故障而不能發送VRRP封包的時候,Backup路由器并不能立即知道其工作狀況。Backup路由器等待一段時間之後,如果還沒有接收到VRRP封包,那麼會認為Master路由器無法正常工作,而把自己更新為Master路由器,周期性發送VRRP封包。如果此時多個Backup路由器競争Master路由器的位置,将通過優先級來選舉Master路由器。Backup路由器預設等待的時間稱為Master_Down_Interval,取值為:(3×VRRP封包的發送時間間隔)+Skew time,機關為秒。

* 在性能不夠穩定的網絡中,Backup路由器可能因為網絡堵塞而Master_Down_Interval期間沒有收到Master路由器的封包,而主動搶占為Master位置,如果此時原Master路由器的封包又到達了,就會出現虛拟路由器的成員頻繁的進行Master搶占現象。為了緩解這種現象的發生,特制定了延遲等待定時器。它可以使得Backup路由器在等待了Master_Down_Interval後,再等待延遲等待時間。如在此期間仍然沒有收到VRRP封包,則此Backup路由器才會切換為Master路由器,對外發送VRRP封包。

* Backup路由器在Master路由器壞掉之後,正常情況下需要等待Master_Down_Interval才能切換為新的Master的位置,這段時間内主機将無法正常通信,因為此時沒有Master裝置替它轉發封包。為了解決這個網絡故障,Backup裝置提供了一個監聽Master工作狀态的功能,使得Master路由器壞掉之後Backup能夠立即切換成為新的Master路由器,維持網絡通訊。Backup路由器監視Master路由器采用的是具有快速檢測功能的BFD技術。在Backup裝置上使用該技術監視Master路由器的狀态,一旦Master路由器發生故障,Backup就可以自動切換成為新的Master路由器,将切換時間縮短到毫秒級。
           

二 Keepalived的安裝

1、環境:

* yum install epel-release -y

* yum -y install keepalived
           

2、配置檔案編輯

! Configuration File for keepalived

global_defs {

router_id 001

}

vrrp_instance VI_1 {

state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
    auth_type PASS
    auth_pass 1111
}
virtual_ipaddress {
    172.20.128.100
}           

router_id 002

#狀态參數 master/backup
state MASTER 
# 虛IP位址放置的網卡位置
interface eth0
# 同一家族要一直,同一個叢集id一緻
virtual_router_id 51
# 優先級決定是主還是備,越大越優先
priority 100 
#主備通訊時間間隔
advert_int 1
authentication {
    auth_type PASS
    auth_pass 1111
}
virtual_ipaddress {
    172.20.128.100
    #  裝置之間使用的虛拟ip位址
}           

在keepalived001上把程序殺掉,可以看到服務自動被backup接管并成為master向外發vrrp的消息。如下圖:

keepalived的知識概括

在keepalived001上啟動程序,發現keepalived又成為主

keepalived的知識概括

三 keepalived 搶占式 和 非搶占式

搶占式

搶占模式是指當keepalived的某台機器挂了之後VIP漂移到了備節點,當主節點恢複後主動将VIP再次搶回,keepalived預設工作在搶占模式下。搶占式有三種情況:

* 兩台都為master,server1的優先級比server2的高,keepalived啟動後server1為主,server1出問題的時候server2接管,server1恢複後再次提升為master角色。           

實驗環境如上面的截圖,keepalived001和keepalived002均為master節點,節點keepalived001的優先級為150,keepalived002為優先級100,當keepalived001上的keepalived被殺掉後keepalived002接管,keepalived001節點上的keepalived程序開啟後自動搶占vip。

* server1為master ,server2為backup,server1的優先級高于server2,當server1出現故障的時候切到server2,此時server2提升為master,當server1恢複的時候,因server1的優先級比較高server1重新更新為master。           

實作環境如下圖所示:

keepalived的知識概括
keepalived的知識概括
keepalived的知識概括

server1為master ,server2為backup,server1的優先級低于server2,服務啟動時由于server2的優先級高,将提升為master, server1為backup,當server2故障的時候,server1接管,當server2恢複後接管變為master,server1降級為backup。

keepalived的知識概括
keepalived的知識概括
keepalived的知識概括
keepalived的知識概括

總結:搶占模式下,哪個server的優先級高,則為master, 與配置檔案state配置的狀态無關。

非搶占式

非搶占模式則是當主節挂了再次起來後不再搶回VIP。兩個節點的state都必須配置為BACKUP,兩個節點都必須加上配置 nopreempt。

server1和server2都為backup。我們要注意啟動server服務的啟動順序,先啟動的更新為master,與優先級無關。且配置檔案中必須配置nopreempt。

實驗環境:

兩台伺服器的keepalived的程序都殺掉,先啟動keepalived001節點上的程序,此時可以看到雖然keepalived001的節點的優先級低,但依然是keepalived001的狀态為master狀态。

keepalived的知識概括
keepalived的知識概括

然後殺掉keepalived001上的keepalived程序,會看到keepalived002由BACKUP狀态變為master,搶占了vip服務。

keepalived的知識概括

當在keepalived001上啟動了程序之後,vip随機立即釋放掉,依舊為BACKUP狀态,keepalived002上沒有新日志産生,依舊是MASTER狀态,說明沒有vip的搶占。

keepalived的知識概括

繼續閱讀