Sun Cluster 概念指南 (適用於 Solaris 作業系統)

故障隔離

叢集的主要問題是導致叢集被分割的故障 (稱為 Split Brain)。 發生此情形時,不是所有的節點均可通訊,所以個別節點或節點子集可能會嘗試形成個別或子集叢集。 每個子集或分割區可能相信,自己擁有唯一的多重主機磁碟存取和所有權。 嘗試寫入磁碟的多個節點會導致資料毀損。

故障隔離藉由實際防止磁碟存取,來限制節點存取多重主機磁碟。 當節點離開叢集時 (故障或被分割),故障隔離可確保節點不會再存取碟。 只有目前的成員可以存取磁碟,因此維持了資料的完整性。

磁碟裝置服務提供故障轉移功能給使用多重主機磁碟的服務。 當目前是磁碟裝置群組的主要 (所有者) 叢集成員故障或無法到達時,會選出新的主要成員,繼續提供磁碟裝置群組的存取,期間只出現輕微的中斷情形。 在此處理程序期間,啟動新的主要成員之前,舊的主要成員會放棄存取裝置。 然而,當成員退出叢集且接觸不到時,叢集就無法通知該主要節點釋放裝置。 因此,您需要一個方法讓存活的成員可以從故障的成員接手控制和存取整體裝置。

SunPlex 系統使用 SCSI 磁碟保留來實施故障隔離。 使用 SCSI 保留時,會將發生故障的節點與多重主機磁碟「隔離」開,防止節點存取這些磁碟。

SCSI‐2 磁碟保留支援一種保留形式,授與存取權給所有連接磁碟的節點 (沒有保留存在) 或限制單一節點的存取權 (握有保留的節點)。

當叢集成員偵測到另一個節點在叢集交互連接上已經不再進行通訊,即會起始隔離程序來防止其他節點存取共用磁碟。 發生此故障隔離時,被隔離的節點會當機,並在其主控台上顯示「保留衝突」訊息,這很正常。

偵測到有節點不再是叢集成員時,會放置 SCSI 保留在此節點與其他節點之間共用的所有磁碟上,所以就發生保留衝突的狀況。 隔離節點可能不知道,自己已被隔離,而且如果它嘗試存取其中一個共用磁碟,就會偵測到保留和當機。

故障隔離的 Failfast 機制

叢集框架用來確保故障節點無法重新啟動與開始寫入共用儲存體的機制稱為 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 公用程式來設定。