法定裝置是由兩個或多個節點共用的磁碟,這些節點所投票數用於建立執行叢集的法定數目。 只有具有可用的法定票數, 叢集方能運作。 法定裝置的使用時機,是在叢集劃分為個別的節點集,以便建立由哪一個節點集投票給新的叢集時。
叢集節點與法定裝置會投票以形成法定數目。 依預設,當叢集節點啟動和成為叢集成員時,叢集節點會獲得一票的法定票數。 當安裝節點或管理員將節點置於維護狀態時,節點可能會有零票。
法定裝置根據節點與裝置的連線數來獲得法定票數。 當設定法定裝置時,它會獲得最大票數 N-1,其中,N 是由與法定裝置連線確定的票數。 例如,與兩個有非零票數節點連線的法定裝置,擁有一票法定票數 (二減一)。
Sun Cluster 系統嘗試防止資料毀壞並確保資料完整性。 由於叢集節點共用資料與資源,叢集嚴禁分割為同時處於作用中的獨立分割區。 CMM 保證任何時候均只有一個叢集可以作業。
叢集分割區可能會導致兩種問題: Split Brain 與 Amnesia。 Split Brain 發生於節點間的叢集互連遺失以及叢集分割為子叢集時,每個子叢集均相信自己是唯一的分割區。 不知道有其他子叢集的子叢集可能導致共用資源衝突,例如網路位址重複和資料毀壞。
如果所有節點都認為叢集處於不穩定的狀態,就會發生 Amnesia。 例如,有一個具有節點 A 和節點 B 的雙節點叢集。如果節點 A 失敗,將僅在節點 B 上更新 CCR 中的配置資料,而不在節點 A 上更新。如果稍後節點 B 失敗並且節點 A 重新啟動,則節點 A 將使用舊的 CCR 內容執行。 這種狀態稱為 Amnesia,並可能導致使用舊的配置資訊執行叢集。
藉由投每個節點一票,並強制給予作業中的叢集多數票,便得以避免 Split Brain 與 Amnesia 的狀況發生。 具有多數票的分割區有法定數目,並可以作業。 如果叢集中有兩個以上的節點,則這種多數票機制會運作得極好。 在兩個節點的叢集中,票數為兩票。 如果這樣的叢集被分割,外部投票可以使分割區取得法定數目。 此外部投票由法定裝置提供。 法定裝置可以是兩個節點間共用的任何磁碟。
表 2–1 說明 Sun Cluster 軟體如何使用法定數目避免 Split Brain 與 Amnesia 的狀況發生。
表 2–1 叢集法定數目以及 Split-Brain 與 Amnesia 問題
分割區類型 |
法定數目解決方案 |
---|---|
Split Brain |
只允許具有多數票的分割區 (子叢集) 作為叢集來執行 (僅可存在一個這樣具有多數票的分割區)。 某個節點在法定數目的競爭中失敗後便會當機。 |
Amnesia |
保證在啟動叢集時,該叢集至少有一個節點是最新叢集成員關係中的成員之一 (因此具有最新的配置資料)。 |
叢集的主要問題是導致叢集被分割的故障 (稱為 Split Brain)。 發生此情形時,不是所有的節點均可通訊,所以個別節點或節點子集可能會嘗試形成個別或子集叢集。 每個子集或分割區可能「相信」自己擁有對多重主機磁碟的唯一存取權和所有權。 多個節點嘗試寫入磁碟可能導致毀壞資料。
故障隔離藉由防止存取磁碟,來限制節點存取多重主機磁碟。 當節點離開叢集 (叢集失敗或被分割) 時,故障隔離可確保節點無法再存取磁碟。 僅目前的成員可以存取磁碟,因此確保了資料完整性。
Sun Cluster 系統使用 SCSI 磁碟保留來實現故障隔離。 使用 SCSI 保留,便可以將故障節點與多重主機磁碟相「隔離」,防止它們存取這些磁碟。
當叢集成員偵測到另一個節點已經不再經由叢集互連進行通訊,即會啟動故障隔離程序來防止故障節點存取共用磁碟。 發生故障隔離時,隔離的節點便會當機,並且其主控台上會顯示「保留衝突」訊息。
Failfast 機制會使故障節點當機,但它不阻止故障節點重新啟動。 發生當機之後,該節點可能會重新啟動並嘗試重新加入叢集。
如果節點在叢集中失去與其他節點的連接,並且也不是可達法定容量的分割區,它會被其他節點強制從叢集中移除。 另一可達法定容量之分割區部分的節點,將共用磁碟保留。 作為 Failfast 機制的結果,無法定容量的節點將當機。