高可用之KeepAlive工作原理

Kieven2oo8發表於2020-12-10

問題:

1.高可用解決什麼問題?
解決單點故障的問題------keepalived.
(1)要有備份,從而當一個出現問題時,可以切換到另一個,解決單點故障的問題。
(2)要能夠自動切換。
2.為什麼要用keepalived?
1>安裝和配置都簡單,只有一個配置檔案
2>keepalived可以實現自動切換,實現主從切換

keepalive缺點:但是如果是大規模的分散式專案的話,一般不用Keepalived,因為它只提供了簡單的心跳和切換的功能,但是沒有提供叢集管理的功能。
優點:比較簡單,方便學習和配置。

 

Keepalive工作原理

1.1軟體介紹

1

Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS叢集系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟體。

Keepalived採用模組化設計,不同模組實現不同的功能

Keepalivd主要有三個模組,分別是core,check,vrrp

1

2

3

core:是Keepalived的核心,負責主程式的啟動和維護,全域性配置檔案的載入解析等

check:負責healthchecker(健康檢查)

vrpp:VRRPD子程式,VRRPD子程式就是來實現VRRP協議的

 Keepalived配置檔案:

1

2

3

Keepalived配置檔案為:keepalived.conf;

主要有三個配置區域,分別是:全域性配置(Global Configuration)、VRRPD配置、LVS配置 

全域性配置又包括兩個子配置: 全域性定義(global definition) 靜態IP地址/路由配置(static ipaddress/routes)

 1.2Keepalived高可用原理

1

2

Keepalived高可用服務之間的故障切換轉移,是通過VRRP(虛擬路由冗餘協議)來實現的。

在Keepalived服務正常工作時,主master節點會不斷的向備節點傳送心跳資訊,用來告訴備Backup節點自己還活著,當主master節點發生故障時候,就無法傳送心跳資訊了,備節點也就因此無法繼續檢測到來自主 Master節點的心跳了,於是呼叫自身的接管程式,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。

keepalived是一個類似於layer3, 4 & 5交換機制的軟體,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web 伺服器的狀態。 Layer3,4&5工作在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別如下:

Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向伺服器群中的伺服器傳送一個ICMP的資料包(既我們平時用的Ping程式),如果發現某臺服務的IP地址沒有啟用,Keepalived便報告這臺伺服器失效,並將它從伺服器群中剔除,這種情況的典型例子是某臺伺服器被非法關機。Layer3的方式是以伺服器的IP地址是否有效作為伺服器工作正常與否的標準。

Layer4:Layer4主要以TCP埠的狀態來決定伺服器工作正常與否。如web server的服務埠一般是80,如果Keepalived檢測到80埠沒有啟動,則Keepalived將把這臺伺服器從伺服器群中剔除。

Layer5:Layer5就是工作在具體的應用層了,比Layer3,Layer4要複雜一點,在網路上佔用的頻寬也要大一些。Keepalived將根據使用者的設定檢查伺服器程式的執行是否正常,如果與使用者的設定不相符,則Keepalived將把伺服器從伺服器群中剔除。

 

 VRRP作用

1

vrrp是虛擬路由冗餘協議,就是當出現單點故障問題通過競選方式決定vip走向的一種機制

 1.3Keepalived服務vrrp的工作原理

1

2

Keepalived高可用是通過vrrp協議通訊的,vrrp是通過競選機制決定主備,主的優先順序高於備伺服器的,所以在工作時主會優先獲取所有的資源,備節點處於準備狀態,當主節點當機時候,備節點會接管主節點的資源,然後頂替主節點對外提供服務。

在 Keepalived服務對之間,只有作為主的伺服器會一直髮送 VRRP廣播包,告訴備它還活著,此時備不會槍佔主,當主不可用時,即備監聽不到主傳送的廣播包時,就會啟動相關服務接管資源,保證業務的連續性.接管速度最快;

 

 

 1.4出現腦裂的原因

一般來說,腦裂的發生有以下幾種原因:

1

2

3

4

5

6

7

8

9

高可用伺服器對之間心跳線鏈路發生故障,導致無法正常通訊。

心跳線壞了(包括斷了,老化)。

網路卡及相關驅動壞了,ip配置及衝突問題(網路卡直連)。

心跳線間連線的裝置故障(網路卡及交換機)。

仲裁的機器出問題(採用仲裁的方案)。

高可用伺服器上開啟了 iptables防火牆阻擋了心跳訊息傳輸。

高可用伺服器上心跳網路卡地址等資訊配置不正確,導致傳送心跳失敗。

其他服務配置不當等原因,如心跳方式不同,心跳廣插衝突、軟體Bug等。

Keepalived配置裡VRRP例項如果 virtual_router_id兩端引數配置不一致也會導致裂腦問題發生。

1.5如何解決腦裂

1

2

3

4

①同時使用序列電纜和乙太網電纜連線,同時用兩條心跳線路,這樣一條線路壞了,另一個還是好的,依然能傳送心跳訊息。

②當檢測到裂腦時強行關閉一個心跳節點(這個功能需特殊裝置支援,如Stonith、feyce)。相當於備節點接收不到心跳訊息,通過單獨的線路傳送關機命令關閉主節點的電源。

③做好對裂腦的監控報警(如郵件及手機簡訊等或值班).在問題發生時人為第一時間介入仲裁,降低損失。

管理員可以通過手機回覆對應數字或簡單的字串操作返回給伺服器.讓伺服器根據指令自動處理相應故障這樣解決故障的時間更短。

轉載:https://www.cnblogs.com/charon2/p/10421285.html

https://blog.csdn.net/ginny97/article/details/103760598

https://www.cnblogs.com/zhangxingeng/p/10595058.html

相關文章