關於Cluster 腦裂的文章

在心跳失效的時候,就發生了split-brain。
比如: 正常情況下,NodeA和NodeB在心跳檢測以確認對方存在; 在通過心跳檢測不到對方時,就接管對應的resource。 如果突然間,NodeA和NodeB之間的心跳不存在了,而NodeA和NodeB事實上都active,這時NodeA要接管NodeB的resource麼? 而同時NodeB要接管NodeA的resource麼?這時就是split-brain。

不對的情況請大家指正。

split-brain會引起數據的不完整性,甚至是災難性的,又如何理解呢?
其實不僅僅是數據的不完整性,可能會對服務造成嚴重影響。

對於數據的不完整性,主要爲集羣節點訪問同一存儲,而此時並沒有鎖機制來控制數據訪問(都split-brain,心跳全沒有了,咋控制裏),那就存在數據的不完整性的可能。這個也是RHCS爲何必須要fence設備的主要原因。可以參考RHCS的文檔,其中也有對split-brainde 說明。
對於服務的影響,主要是可能早上NodeA和NodeB同時接管了一個虛擬IP(僅僅是舉例子。)

裂腦”,一個很形象的術語。HA系統危機情景。

曾經看央視10套教育頻道,獲知“裂腦”是治療“癲癇”病的一種手術。醫生們認爲癲癇病發作是由於大腦“異常放電”所至。爲了阻止“異常放電”波及整個大腦(左、右半腦),就用手術來割斷病人左右腦的連接神經。使今後病人在發病時至少還有半個大腦正常、能控制行爲。但施行過手術的所謂“裂腦人”在術後有一段不適應期,表現得行爲分裂,彷彿體內存在着2個人,時常要發生衝突。例如,右腦想讓一隻手去臉上撓癢癢,左腦卻不認同、以爲是誰的手要“登鼻子上臉”就讓另一隻手去阻止,於是明明是自己的2隻手,卻互不相讓、扭在一起扳起了手腕...

在“雙機熱備”高可用(HA)系統中,當聯繫2個節點的“心跳線”斷開時,本來爲一整體、動作協調的HA系統,就分裂成爲2個獨立的個體。由於相互失去了聯繫,都以爲是對方出了故障,2個節點上的HA軟件像“裂腦人”一樣,“本能”地爭搶“共享資源”、爭起“應用服務”,就會發生嚴重後果:或者共享資源被瓜分、2邊“服務”都起不來了;或者2邊“服務”都起來了,但同時讀寫“共享存儲”,導致數據損壞(常見如數據庫輪詢着的聯機日誌出錯)。

對付HA系統“裂腦”的對策,目前我所瞭解的大概有以下幾條:
1)添加冗餘的心跳線,例如雙線條線。儘量減少“裂腦”發生機會。
2)啓用磁盤鎖。正在服務一方鎖住共享磁盤,“裂腦”發生時,讓對方完全“搶不走”共享磁盤資源。但使用鎖磁盤也會有一個不小的問題,如果佔用共享盤的一方不主動“解鎖”,另一方就永遠得不到共享磁盤。現實中假如服務節點突然死機或崩潰,就不可能執行解鎖命令。後備節點也就接管不了共享資源和應用服務。於是有人在HA中設計了“智能”鎖。即,正在服務的一方只在發現心跳線全部斷開(察覺不到對端)時才啓用磁盤鎖。平時就不上鎖了。
3)設置仲裁機制。例如設置參考IP(如網關IP),當心跳線完全斷開時,2個節點都各自ping一下 參考IP,不通則表明斷點就出在本端,不僅“心跳”、還兼對外“服務”的本端網絡鏈路斷了,即使啓動(或繼續)應用服務也沒有用了,那就主動放棄競爭,讓能夠ping通參考IP的一端去起服務。更保險一些,ping不通參考IP的一方乾脆就自我重啓,以徹底釋放有可能還佔用着的那些共享資源。

# What does "split-brain" mean?

"Split brain" is a condition whereby two or more computers or groups of computers lose contact with one another but still act as if the cluster were intact. This is like having two governments trying to rule the same country. If multiple computers are allowed to write to the same file system without knowledge of what the other nodes are doing, it will quickly lead to data corruption and other serious problems.

Split-brain is prevented by enforcing quorum rules (which say that no group of nodes may operate unless they are in contact with a majority of all nodes) and fencing (which makes sure nodes outside of the quorum are prevented from interfering with the cluster).

 

# What does "split-brain" mean?

"Split brain" is a condition whereby two or more computers or groups of computers lose contact with one another but still act as if the clus ...
這個應該是紅帽文檔吧?

簡單來說,腦裂就是上面提到的當心跳網絡出現狀況的時候,集羣可能分裂成幾個節點組,幾個節點組都分別接管服務並且訪問文件系統資源(例如併發寫入文件系統)導致數據損壞。

實際上腦裂正常情況下是無法見到的,現代集羣都應該有保護機制來避免這種情況發生。例如RHCS引入的fence的概念。

具體情況是這樣,例如2個節點集羣,當心跳斷開導致節點之間互相無法通信的時候,每個節點會嘗試fence掉對方(確保對方釋放掉文件系統資源)後再繼續運行服務訪問資源。這樣,就可以確保只有一個節點可以訪問資源而不會導致數據損壞。

所以這個也是RHCS爲什麼必須有fence設備的原因。前面很多帖子都在討論到底要不要fence,官方講法是,如果你跑生產,要保證數據不受損壞,就必須有fence設備。

集羣出現bug的時候也會出現腦裂,這裏就不提怎麼產生腦裂了,希望大家都別碰到。。。 呵呵

http://hi.baidu.com/james_yulei/blog/item/bc3644ee78132ddc2e2e215f.html

-----

Esx Server

HA的基本工作過程


HA的基本工作過程
VI3的HA爲處於同一個HA Cluster中的ESX服務器提供互相檢測的功能. 一旦一臺ESX服務器被確認爲故障. 則剩餘正常的ESX服務器會啓動原來在故障ESX上運行的VM, 從而提供VM一級的高可用性.

ESX之間互相檢測是由心跳(heartbeat)來完成的. 心跳的傳輸在Service Console Network上進行.

當一臺ESX沒有接收到來自其他服務器的心跳信號, 有兩種可能性:

1. 是其它ESX服務器發生了故障,
2. 是本機的網絡連接 (指Service Console Network) 發生故障, 也稱爲被孤立(Isolation)

爲了區分這兩種情形, ESX會試圖PING一個網絡地址, 並以能否收到應答來確定本機是否被孤立. 這個網絡地址一般默認爲SC的網關. 你也可以在HA的高級選項中重新設定(加選項: das.isolationaddress).

如果ESX認爲自己被孤立, 默認的動作是它Power-Off(不是安全Shutdown)在該ESX上運行的所有VM. 這樣做的目的是釋放對那些VM的盤文件的鎖定, 以便其他正常的ESX服務器可以接管對這些VM的控制.

如果ESX認爲是其他的ESX故障, 它則會啓動原來在故障ESX上運行的VM.

這個過程中有幾個比較重要的時序 (有的用戶找到一些更詳細的數據, 但未經VMWARE證實):

在ESX停止接受到心跳的12秒後, 如果它認自己已被孤立, 既POWER-OFF自己的VM.

正常ESX在停止接到故障ESX的15秒後, 開始啓動原來在故障ESX上運行的VM.

這個時間差有可能導致混亂:

比如發生網絡故障的ESX在第12秒POWER-OFF VM. 如果網絡在15秒之前恢復, 正常運行的ESX並不啓動在曾經發生網絡故障的ESX上的VM, 儘管故障ESX已將那些VM POWER-OFF了.

還有一種稱爲腦裂的情況, 在兩節點的CLUSTER中很常見:

假設ESX1崩潰, ESX2失去來自ESX1的心跳. 這時候它並不知道是被孤立了還是ESX1出現故障, 於是它要靠PING指定的網絡地址來做判斷. 如果該網絡地址設置的不好. PING 失敗的話, ESX2會以爲自己是被孤立了, 這時候它不但不啓動原來在ESX1上的VM, 而且還可能按默認設置將自己的VM也POWER-OFF.
 

http://bbs.51cto.com/thread-539936-1.html

 

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