SunPlex 系統讓使用者和資料間的"路徑"上所有元件具有高度的可用性,包括網路介面、應用程式本身、檔案系統和多重主機磁碟。一般而言,如果系統內有任何單一 (軟體或硬體) 故障,叢集元件就具有高度可用性。
下表顯示 SunPlex 元件故障的種類 (硬體和軟體),以及內建於高可用性框架內的復原種類。
表 3-1 SunPlex 故障偵測與復原的層次
故障的叢集元件 |
軟體復原 |
硬體復原 |
---|---|---|
資料服務 |
HA API, HA 框架 |
N/A |
公用網路配接卡 |
網路配接卡故障轉移 (NAFO) |
多重公用網路配接卡 |
叢集檔案系統 |
主要與次要複製 |
多重主機磁碟 |
鏡像的多重主機磁碟 |
容體管理 (Solstice DiskSuite 和 VERITAS Volume Manager) |
硬體 RAID-5 (例如,Sun StorEdge A3x00) |
整體裝置 |
主要與次要複製 |
至裝置的多重路徑,叢集傳輸接點 |
私有網路 |
HA 傳輸軟體 |
多重私有硬體獨立網路 |
節點 |
CMM,failfast 驅動程式 |
多重節點 |
Sun Cluster 軟體的高可用性框架會快速地偵測到某個節點故障,並且建立一個相等的新伺服器給叢集中剩餘節點上的框架資源。框架資源隨時皆可使用。未受故障節點影響的框架資源,在回復時完全可加以使用。此外,已故障節點的框架資源一經回復之後,便會成為可使用。已回復的框架資源不必等待所有其他的框架資源完成回復。
大多數可用性頗高的框架資源會回復到使用此資源的應用程式 (資料服務)。框架資源存取的語義學會在各項節點故障時被完整地保留。應用程式無法辨識出框架資源伺服器已移到另一個節點。只要從另一節點到磁碟存在著另一個替代的硬體路徑,對於在使用檔案、裝置以及連接到此節點的磁碟容體上的程式而言,單一節點的故障便是完全透明。其中的一項範例便是使用具有連到多重節點的連接埠的多重主機磁碟。
「叢集成員監視器」(Cluster Membership Monitor,CMM) 是一組分散式的代理程式,每個叢集成員一個代理程式。代理程式透過叢集交互連接來交換訊息,達到:
強制對全部節點 (法定數目) 提供一致性的成員視區
回應成員變更的磁碟同步化重新配置,使用註冊的呼叫
處理叢集分割 (Split Brain、Amnesia)
確保所有叢集成員之間的完整連接性
與先前的 Sun Cluster 版次不同,CMM 完全在核心程式中執行。
CMM 的主要功能是在任何指定的時間參與叢集的一組節點上,建立全叢集的協議。此限制稱為 叢集成員。
若要決定叢集全體成員,並在最後確保資料完整性,CMM 會:
記錄叢集成員的變更,如節點結合或離開叢集
確保「錯誤」的節點會離開叢集
確保「錯誤」的節點會停留在叢集之外,直到修復為止
防止叢集自行分割成節點子集
請參閱 "法定數目和法定裝置",以取得有關叢集如何保護自己以免於分割成多個個別叢集的詳細資訊。
為了讓資料免於毀損,所有的節點必須對叢集成員達成一致的協議。必要時,CMM 會為了回應故障而協調叢集服務 (應用程式) 的叢集重新配置。
CMM 從叢集傳輸層接收有關連接到其它節點的資訊。在重新配置期間,CMM 使用叢集交互連接來交換狀態資訊。
在偵測到叢集成員變更之後,CMM 會執行叢集的同步化配置,此時可能會根據新的叢集成員而重新分配叢集資源。
如果 CCM 偵測到節點的嚴重問題,它會呼叫叢集框架強制關掉 (混亂的) 節點,並將其從叢集成員中移除。 發生此情況的機制稱為 failfast。Failfast 會導致節點以兩種方式關閉。
如果節點離開叢集,並嘗試在無法定數目的情況下開啟新的叢集,它就會被"隔離"而無法存取共用磁碟。請參閱 "故障隔離",以取得有關 failfast 此種用法的細節。
如果一或多個叢集特定的常駐程式掛掉 (die)(clexecd、 rpc.pmfd、rgmd 或 rpc.ed),此故障可由 CMM 偵測出來,而節點也跟著混亂。
panic[cpu0]/thread=40e60:Failfast:Aborting because 'pmfd' died 35 seconds ago. (由於「pmfd」在 35 秒之前掛掉而中斷。)409b8 cl_runtime:__0FZsc_syslog_msg_log_no_argsPviTCPCcTB+48 (70f900, 30, 70df54, 407acc, 0) %l0-7:1006c80 000000a 000000a 10093bc 406d3c80 7110340 0000000 4001 fbf0 |
混亂過後,節點可能重新啟動並嘗試重新連接叢集,或停留於 OpenBoot PROM (OBP) 提示處。所採取的行動取決於 OBP 中 auto-boot? 參數的設定。
「叢集配置儲存庫」(CCR) 是一個私有、全叢集式的資料庫,用來儲存專屬於叢集配置與狀態的資訊。CCR 是分散式資料庫。每一個節點保有一個完整的資料庫複製。CCR 確保所有的節點均具有一致的叢集「世界」視區。為了避免毀損資料,每一個節點都需要知道叢集資源的現行狀態。
OCR 使用兩階段確定演算法作為更新之用:更新必須在所有叢集成員上成功完成,否則更新會轉返。CCR 使用叢集交互連接來套用分散式更新。
雖然 CCR 是由文字檔所組成,請絕對不要手動編輯 CCR 檔案。每一個檔案均含有總和檢查記錄,以確保一致性。手動更新 CCR 檔案會導致節點或整個叢集停止運作。
CCR 依賴 CMM 來保證叢集只有在到達法定數目時才能執行。CCR 負責驗證整個叢集的資料一致性 ,必要時執行復原,以及促使資料的更新。