章 2. 以 CMAN 進行叢集管理

叢集管理功能可管理叢集仲裁與叢集成員。CMAN(cluster manager 的縮寫)會在 Red Hat Enterprise Linux 的 High Availability 外掛程式中進行叢集管理。CMAN 是個分散式的叢集管理程式,並且會在各個叢集節點中執行;叢集管理散佈於叢集中的所有節點上。
CMAN 會藉由監控來自於其它叢集節點的訊息,以追蹤叢集成員。當叢集成員改變時,叢集管理程式會通知其它基礎結構元件,並進行適當的動作。若叢集節點未在特定的時間內傳送訊息的話,叢集管理程式便會將節點由叢集中移除,並與該節點不屬於其成員的其它叢集基礎結構元件進行通訊。其它的叢集基礎結構元件,會在被通知節點已不屬於叢集成員時,決定要進行哪些動作。比方說,「隔離」會將已不再屬於叢集成員的節點離線。
CMAN 會透過監控叢集節點的計數來追蹤叢集仲裁。若超過一半的節點啟用中,叢集便有仲裁。若一半(或更少)的節點未啟用,則叢集便無仲裁,而所有的叢集活動皆會停下。叢集仲裁可避免叢集分裂(split brain)的狀況發生 — 此狀況代表同一叢集分裂並同時執行。此分裂狀況會造成各個分裂的叢集,在不知有另一叢集存在的情況下存取叢集資源,導致於叢集完整性損毀。

2.1. 叢集仲裁

「仲裁(quorum)」乃 CMAN 所使用的投票機制。
叢集若要能夠正確運作,所屬成員必須接受其狀態。一般叢集採用仲裁機制,即代表大部份節點皆運作中、進行有效通訊,並接受啟用中的叢集成員。比方說,在一個擁有十三個節點的叢集中,若要取得仲裁,必須有七個或更多個節點進行通訊。若第七個節點失效,則叢集便會失去仲裁,並無法再運作。
叢集必須維持仲裁以避免發生分裂(split-brain)問題。若無仲裁,當在以上提到的十三個節點的叢集發生了通訊錯誤時,可能會造成六個節點在共享的儲存裝置上運作,而另外六個節點也同時在相同位置上獨立運作。因為通訊錯誤,這兩個部分叢集可能會同時覆寫磁碟上的區域,並使檔案系統損毀。若強制實施仲裁規則,則僅有一個部分叢集能夠使用共享儲存裝置,進而保護資料的完整性。
與其將仲裁視為避免分裂狀況發生的機制,不如將它視為一個能決定哪些節點可在叢集中運作的機制。當分裂情況發生時,仲裁機制會避免超過一個叢集群組進行任何動作。
仲裁機制的存在性,是以叢集節點透過乙太網路所進行的訊息通訊來判定的。仲裁亦可選用性地透過乙太網路,藉由一系列的通訊訊息以及透過仲裁磁碟來判定。透過乙太網路的仲裁機制,需包含 50% + 1 個額外的節點。當配置一個仲裁磁碟時,仲裁機制會包含使用者指定的條件。

注意

就預設值,各個節點皆會有一個仲裁投票。您可選用性地為各個節點配置超過一個投票。

2.1.1. 仲裁磁碟

仲裁磁碟或分割區,是個專門設定來讓叢集專案元件所使用的部分。其用途將透過以下範例詳細解說。
假設您擁有節點 A 和 B,節點 A 遺漏了數個來自於節點 B 的叢集管理程式「 heartbeat」封包。節點 A 不知它為何並未收到這些封包,而可能性有幾種:節點 B 可能已失效、網路切換器或是 hub 可能已失效,節點 A 的網路控制卡可能已失效,或是節點 B 可能只是因為過於忙碌以致於封包未送出。當您的叢集非常大、您的系統過於忙碌,或是網路阻塞時,便有可能會發生此情況。
節點 A 不知情況為何,並且不知問題出於自身或是節點 B。這對於擁有兩個節點的叢集來說問題特別大,因為這兩個失聯的節點可能會嘗試互相進行隔離。
因此在隔離一個節點之前,儘管我們似乎無法聯繫另一節點,若能有其它方式檢查該節點是否運作中會較佳。此時,仲裁磁碟便提供了此功能。在隔離一個失聯的節點之前,叢集軟體能藉由檢查節點有無寫入資料到仲裁磁碟中,來判定該節點是否依然運作中。
當有兩個節點系統時,仲裁磁碟也會作為一個 tie-breaker 運作。若一個節點能存取仲裁磁碟和網路,即代表兩個投票。
與網路或是仲裁磁碟失聯的節點將會失去一個投票,並且將能安全地被隔離。
有關於配置仲裁磁碟參數的更多相關資訊,位於《叢集管理》指南中的 Conga 和 ccs 管理的章節中。

2.1.2. Tie-breaker(仲裁器)

Tie-breaker 是個額外的啟發式機制,以在發生了相等分裂的情況下,讓叢集分割區在隔離之前,決定它的狀態是否為「quorate」。典型的 tie-breaker 建構乃是個 IP tie-breaker,有時亦稱為「ping 節點」。
透過這種 tie-breaker,節點不僅會互相監控,同時也會在叢集進行通訊時,監控位於相同路徑上的上游路由器。若這兩個節點失聯,勝出的將會是依然能夠 ping 上游路由器的一方。當然,在「switch-loop」的情況下,兩個節點皆能偵測到上游路由器,不過卻無法偵測到對方;這將會造成「split brain」狀況發生。這也就是為何儘管使用了 tie-breaker,依然還需要確認隔離是否已正確配置。
其它類型的 tie-breaker(包括通常稱為仲裁磁碟的共享分割區)亦提供了額外資訊。clumanager 1.2.x(Red Hat Cluster Suite 3)含有一個磁碟 tie-breaker,以允許在網路失效時繼續運作,只要這兩個節點在共享分割區上還能夠進行通訊即可。
其它還有一些較複雜的 tie-breaker 配置,例如 QDisk(屬於 linux-cluster 的一部分)。QDisk 能接受任意的啟發式機制。這能讓各個節點判定其健康狀態是否適合參與加入叢集。然而,它一般會被使用來作為基本的 IP tie-breaker。欲取得更多資訊,請參閱 qdisk(5) man page。
基於某些原因,CMAN 沒有內部的 tie-breaker。然而,tie-breaker 可藉由使用 API 來實作。此 API 能允許仲裁裝置註冊和更新。比方說,請查看 QDisk 的原始碼。
若您屬於以下情況,您便可能需要 tie-breaker:
  • 擁有兩個節點,並且隔離裝置位於與使用來進行叢集通訊的路徑不同的網路路徑上
  • 擁有兩個節點,並且隔離乃網狀架構等級 - 特別是用於 SCSI 預留
然而,若您的叢集中配置了正確的網路和隔離配置,tie-breaker 只會增加複雜性,除了用於發生問題的情況下。