heartbeat高可用原理詳解(上)
通過heartbeat,可以將資源(IP及程序服務等資源)從一臺已經故障的計算機快速轉移到另一臺正常運轉的機器上繼續提供服務,一般稱之為高可用服務。在實際生產中mkeepalived有很多相同之處。在生產實際的業務應用也是有區別的。
2.工作原理
通過修改heartbeat軟件的配置文件,可以指定那一臺heartbeat服務器作為主服務器,則另一臺將自動稱為熱備服務器,然後在熱備服務器上配置heartbeat守護進程來監聽來自祝福我的心跳信息,如果熱備服務器在指定實踐內未監聽到來自住服務器的心跳,就會啟動故障轉移程序,並取得住服務器上的相關資源服務的所有權,接替住服務繼續不間斷的提供服務,從而達到資源及服務高可用性的目的。這是heartbeat主備的模式。
還可以支持主主模式,這時它們之間會相互發送報文給對方主機監聽程序是否正常。
在heartbeat進行主備切換的時候,是需要時間的,首先是判斷主宕機,然後從接替vip,啟動從服務上面的程序(備機上面的程序本來是沒有開啟的)。
另外:和keepalived服務一樣,heartbeat高可用是服務器級別的,不是服務器級別的,如果主上面的apache,mysqld服務出現問題,是不會切換的,只有服務器宕機,heartbeat服務本身故障或者heartbeat主備之間的連接線路出現問題才會發生切換。
所以要做處理,如果服務宕機了,就把heartbeat停掉。
心跳連接介紹:
實現高可用,這兩臺主機之間是如何做到互相通信和互相監測的?
1.串行電纜,所謂的串口(首先,缺點是距離不能太遠)
2.一根以太網線兩網卡直連(推薦)
3.以太網電纜,通過交換機等網絡設備是連接(次選)增加來交換機故障點,容易受其他數據傳輸的影響,導致心跳報文發送失敗。
腦裂:
由於兩臺高可用服務器對之間在指定時間內,無法檢測到對方心跳而各自啟動故障轉移功能,取得了資源及服務的所有權,而此時的兩臺高可用服務器對都還或者並在正常運行,這樣就會導致同一個IP或服務在兩端同時啟動而發生沖突的嚴重問題,最嚴重的是兩臺主機占用同一個vip地址,當用戶寫入數據可能會分別寫入到兩端,這樣可能會導致服務器兩端的數據不一致或數據丟失,這樣情況就被稱為腦裂,也有的人成氣味分區集群或大腦垂直分割。
防止腦裂:
(推薦)同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了,另一個還是好的,依然能傳送心跳信息。
(企業級別)*檢測到腦裂時強行關閉一個心跳節點。(這個功能許特殊設備支持,如stonith,fence),相當於程序上備節點發現心跳線路故障,發送關機命令到主節點。
做好對腦裂的監控報警(如郵件及手機短信等),在問題發生時認為第一時間介入仲裁,降低損失
增加仲裁機制:
當心跳線完全斷開的時候,兩個節點分別ping網關,那個ping不通就自己放棄。
關於fence設備
fence是HA集群環境下的術語,在硬件領域,fence設備其實就是一個智能電源管理設備(IPMI),不管是內部還是外部fence,這些外部fence,這些設備都是帶有以太網口的,用來在HA切換觸發時通過網絡重啟提供資源服務的服務器。
heartbeat消息類型
heartbeat高可用軟件在工作過程中,一般來說,有三種消息類型,具體為:
心跳消息
集群轉換消息
重傳請求
1.心跳消息
心跳消息為約150字節的數據包,可能為單播,廣播或多播的方式,控制心跳頻率及出現故障要等待多久進行故障轉移。
2.集群轉換消息
ip-request和ip-request-resp
當主服務器恢復在線狀態時,通過ip-request消息要求備機釋放主服務器失敗時備服務器取得的資源,然後備份服務器關閉釋放主服務器失敗時取得的資源及服務。
備服務器釋放主服務器失敗時取得的資源及服務後,通過ip-request-resp消息通知主服務器它不在擁有該資源及服務,主服務器收到備節點的ip-request-resp消息通知後,啟動失敗時釋放的資源及服務,並開始提供正常的訪問服務。
3.重傳請求
rexmit-request控制重傳心跳請求,次消息不太重要。
提示:以上心跳控制消息都使用UDP協議發送到/etc/ha.d/ha.cf文件指定的任意端口,或指定的多播地址。
heartbeat IP地址接管和故障轉移
heartbeat是通過IP地址接管和ARP廣播進行故障轉移的。
ARP廣播:在主服務器故障時,備用節點接管資源後,會立即強制更新所有客戶端本地的ARP表(即清除客戶端本地緩存的失敗服務器的Vip地址和mac地址的解析記錄)。確保客戶端和新的主服務器對話。
這個所說的客戶端是指的是在這個局域網內做ARP廣播,告訴局域網此時VIP對應的MAC地址。
VIP:
綁定在網卡別名上的ip。
手工配置VIP的方法:
ifconfig eth0:1 10.0.0.4 netmask 255.255.255.224 up/down (ip別名)
ip addr add/del 10.0.0.5/24 broadcast 10.0.0.255 dev eth1 輔助IP
提示:heartbeat3不在使用ip別名,而是使用輔助IP
heartbeat高可用原理詳解(上)