官方網址:http://linux-ha.org/wiki/Main_Page | ||
Heartbeat 簡介 | Heartbaet 一款開源高可用(Highly-Available)服務的軟件,通過heartbeat, 可以將資源(ip及程序服務等資源)從一臺已故障的計算機快速轉移到另一臺正常運轉的機器上繼續提供服務,一般稱之爲高可用服務。在實際成產應用場景中,heartbeat的功能和另一個高可用開源軟件keeplived有很多相同之處,但在生產中,對應實際的業務應用也是有區別的,例如:keeplived主要是控制ip的漂移,配置、應用簡單,而hearbeat則不但可以控制ip的漂移,更擅長對資源服務的控制(mysql的重啓),配置,應用比較複雜。 | |
Heartbeat工作原理: keeplived和heartbeat高可用是操作系統級別的,不是(軟件級別的),可以通過簡單的腳本,實現軟件級別的高可用。 | heartbeat的主備模式 ,通過修改heatbeat軟件的配置文件,可以指定那一臺heartbeat服務器爲主服務器,則另一臺將自動成爲熱備服務器。然後再熱備服務器上配置Heartbeat守護程序來監聽自服務器的心跳信息。如果熱備服務器在指定時間內未監聽到來自主服務器的心跳,就會啓動故障轉移程序,並取得主服務器的相關資源服務的權限,接替主服務器繼續不間斷的提供服務,從而達到資源及服務高可用性的目的。 | |
heartbeat還支持主主模式(可以針對不同的業務),及兩臺服務器互爲主備,這時他們之間會相互發送報文來告訴對方自己的當前的狀態,如果在指定的時間內未收到對方發送的心跳報文,那麼一方就會認爲對方實效或者宕機,這時美個運行正常的主機就會啓動自身的資源接管模塊來接管運行在對方主機上的資源或者服務,繼續爲用戶提供服務。一般情況下,可以較好的實現一臺主機故障後,企業服務仍能夠不間斷的持續運行。注意,所謂的業務不間斷,在故障轉移期間也是需要切換時間的(例如:停止數據庫及存儲服務等),heartbeat的主備高可用的切換時間一般是在5-20秒左右(服務器的宕機比人工切換服務快)。 | ||
高可用服務器切換 常見條件場景:
| 1)、服務器物理宕機(硬件損壞,操作系統故障)。 此爲主要解決目標! 2)、hearbeat服務軟件本身故障。 3)、兩臺主備服務器之間心跳連接故障。
服務故障不會導致切換。可以通過服務宕機把hearbeat服務宕掉。 |
Heartbeat心跳鏈接方法(至少需要兩臺主機來完成) | 1、利用串行電纜,即所謂的串口線連接兩臺服務器(可選)|常用
| 串口線信號不會和以太網網絡交集,也不需要單獨配置ip地址等信息,因此傳輸穩定不容易出問題,使用串口的缺點時兩個服務器之間距離不能太遠。
串口線對應服務端的設備爲/dev/ttyS0 |
2、一根以太網電纜兩網卡直連(可選)|常用 | 使用以太網網線(無需特殊的交叉線)直連網卡的方式,配置也比較簡單,只需對這兩塊直連網線的網卡配置好獨立的ip段地址能夠互相通信即可,普通的網線就可以。 | |
3、以太網電纜,通過交換機等網絡設備連接(次選) | 使用聯網以太網線和網卡作爲心跳線時次選方案,因爲這個鏈路裏增加了交換機設備這樣的故障點,且這個線路不是專用心跳線路,容易受以太網其他數據傳輸的影響,導致心跳報文發送延遲活着無法送達問題。 | |
心跳選擇方案:
提示:以上連接可同時使用,來加大保險係數防止裂腦問題發生。 | 1、和數據相關的業務,要求較高,可以串口和網線直連的方式並用。 | |
2、web、http業務,可以網線直連的方式或者局域網通信方式也可以。 | ||
Heartbeat 裂腦: (無法接收主備節點心跳,導致節點各自啓動資源和服務)
| 由於某些原因,導致兩臺高可用服務器之間在指定時間內,無法互相檢測到對方心跳而各自啓動故障轉移功能,取得了資源及服務的所有權,而此時兩臺高可用服務器都還從活並正常運行,這樣就會導致同一個ip或者服務在兩端同時啓動從而發生衝突的嚴重問題,最嚴重的是兩臺主機佔用同一個vip地址,當用戶寫入數據時可能會分別寫入到兩端,導致服務器兩端數據不一致或者造成數據丟失,這種情況稱之爲裂腦。 | |
裂腦發生原因總結:
| 1、高可用服務器之間心跳鏈路故障,導致無法正常通信。(包括線路故障、網卡驅動損壞,ip配置衝突、衝裁機制等)|常見 | |
2、高可用服務器開啓iptables防火牆阻止心跳消息傳輸;|常見 | ||
3、高可用服務器上心跳網卡地址信息配置不正確,導致發送心跳失敗。|常見 | ||
4、其他服務配置不當等原因,如心跳方式不同,心跳廣播衝突、軟件bug等; |
防止裂腦 方式總結 | 1、同時使用串行電纜和以太網電纜,同時使用兩條心跳線。 常用 | |
2、當檢測到裂腦時強行關閉心跳節點。 相當於程序上備節點發現心跳線故障,發送關機命令到主節點 (場景使用較少,銀行使用較多,需要特殊設備支持,如stonith 殺死其它節點、fence) | ||
3、監控報警 (依賴報警) 方式1:探測備節點是否有vip,然後探測主服務是否有異常) ( 人工介入衝裁,對網站常規業務,例如百度報警監控上下行) 或者在報警在服務器接管之前,給人員處理留足夠的時間。 | ||
4、啓用磁盤鎖。(使用較少) 即:正在服務的一方只在發現心跳全部斷開時才啓用磁盤鎖,平時不上鎖,此功能適用於共享場景;比如oracle | ||
5、增加仲裁機制 (仲裁一般是網關,不可能掛) | 當心跳全部斷開時,兩個節點各自ping參考ip,不通主動放棄競爭或自我重啓,讓通的一端接管服務。 | |
通過第三方軟件仲裁獲得資源 | ||
名詞解釋:fence | 1、fence是集羣環境下的術語; 2、fence設備在硬件領域是智能電源管理設備; (俗稱:智能電源管理設備或遠程管理卡,帶有以太網口,用來在ha切換觸發時通過網絡重啓提供資源服務,在不知道就百度) | |
名詞解釋:仲裁 | 在RHCS下有仲裁機制是有一個叫仲裁盤的東西,通過額外的存儲實現,比如SAN , 通過mkqdisk 命令來製作的一個特殊塊設備。默認情況在雙節點的ha架構,主從服務器的投票數都是1,雙方時平等的,當心跳有問題的時候就會發生裂腦。這個仲裁在RHCS可以設置投票數,節點雙方使用ping網關的方式將自己的存活狀態寫入仲裁盤內,一旦節點心跳發生問題,並且仲裁盤沒有收到節點存活信息,則啓動fence關閉或重啓故障節點 。 注意: 前提都是主備無法通信(心跳)的時候發生; 例如ping網關、主備和仲裁設備連接、由仲裁設備控制主備服務器電源 | |
名詞解釋:stonith | 它是hearbeat軟件包的一個組件,它允許使用一個遠程或“智能的”連接到健康服務器的電源設備自動重啓實效服務器的電源,sthonith設備可以關閉電源並響應軟件命令,運行hearbeat的服務器可以通過串口線或網線向stonith設備發送命令,它控制高可用服務器對中其他服務器的電力供應。(理論上對服務器數量沒有限制,但最好是兩臺) | |
心跳參考博文:http://blog.chinaunix.net/uid-7921481-id-1617030.html
Heartbeat消息類型: | 心跳消息 | 心跳消息爲約150字節數據包,可能爲串口,單播、廣播或多播的方式,控制心跳頻率及出現故障等待多久進行故障轉移。 |
集羣轉換消息 | ip_request和ip_request_resp 當主服務器恢復在線狀態時,通過ip_requset 消息要求備機釋放主服務器失敗時報備服務器取得資源,;備服務器釋放主服務器失敗時取得的資源及服務後,通過ip_request——resp消息通知主服務器它不再擁有該資源及服務。 | |
重傳請求 | rexmit-request控制重傳心跳請求(不重要) |
Heartbeat IP地址接管和故障轉移:
Heartbeat是通過IP地址接管和arp廣播進行故障轉移的。
arp廣播:在主服務器故障時,備用節點接管資源後,會立即強制更新所有客戶端本地的arp表
(清除客戶端本地緩存的失敗服務器的vip地址和mac地址的解析紀錄,確保客戶端和新的主服務器對話)
vip / ip 別名/輔助別名ip
真實ip | 爲物理網卡配置的實際ip,稱爲管理ip |
虛擬ip /vip | 臨時綁定在物理網卡上的ip |
配置vip的常見方法
別名ip alias IP | ifconfig eth0:1 10.0.0.10 netmask 255.255.255.254 up 刪除:ifconfig eth0:1 down 永久生效: 寫成配置文件 ,這個別名ip 以後遺棄了,用輔助 |
輔助ip secondary ip address 注意!以後使用輔助ip | 添加:ip addr add 10.0.0.2/24 dev eth0 查看:ip a 刪除: ip add del 10.0.0.2/24 dev eth0 |
注意:heartbeat 2.1.4 以前使用的是別名ip,heartbeat 2.1.4使用輔助ip,提供vip服務,但keeplived一直都是輔助ip提供服務。