Heartbeat的介紹及工作原理

一、HeartBeat的概述

Heartbeat 項目是 Linux-HA 工程的一個組成部分,自1999年開始到現在,發佈了衆多版本,是目前開源Linux-HA項目最成功的一個例子,它實現了一個高可用集羣系統。心跳服務和集羣通信是高可用集羣的兩個關鍵組件,在 Heartbeat 項目裏,由 heartbeat 模塊實現了這兩個功能:心跳監測部分和資源接管部分

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

二、HeartBeat的作用

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

三、HeartBeat的工作原理

通過修改Heartbeat的軟件的配置文件,可以制定那一臺Heartbeat服務器作爲主服務器,則另一臺將自動成爲熱備服務器。然後在熱備服務器上配置Heartbeat

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

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

1、切換的常見條件

  • 服務器宕機
  • Heartbeat服務本故障
  • 中間的連接線路故障

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

2、heartbeat的心跳連接

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

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

  • 串行電纜,即所謂的串口(首選,缺點是距離不能太遠)
  • 一根以太網電纜量網口直連(生產環境中常用的方式)
  • 以太網電纜,通過交換機等網絡設備連接(次選,原因是增加了故障點,不好排查故障,同時,線路不是專用的心跳線,容易受其他數據傳輸的影響,導致心跳報文發送問題)

3、Heartbeat裂腦

什麼是裂腦?

由於兩臺高可用服務器之間在指定的時間內,無法互相檢測到對方心跳而各自啓動故障轉移功能,取得了資源以及服務的所有權,而此時的兩臺高可用服務器對都還活着並作正常運行,這樣就會導致同一個IP湖綜合服務在兩端同時啓動而發生衝突的嚴重問題,最嚴重的就是兩臺主機同時佔用一個VIP的地址,當用戶寫入數據的時候可能會分別寫入到兩端,這樣可能會導致服務器兩端的數據不一致或造成數據的丟失,這種情況就本成爲裂腦,也有的人稱之爲分區集羣或者大腦垂直分隔導致裂腦發生的原因:  

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

  • 高可用服務器對之間心跳線路故障,導致無法正常的通信。原因比如:
心跳線本身就壞了(包括斷了,老化)
網卡以及相關驅動壞了,IP配置及衝突問題
心跳線間連接的設備故障(交換機的故障或者是網卡的故障)
仲裁的服務器出現問題
  • 高可用服務器對上開啓了防火牆阻擋了心跳消息的傳輸
  • 高可用服務器對上的心跳網卡地址等信息配置的不正確,導致發送心跳失敗。
  • 其他服務配置不當等原因,如心跳的方式不同,心跳廣播衝突,軟件出現了BUG等

防止腦裂發生的方法總結:

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

  • 同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了,另一個線路還是好的,依然能傳送消息(推薦的)
  • 檢測到裂腦的時候強行的關閉一個心跳節點(需要特殊的節點支持,如stonith,fence),相當於程序上備節點發現心跳線故障,發送關機命令到主節點。
  • 做好對裂腦的監控報警(如郵件以及手機短信等),在問題發生的時候能夠人爲的介入到仲裁,降低損失。當然,在實施高可用方案的時候,要根據業務的實際需求確定是否能夠容忍這樣的損失。對於一般的網站業務,這個損失是可控的(公司使用)
  • 啓用磁盤鎖。正在服務一方鎖住共享磁盤,腦裂發生的時候,讓對方完全搶不走共享的磁盤資源。但使用鎖磁盤也會有一個不小的問題,如果佔用共享盤的己方不主動解鎖,另一方就永遠得不到共享磁盤。現實中介入服務節點突然死機或者崩潰,另一方就永遠不可能執行解鎖命令。後備節點也就接管不了共享的資源和應用服務。於是有人在HA中涉及了“智能”鎖,正在服務的一方只在發現心跳線全部斷開時才啓用磁盤鎖,平時就不上鎖了
  • 報警報在服務器接管之前,給人員處理留足夠的時間就是1分鐘內報警了,但是服務器不接管,而是5分鐘之後接管,接管的時間較長。數據不會丟失,但就是會導致用戶無法寫數據。
  • 報警後,不直接自動服務器接管,而是由人員接管。
  • 增加仲裁的機制,確定誰該獲得資源,這裏面有幾個參考的思路:

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

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

四、HeartBeat的消息類型:

  heartBeat高可用軟件在工作的過程中,一般來說,有三種消息的類型,具體爲:

1、心跳消息

心跳消息爲約150字節的數據包,可能爲單播,廣播或者多播的方式,控制心跳頻率以及出現故障要等待多久進行故障轉換

2、集羣轉換消息

    當主服務器恢復在線狀態時,通過ip-request消息是要求備機釋放主服務器失敗時被服務器取得的的資源,然後被服務器關閉是仿主服務器失敗時取得的資源以及服務。

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

3、重傳消息請求

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

  提示:以上的心跳控制消息都使用的是UDP協議發送到/etc/ha.d/ha.cf文件指定到任意的端口,或者指定到多播地址。

五、Heartbeat ip地址接管和故障轉移:

  Heartbeat是通過IP地址接管和ARP廣播進行故障轉移的。

1、ARP廣播

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

  (這提到的客戶端機器是和Heartbeat高可用服務器對在同一個網絡中的客戶機,並不是最終的互聯網用戶,這裏的客戶端及其是相對Heartbeat高可用服務器對說的,這點,請注意下)

2、VIP/IP 別名/輔助IP:

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

供用戶的訪問服務的,而是僅作管理服務器使用,如ssh可以通過這個管理IP連接服務器    

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

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

到,而且,管理IP遷移過去了我們就不能夠登錄到這臺機器上,這就需要到機房登陸了。VIP的實質就是確保兩臺服務器有一個管理IP不懂,就是隨時可以連上機器,

然後,增加綁定其他的VIP,這樣就算VIP轉移走了,也不至於服務器本身連不上,因爲還有管理的IP呢

3、手工配置VIP的方法

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的配置情況

4、手工刪除VIP的方法:

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配置文件:

heartbeat的默認配置文件的目錄爲/etc/ha.d heartbeat的常用配置文件有三個,分別爲ha.cf、authkey、haresource.

  • ha.cf heartbeat參數配置文件 在這裏配置一些基本的參數
  • authkey heartbeat認證文件 高可用服務器對之間根據對端的authkey,對對端的進行認證
  • haresource heartbeat的資源文件 如配置資源以及一些腳本程序

重要資源目錄:/etc/ha.d/resource.d/,如果以後自己開發程序,就放到這個地方即可,然後在haresource文件裏直接調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章