Sun Cluster 3.0 12/01 概念

故障隔離

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

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

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

SunPlex 系統使用 SCSI 磁碟保留來實作故障隔離。 使用 SCSI 保留,故障的節點會"隔離"多主機磁碟,以防止存取這些磁碟。

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

當叢集成員偵測到另一個節點在叢集交互連接上已經不再進行通訊,即會起始隔離程序來防止其它節點存取共用磁碟。 當發生此故障隔離時,一般會令隔離節點混亂,並在其主控台上出 保留衝突 訊息。

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

用於故障隔離離之 Failfast 機制

叢集框架用來確保故障的節點無法重新啟動,並開始寫入至共用儲存體的機制稱為 failfast

叢集成員的節點對於它們有存取權的磁碟,包括法定數目的磁碟,會連續啟用特定的 ioctl,也就是 MHIOCENFAILFAST。 此 ioctl 為磁碟驅動式的指示詞,會讓節點在無法存取已被保留為其它節點之用的磁碟時,有能力自我混亂。

MHIOCENFAILFAST ioctl 會使驅動程式檢查 Reservation_Conflict 錯誤碼讀寫至磁碟所傳回的錯誤。ioctl 會在背景中定期地對磁碟發出測試作業,以檢查Reservation_Conflict。 如果傳回 Reservation_Conflict 時,前景與背景的控制流路徑都會混亂。

對於 SCSI-2 磁碟而言,保留並不持久,它們並不能在節點重新啟動時存活。 對於具有 Persistent Group Reservation (PGR) 的 SCSI-3 磁碟而言,保留資訊是儲存在磁碟上,並且在節點重新啟動後仍會保留。 不管您是否有 SCSI-2 磁碟或 SCSI-3 磁碟,failfast 機制的運作都一樣。

如果節點在叢集中失去與其它節點的連接,並且也不是可達法定容量的分割區,它會被其它節點強制從叢集中移除。 另一可達法定容量之分割區部分的節點,在共用磁碟上放置了保留,且當沒有法定容量的節點嘗試存取共用磁碟時,它會收到保留衝突並且由於 failfast 機制而混亂。

混亂過後,節點可能重新啟動並嘗試重新連接叢集,或停留於 OpenBoot PROM (OBP) 提示處。 所採取的行動取決於 auto-boot? 的設定。OBP 中的參數。