Corosync HA 防止腦裂情況
我正在建立一個測試系統,用於自學負載平衡和高可用性,我對 Corosync 中的配置設置很好奇,想知道你們有這方面的經驗,不得不說。
我現在正在研究和學習的東西是 Corosync vote-quorum 以及如何處理倒下的節點。在一次小型研究會議中,我發現了關於 STONITH 和腦裂場景的討論,其中兩個節點都認為它是唯一的倖存者,並認為它是主人,試圖保持主人等。這當然是一個不受歡迎的場景。
在 Corosync 配置中,我看到了一個特定的配置:
quorum { ... auto_tie_breaker: 1 auto_tie_breaker_node: lowest }
auto_tie_breaker 可以防止這種腦裂的情況,還是我弄錯了?
如果我理解文件正確,將其設置為最低,意味著具有最低 nodeid 的節點將是負責人?
nodelist { node { ring0_addr: primary_private_ip name: primary nodeid: 1 } node { ring0_addr: secondary_private_ip name: secondary nodeid: 2 } }
當然,我目前只是在一個兩節點集群上進行測試,但目的是了解這個過程是如何工作的,這樣我將來可以成功地建立一個更可靠的基礎設施。
感謝您的意見和指導,祝您有美好的一天!:)
您的假設是正確的,即
auto_tie_breaker
通過“強制”集群保持連接到正確的節點集(或兩個節點集群中的單個節點)。votequorum 的一般行為允許同時節點故障高達 50% - 1 個節點,假設每個節點有 1 個投票。
啟用 ATB 後,集群可能會以一種確定的方式同時遭受多達 50% 的節點故障。預設情況下,集群分區或仍與具有最低 nodeid 的節點保持聯繫的節點集將保持仲裁。其他節點將不可用。還可以通過指定來更改此行為
集群的仲裁投票通常必須在 n+1 節點場景中使用,或者與
two_node
參數一起使用,其中expected_votes
必須設置為 2 並且必須啟用硬體防護/ STONITH 。
auto_tie_breaker_node: lowest|highest|<list of node IDs>
’lowest’ 是預設值,‘highest’ 是類似的,如果目前節點集包含最高的 nodeid,那麼它將保持 quorate。或者,可以指定維護仲裁所需的特定節點 ID 或節點 ID 列表。如果給出(空格分隔的)列表,則按順序評估節點,因此如果第一個節點存在,那麼它將用於確定仲裁分區,如果該節點不在任何一半中(即不在分裂之前的集群)然後將檢查第二個節點ID,依此類推。ATB 與仲裁設備不兼容 - 如果在 corosync.conf 中指定了 auto_tie_breaker,則仲裁設備將被禁用。
請記住:它不是STONITH設備,您不能將它與
two_node
指令一起使用。
two_node: 1
啟用兩個節點集群操作(預設值:0)。
“雙節點集群”是一個需要特別考慮的案例。使用標準的兩節點集群,每個節點擁有一票,集群中有 2 票。使用簡單多數計算(50% 的選票 + 1)來計算法定人數,法定人數將為 2。這意味著兩個節點必須始終處於活動狀態,集群才能獲得法定人數並執行。
啟用 two_node: 1,quorum 人為設置為 1
因此,對於沒有硬體防護或 STONITH 的偶數節點集群來說,新的首選方法是
auto_tie_breaker
.在 n+1 集群中,quorum votes 仍然相當可靠,但對於備受矚目的 linux HA,硬體防護/STONITH 應該仍然是王道。
與往常一樣,請務必測試所有可能的情況,例如網路中斷、硬體故障、斷電、同時發生的資源錯誤、DRBD 錯誤(如果使用)等,並閱讀本文件以了解 corosync 的“新”功能。