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

法定數目與法定裝置

由於叢集節點共用資料與資源,因此永遠不得將叢集分割為同時作用的獨立分割區。 CMM 保證即使叢集交互連結已做了分割,在任何時刻只會有一個叢集在運作。

來自磁碟分割區的問題有兩種: Split Brain 與 Amnesia。 遺失節點之間的叢集交互連接時會發生 Split Brain,叢集分割為子叢集,每個子叢集均相信自己是唯一的分割區。 這是叢集節點間的通訊問題所致。 Amnesia 發生的時間是,在關機後叢集重新啟動,其中叢集資料比關機時還舊時。 這會發生在有多重版本的框架資料儲存於磁碟上,而且新典型的叢集又在無最新版本的時候啟動之時。

藉由給每個節點一票,並強制給予運作中的叢集多數票,便得以避免 Split Brain 與 Amnesia 的狀況發生。 具有多數投票的分割區有法定數目,可允許其運作。 此多數投票機制只要在叢集中有二個以上的節點時,就會運作得極好。 在包含兩個節點的叢集中,票數為兩票。 如果這樣的叢集被分割,則兩個分割區中的任一分割區均需要外部投票,才能取得法定數目。 該外部投票由法定裝置提供。 法定裝置可以是兩個節點之間所共用的任意磁碟。 用作法定裝置的磁碟可含有使用者資料。

法定數目演算法是動態運作: 當叢集事件觸發計算時,計算結果是可以變更叢集的生命週期。

法定數目投票計數

叢集節點與法定裝置會投票以形成法定數目。 依預設,當叢集節點啟動和成為叢集成員時,叢集節點會獲得一票的法定票數。 節點也可能會是零票,例如,當安裝節點或管理者將節點置於維護狀態時。

法定裝置根據節點與裝置的連接數來獲得法定票數。 設定法定裝置後,它將獲得票數最大值 N-1,其中,N 是連接至法定裝置的票數。 例如,連接至兩個非零票數之節點的法定裝置,擁有一票法定票數 (二減一)。

您可以在叢集安裝期間或稍後,使用Sun Cluster 系統管理指南中說明的程序來配置法定裝置。


註解 –

只有當目前連接的節點中至少有一個節點是叢集成員時,才會增加法定裝置票數。 此外,在叢集啟動期間,只有當目前連接的節點中至少有一個節點正在啟動中,而且在此節點上次關機時是最近啟動之叢集的成員時,才會增加法定裝置票數。


法定數目配置

法定數目配置是根據叢集中的節點數而定:

圖 3–2 法定裝置配置範例

圖例: 前述上下文說明圖形。

法定數目準則

設定法定裝置時請使用下列準則:

故障隔離

叢集的主要問題是導致叢集被分割的故障 (稱為 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 公用程式來設定。