由於叢集節點共用資料與資源,因此永遠不得將叢集分割為同時作用的獨立分割區。 CMM 保證即使叢集交互連結已做了分割,在任何時刻只會有一個叢集在運作。
來自磁碟分割區的問題有兩種: Split Brain 與 Amnesia。 遺失節點之間的叢集交互連接時會發生 Split Brain,叢集分割為子叢集,每個子叢集均相信自己是唯一的分割區。 這是叢集節點間的通訊問題所致。 Amnesia 發生的時間是,在關機後叢集重新啟動,其中叢集資料比關機時還舊時。 這會發生在有多重版本的框架資料儲存於磁碟上,而且新典型的叢集又在無最新版本的時候啟動之時。
藉由給每個節點一票,並強制給予運作中的叢集多數票,便得以避免 Split Brain 與 Amnesia 的狀況發生。 具有多數投票的分割區有法定數目,可允許其運作。 此多數投票機制只要在叢集中有二個以上的節點時,就會運作得極好。 在包含兩個節點的叢集中,票數為兩票。 如果這樣的叢集被分割,則兩個分割區中的任一分割區均需要外部投票,才能取得法定數目。 該外部投票由法定裝置提供。 法定裝置可以是兩個節點之間所共用的任意磁碟。 用作法定裝置的磁碟可含有使用者資料。
法定數目演算法是動態運作: 當叢集事件觸發計算時,計算結果是可以變更叢集的生命週期。
叢集節點與法定裝置會投票以形成法定數目。 依預設,當叢集節點啟動和成為叢集成員時,叢集節點會獲得一票的法定票數。 節點也可能會是零票,例如,當安裝節點或管理者將節點置於維護狀態時。
法定裝置根據節點與裝置的連接數來獲得法定票數。 設定法定裝置後,它將獲得票數最大值 N-1,其中,N 是連接至法定裝置的票數。 例如,連接至兩個非零票數之節點的法定裝置,擁有一票法定票數 (二減一)。
您可以在叢集安裝期間或稍後,使用Sun Cluster 系統管理指南中說明的程序來配置法定裝置。
只有當目前連接的節點中至少有一個節點是叢集成員時,才會增加法定裝置票數。 此外,在叢集啟動期間,只有當目前連接的節點中至少有一個節點正在啟動中,而且在此節點上次關機時是最近啟動之叢集的成員時,才會增加法定裝置票數。
法定數目配置是根據叢集中的節點數而定:
包含兩個節點的叢集 – 形成包含兩個節點的叢集需要兩次法定投票。 這兩票可以來自兩個叢集節點,或一個節點和一個法定裝置。 儘管如此,在包含兩個節點的叢集中必須配置一個法定裝置,以確保當某個節點故障時,單一節點可以繼續運作。
兩個以上節點的叢集 – 您應該在共用存取磁碟儲存體附件的每對節點之間指定一個法定裝置。 例如,假設您具有包含三個節點的叢集,該叢集類似於圖 3–2 中顯示。 在此配置中,nodeA 與 nodeB 共用存取相同的磁碟附件,而 nodeB 與 nodeC 共用存取另一個磁碟機殼。 總共會有五票法定票數,三票來自節點,兩票來自節點間共用的法定裝置。 叢集需要多數法定票數才能形成。
Sun Cluster 軟體無須在可共用存取磁碟儲存體機殼的每對節點之間指定法定裝置。 然而,在 N+1 配置退化為包含兩個節點的叢集、並且可存取兩個磁碟附件的節點也發生故障時,它可以提供所需的法定票數。 如果您在所有配對之間配置法定投票時,剩餘的節點仍能作為叢集來運作。
請參閱圖 3–2,以取得這些配置的範例。
設定法定裝置時請使用下列準則:
在連接到相同共用磁碟儲存體機殼的所有節點之間,建立法定裝置。 在共用機殼內增加一部磁碟作為法定裝置,以確保如果有任何節點故障時,其他的節點可以維持法定數目和主控共用機殼上的磁碟裝置群組。
您必須將法定裝置連接到至少兩個節點。
法定裝置可以是作為雙埠法定裝置的任意 SCSI-2 或 SCSI-3 磁碟。 連接至二個節點以上的磁碟必須支援 SCSI-3 Persistent Group Reservation (PGR),不管磁碟是否作為法定裝置。 請參閱Sun Cluster 軟體安裝指南中關於規劃的章節以取得詳細資訊。
您可以使用包含使用者資料的磁碟來作為法定裝置。
叢集的主要問題是導致叢集被分割的故障 (稱為 Split Brain)。 發生此情形時,不是所有的節點均可通訊,所以個別節點或節點子集可能會嘗試形成個別或子集叢集。 每個子集或分割區可能相信,自己擁有唯一的多重主機磁碟存取和所有權。 嘗試寫入磁碟的多個節點會導致資料毀損。
故障隔離藉由實際防止磁碟存取,來限制節點存取多重主機磁碟。 當節點離開叢集時 (故障或被分割),故障隔離可確保節點不會再存取碟。 只有目前的成員可以存取磁碟,因此維持了資料的完整性。
磁碟裝置服務提供故障轉移功能給使用多重主機磁碟的服務。 當目前是磁碟裝置群組的主要 (所有者) 叢集成員故障或無法到達時,會選出新的主要成員,繼續提供磁碟裝置群組的存取,期間只出現輕微的中斷情形。 在此處理程序期間,啟動新的主要成員之前,舊的主要成員會放棄存取裝置。 然而,當成員退出叢集且接觸不到時,叢集就無法通知該主要節點釋放裝置。 因此,您需要一個方法讓存活的成員可以從故障的成員接手控制和存取整體裝置。
SunPlex 系統使用 SCSI 磁碟保留來實施故障隔離。 使用 SCSI 保留時,會將發生故障的節點與多重主機磁碟「隔離」開,防止節點存取這些磁碟。
SCSI‐2 磁碟保留支援一種保留形式,授與存取權給所有連接磁碟的節點 (沒有保留存在) 或限制單一節點的存取權 (握有保留的節點)。
當叢集成員偵測到另一個節點在叢集交互連接上已經不再進行通訊,即會起始隔離程序來防止其他節點存取共用磁碟。 發生此故障隔離時,被隔離的節點會當機,並在其主控台上顯示「保留衝突」訊息,這很正常。
偵測到有節點不再是叢集成員時,會放置 SCSI 保留在此節點與其他節點之間共用的所有磁碟上,所以就發生保留衝突的狀況。 隔離節點可能不知道,自己已被隔離,而且如果它嘗試存取其中一個共用磁碟,就會偵測到保留和當機。
叢集框架用來確保故障節點無法重新啟動與開始寫入共用儲存體的機制稱為 failfast。
叢集成員的節點對於它們有存取權的磁碟,包括法定數目的磁碟,會連續啟用特定的 ioctl,也就是 MHIOCENFAILFAST。 此 ioctl 為磁碟驅動式的指示詞,會讓節點在無法存取已被保留為其他節點之用的磁碟時,有能力自我當機。
MHIOCENFAILFAST ioctl 會使驅動程式檢查由節點發佈給磁碟的每次讀取與寫入的錯誤傳回,以取得 Reservation_Conflict 錯誤碼。 ioctl 會在背景中定期地對磁碟發出測試作業,以檢查 Reservation_Conflict。 如果傳回 Reservation_Conflict,前景與背景的控制流路徑都會當機。
對於 SCSI-2 磁碟而言,保留不是永久性的。節點重新啟動後,這些保留將不再存在。 對於包含永久群組保留 (PGR) 的 SCSI-3 磁碟而言,保留資訊儲存在磁碟上,節點重新啟動後會存留下來。 不管您是否有 SCSI-2 磁碟或 SCSI-3 磁碟,failfast 機制的運作都一樣。
如果節點在叢集中失去與其他節點的連接,並且也不是可達法定容量的分割區,它會被其他節點強制從叢集中移除。 另一可達法定容量之分割區部分的節點,在共用磁碟上放置了保留,且當沒有法定容量的節點嘗試存取共用磁碟時,它會收到保留衝突並且由於 failfast 機制而當機。
在當機之後,該節點可能重新啟動並嘗試重新連結叢集,或者停留在 OpenBootTM PROM (OBP) 提示符號處 (如果叢集由基於 SPARC 的系統組成)。 採用的動作由 auto-boot? 參數的設定所決定。 您可以在基於 SPARC 的叢集中,於 OpenBoot PROM ok 提示符號處,使用 eeprom(1M) 來設定 auto-boot?,或者在基於 x86 的叢集中,於 BIOS 啟動後使用您所選擇執行的 SCSI 公用程式來設定。