由於叢集節點共用資料與資源,因此很重要的一點是,叢集不可分成個別的且同時作用中的分割區。 CMM 保證即使叢集交互連結已做了分割,在任何時刻只會有一個叢集在運作。
來自磁碟分割區的問題有兩種: split brain 和 amnesia。Split Brain 發生於節點之間的叢集交互連接遺失,以及叢集分割為子叢集時,每個子叢集都相信自己是唯一的分割區 這是叢集節點間的通訊問題所致。 Amnesia 發生的時間是,在關機後叢集重新啟動,其中叢集資料比關機時還要舊。 這會發生在有多重版本的框架資料儲存於磁碟上,而且新型的叢集又在無最新版本的時候啟動之時。
藉由給每個節點一票,並強制給予運作中的叢集多數票,便得以避免 Split Brain 與 Amnesia 的狀況發生。 有多數票的分割區具有法定數目,並且是允許運作的。 此多數投票機制只要在叢集中有二個以上的節點時,就會運作得極好。 在兩個節點的叢集中,票數為兩票。 如果這樣的叢集被分割了,就需要進行外部投票以使其分割區取得法定數目。 此外部投票乃由法定裝置所提供。法定裝置可以是任何在兩節點之間共用的磁碟。 用作法定裝置的磁碟可含有使用者資料。
表 3-3 說明 Sun Cluster 軟體如何使用法定數目來避免 Split Brain 與 Amnesia 的發生。
表 3-3 叢集法定數目以及 Split-Brain 與 Amnesia 問題
分割區類型 |
法定數目解決方案 |
---|---|
Split Brain |
只允許具有多數票的分割區 (子叢集) 作為叢集來執行 (在這樣的多數票情況下,最多只存在一個分割區) |
Amnesia |
保證在啟動叢集時,至少有一個節點是最近叢集全體成員中的成員之一 (因此具有最近的配置資料) |
法定數目演算法是動態運作:當叢集事件觸發計算時,計算結果是可以變更叢集的生命週期。
叢集節點與法定裝置會投票以形成法定數目。 依預設,當叢集節點啟動和成為叢集成員時,叢集節點會獲得一票的法定票數。 節點也可能會是零票,例如,當安裝節點或管理者將節點置於維護狀態時。
法定裝置根據節點與裝置的連接數來獲得法定票數。 當設定法定裝置時,它會獲得最大票數 N-1,其中 N 是非零票數和以連接埠連至法定裝置的節點數。 例如,連接至兩個非零票數之節點的法定裝置,擁有一票法定票數 (二減一)。
您是在叢集安裝期間或者稍後,使用 Sun Cluster 3.0 12/01 系統管理手冊 中說明的程序來配置法定裝置。
只有當目前連接的節點中至少有一個節點是叢集成員時,才會增加法定裝置票數。 此外,在叢集啟動期間,只有當目前連接的節點中至少有一個節點正在啟動中,而且在此節點上次關機時是最近啟動之叢集的成員時,才會增加法定裝置票數。
法定數目配置是根據叢集中的節點數而定:
雙節點的叢集兩個節點的叢集需要兩票法定票數才能選出。 這兩票可以來自兩個叢集節點,或一個節點和一個法定裝置。 儘管如此,在兩個節點的叢集中必須配置一個法定裝置,以確保當某個節點故障時,單一節點可以繼續運作。
兩個節點以上的叢集 您應該在共用存取磁碟儲存體機殼的每對節點之間指定一個法定裝置。 例如,假設您擁有一個三節點叢集,且與 圖 3-3 中所顯示的類似。 在此配置中,nodeA 與 nodeB 共用存取相同的磁碟機殼,而 nodeB 與 nodeC 共用存取另一個磁碟機殼。 總共會有五票法定票數,三票來自節點,兩票來自節點間共用的法定裝置。 叢集需要有多數法定票數才能選出。
在不需要共用存取磁碟儲存體機殼或是由 Sun Cluster 軟體執行的每對節點之間指定法定裝置。 不過,這樣能提供此項案例必要的法定投票,其中 N+1 配置可降級為雙節點的叢集,接著具有同時存取兩個磁碟外殼的節點也會失敗。 如果您在所有配對之間配置法定裝置時,剩餘的節點仍能作為叢集來運作。
請參閱 圖 3-3,以參照這些配置的範例。
設定法定裝置時請使用下列準則:
在連接到相同共用磁碟儲存體機殼的所有節點之間,建立法定裝置。 在共用機殼內增加一部磁碟作為法定裝置,以確保如果有任何節點故障時,其它的節點可以維持法定數目和主控共用機殼上的磁碟裝置群組。
您必須將法定裝置連接到至少兩個節點。
法定裝置可以是任何的 SCSI-2 或 SCSI-3 磁碟作為雙埠連接的法定裝置。 連接至二個節點以上的磁碟必須支援 SCSI-3 Persistent Group Reservation (PGR),不管磁碟是否作為法定裝置。 請參閱 Sun Cluster 3.0 12/01 軟體安裝手冊 中的規劃章節,以取得詳細資訊。
您可以使用包含使用者資料的磁碟來作為法定裝置。
為了保護個別法定裝置免於故障,請在各組節點間配置不只一個法定裝置。 使用來自不同機殼的磁碟,以及在每組節點之間配置奇數的法定裝置。
叢集的主要問題是造成叢集出現分割的故障 (稱為 Split Brain)。 發生此情形時,不是所有的節點均可通訊,所以個別節點或節點子集可能會嘗試形成個別或子集叢集。 每個子集或分割區可能相信,自己擁有唯一的多主機磁碟存取和所有權。 嘗試寫入磁碟的多個節點會導致資料毀損。
故障隔離藉由實際防止磁碟存取,來限制節點存取多主機磁碟。 當節點離開叢集時 (故障或被分割),故障隔離可確保節點不會再存取磁碟。 只有目前的成員可以存取磁碟,因此維持了資料的完整性。
磁碟裝置服務提供故障轉移功能給使用多主機磁碟的服務。 當目前是磁碟裝置群組的主要 (所有者) 叢集成員故障或無法到達時,會選出新的主要成員,繼續提供磁碟裝置群組的存取,期間只出現輕微的中斷情形。 在此處理程序期間,啟動新的主要成員之前,舊的主要成員會放棄存取裝置。 然而,當成員退出叢集且接觸不到時,叢集就無法通知該主要節點釋放裝置。 因此,您需要一個方法讓存活的成員可以從故障的成員接手控制和存取整體裝置。
SunPlex 系統使用 SCSI 磁碟保留來實作故障隔離。 使用 SCSI 保留,故障的節點會"隔離"多主機磁碟,以防止存取這些磁碟。
SCSI-2 磁碟保留支援一種保留形式,授與存取權給所有連接磁碟的節點 (沒有保留存在) 或限制單一節點的存取權 (握有保留的節點)。
當叢集成員偵測到另一個節點在叢集交互連接上已經不再進行通訊,即會起始隔離程序來防止其它節點存取共用磁碟。 當發生此故障隔離時,一般會令隔離節點混亂,並在其主控台上出 保留衝突 訊息。
偵測到有節點不再是叢集成員時,會放置 SCSI 保留在此節點與其它節點之間共用的所有磁碟上,所以就發生保留衝突的狀況。 隔離的節點可能不知道,自己已被隔離,而且如果它嘗試存取其中一個共用磁碟,就會偵測到保留和混亂。
叢集框架用來確保故障的節點無法重新啟動,並開始寫入至共用儲存體的機制稱為 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 中的參數。