Heartbeat的介紹及工作原理

2021-10-05 15:42:09 字數 3487 閱讀 1576

heartbeat 專案是 linux-ha 工程的乙個組成部分,自2023年開始到現在,發布了眾多版本,是目前開源linux-ha專案最成功的乙個例子,它實現了乙個高可用集群系統。心跳服務和集群通訊是高可用集群的兩個關鍵元件,在 heartbeat 專案裡,由 heartbeat 模組實現了這兩個功能:心跳監測部分和資源接管部分

心跳監測可以通過網路鏈路和串列埠進行,而且支援冗 餘鏈路,它們之間相互傳送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方傳送的報文,那麼就認為對方失效,這時需啟動資源接管模組來接管運 行在對方主機上的資源或者服務。

通過heartbeat,可以將資源(ip以及程式服務等資源)從一台已經故障的計算機快速轉移到另一台正常運轉的機器上繼續提供服務,一般稱之為高可用的服務。在實際的生產應用場景中,heartbeat的功能和另乙個高可用的開源軟體keepalived有很多的相同之處,在我們實際的生產業務中也是有區別的。

通過修改heartbeat的軟體的配置檔案,可以制定那一台heartbeat伺服器作為主伺服器,則另一台將自動成為熱備伺服器。然後在熱備伺服器上配置heartbeat

守護程式來監聽來自主伺服器的心跳訊息。如果熱備伺服器在指定時間內為監聽到來自主伺服器的心跳,就會啟動故障轉義程式,並取得主伺服器上的相關資源服務的所有權,接替主伺服器繼續不間斷的提供服務,從而達到資源以及服務高可用的目的。

以上的描述heartbeat的主備模式,heartbeat還支援主主模式,即兩台伺服器互為主備,這是他們之間還會互相傳送報文來告訴對方自己的當前的狀態,如果在指定的時間內未收到對方傳送的心跳報文,那麼,一方就會認為對方失效或者是已經宕機了,這時每個執行正常的主機就會啟動自身的資源接管模組來接管執行在對方主機上的資源或者是服務,繼續為使用者提供服務。一般情況下,可以較好的實現一台主機故障後,企業業務能夠不間斷的持續的提供服務。注意:所謂的業務不間斷,在故障轉移期間也是需要切換時間的,heartbeat的切換時間是5-20秒。

應用服務故障則不會產生切換,可以通過服務宕機把heartbeat服務停掉。

講過上面的描述,要部署heartbeat服務,至少需要兩台主機才能完成。那麼,要實現高可用服務,這兩台主機之間,是如何做到互相通訊互相監控的呢?

下面是兩台heartbeat主機之間通訊的一些常用的可行的方法:

由於兩台高可用伺服器之間在指定的時間內,無法互相檢測到對方心跳而各自啟動故障轉移功能,取得了資源以及服務的所有權,而此時的兩台高可用伺服器對都還活著並作正常執行,這樣就會導致同乙個ip湖綜合服務在兩端同時啟動而發生衝突的嚴重問題,最嚴重的就是兩台主機同時占用乙個vip的位址,當使用者寫入資料的時候可能會分別寫入到兩端,這樣可能會導致伺服器兩端的資料不一致或造成資料的丟失,這種情況就本成為裂腦,也有的人稱之為分割槽集群或者大腦垂直分隔導致裂腦發生的原因:  

一般來說裂腦的發生,主要是由以下的幾個原因導致的:

心跳線本身就壞了(包括斷了,老化)

網絡卡以及相關驅動壞了,ip配置及衝突問題

心跳線間連線的裝置故障(交換機的故障或者是網絡卡的故障)

仲裁的伺服器出現問題

發生腦裂的時候,對業務的影響是及其嚴重的,有的時候甚至是致命的。如:兩台高可用的伺服器對之間發生腦裂,導致互相競爭同乙個ip資源,就如同我們區域網內常見的ip位址衝突一樣,兩個機器就會有乙個或者兩個不正常,影響使用者正常訪問伺服器。如果是應用在資料庫或者是儲存服務這種極重要的高可用上,那就導致使用者發布的資料間斷的寫在兩台伺服器上的惡果,最終資料恢復及困難或者是難已恢復。實際的生產環境中,我們可以從以下幾個方面來防止裂腦的發生:

增加乙個仲裁機制。例如設定參考的ip,當心跳完全斷開的時候,2個節點各自都ping一下參考的ip,不同則表明斷點就出現在本段,這樣就主動放棄競爭,讓能夠ping通參考ip的一端去接管服務。

通過第三方軟體仲裁誰該獲得資源,這個在阿里有類似的軟體應用

heartbeat高可用軟體在工作的過程中,一般來說,有三種訊息的型別,具體為:

心跳訊息為約150位元組的資料報,可能為單播,廣播或者多播的方式,控制心跳頻率以及出現故障要等待多久進行故障轉換

備伺服器釋放主伺服器失敗時取得的資源以及服務後,就會通過ip-request-resp訊息通知主伺服器它不在擁有該資源以及服務,主伺服器收到來自備節點的ip-request-resp訊息通知後,啟動失敗時釋放的資源以及服務,並開始提供正常的訪問服務。

rexmit-request控制重傳心跳請求。此訊息不太重要,細節就不多介紹了

heartbeat是通過ip位址接管和arp廣播進行故障轉移的。

在主伺服器故障的時候,備用節點接管資源後,會強制更新所有的客戶端本地的arp表(即清除客戶端本地快取的失敗伺服器的vip位址和mac位址的解析記錄)。確保客戶端和新的主伺服器進行對話。

(這提到的客戶端機器是和heartbeat高可用伺服器對在同乙個網路中的客戶機,並不是最終的網際網路使用者,這裡的客戶端及其是相對heartbeat高可用伺服器對說的,這點,請注意下)

真實ip,又被稱為管理ip,一般是配置在物理網絡卡上的實際ip,這可以看做是你本人的真實姓名,如:張三。在負載均衡以及高可用環境中,管理ip是不會對外提

供使用者的訪問服務的,而是僅作管理伺服器使用,如ssh可以通過這個管理ip連線伺服器    

vip是虛擬的ip,只是個概念而已,可能會誤導,實際上就是heartbeat臨時綁在物理網絡卡上的別名ip,如eth0:x,x為0-255的任意數字,可以在一塊網絡卡上綁

定多個別名,這樣做的好處是當提供服務的伺服器宕機之後,在接管的伺服器上會直接會自動配置上同樣的vip提供服務。如果使用管理ip的話,來回遷移就難以做

到,而且,管理ip遷移過去了我們就不能夠登入到這台機器上,這就需要到機房登陸了。vip的實質就是確保兩台伺服器有乙個管理ip不懂,就是隨時可以連上機器,

然後,增加繫結其他的vip,這樣就算vip轉移走了,也不至於伺服器本身連不上,因為還有管理的ip呢

ifconfig eth0:1 124.42.61.109 netmask 255.255.255.224 up(ip alias) –》heartbeat2軟體預設是使用這個命令來新增vip的

ip addr add 10.0.15.1/24 broadcast 10.0.15.255 dev eth1(輔助ip)–》keepalived以及heartbeat3採用的方案新增vip的

注意:使用ip addr能夠檢視到包括別名和輔助ip,用ifconfig無法查到輔助ip的配置情況

ip addr del 10.0.15.1/24 broadcast 10.0.15.255 dev eth1(輔助ip)

ifconfig eth0:1 124.42.61.109 netmask 255.255.255.244 down(ip alias)

heartbeat的預設配置檔案的目錄為/etc/ha.d heartbeat的常用配置檔案有三個,分別為ha.cf、authkey、haresource.

重要資源目錄:/etc/ha.d/resource.d/,如果以後自己開發程式,就放到這個地方即可,然後在haresource檔案裡直接呼叫。

heartbeat是怎麼工作的

因為我們要提供 高可用性 所以要考慮到 導演 突然罷工的情形 因此我們要安排兩個導演,也 就是要有兩個排程伺服器節點。這兩個節點的地位不同,其中乙個是主節點,另外乙個是輔節點 可以看成是乙個 主導演 和乙個 副導演 這兩個節點正是 用heartbeat來互相監測對方的。heartbeat可以通過乙太...

FastCGI介紹及LNMP工作原理

本文參考自fastcgi介紹及lnmp工作原理 1 什麼是cgi cgi全稱是 通用閘道器介面 common gateway inte ce http伺服器與你的或其它機器上的程式進行 交談 的一種工具,其程式一般執行在網路伺服器上。cgi可以用任何一種語言編寫,只要這種語言具有標準輸入 輸出和環境...

c 工作路徑介紹及獲取

1 絕對路徑 絕對路徑是指目錄下的絕對位置,直接到達目標位置,通常是從碟符開始的路徑。例如 c windows system32 cmd.exe 注意 在不同系統的情況系 windows下是 linux和unix下是 但在win中沒有本質區別。linux和unix系統中絕對路徑 以 為起始 例 ho...