| 臺灣-繁體中文 |
|
|
|
![]() |
管理 Serviceguard第十四版 > 第 3 章. 認識 Serviceguard 軟體元件叢集管理員如何運作 |
|
叢集管理員可初始化叢集、監視叢集的狀態、判斷節點是否失效,並在節點加入或離開叢集時,規範叢集的重組。叢集管理員在每個節點上作為協助程式處理程序運作。在叢集啟動和重組活動期間,會選擇一個節點充當叢集調度者 (cluster coordinator)。雖然所有節點都會執行某些叢集管理功能,然而叢集調度者是節點內通訊的中心點。 系統管理員會設定叢集配置參數,初始啟動叢集;之後,此叢集會在正常運作狀態下自行規範,無需手動介入。叢集的配置參數包括叢集名稱和節點、叢集心跳網路參數、叢集鎖定資訊和定時參數 (於第 4 章「規劃與記錄 HA 叢集 」一章探討)。您可以利用 Serviceguard 管理員輸入,或是編輯叢集 ASCII 配置檔來設定叢集參數 (請參閱第 5 章「建構 HA 叢集配置」)。您輸入的參數會用來建立二進位配置檔,傳遞於叢集中的所有節點 。叢集中所有節點上的這個二進位叢集配置檔必須相同。 叢集管理員運作的核心部份是在叢集的節點中傳送和接收心跳訊息。叢集中的每個節點利用叢集調度者,在每個配置為心跳裝置之監視的 TCP/IP 網路中互相交換心跳訊息 (區域網路的監視功能會在稍後的「監視區域網路介面與偵測失效 」一節中進一步說明)。 如果在規定的時間內,叢集節點未收到所有其他叢集節點傳來的心跳訊息,則此叢集會開始重組。重組結束時,如果一組新節點組成叢集,則該訊息會傳給套件調度者 (本章「套件管理員如何運作」中將進一步說明)。在節點上執行的故障轉移套件不再屬於新的叢集,且套件會轉移到其承接節點上。請注意,如果有短暫的心跳損失,則叢集可能會以先前的節點重組。在這種情形下,套件不會中止或切換,儘管應用程式的效能可能在重組時受到輕微的影響。 如果心跳和資料透過相同的區域子網路傳送,則資料壅塞可能會使 Serviceguard 在心跳逾時期間錯失心跳,並開始進行不必要 (若資料不壅塞便不會發生) 的叢集重組。要避免這種情況發生,HP 建議您擁有一個專屬的心跳區域網路,並在資料網路上配置心跳。
各個節點會按照叢集心跳間隔所指定的速率來傳送心跳訊息。叢集心跳間隔設定於叢集配置檔中,是叢集配置的一部分,若需完整說明,請參閱第 5 章「建構 HA 叢集配置」。 手動啟動會以叢集配置中的所有節點組成一個叢集。通常是在全叢集維護或昇級後,或在重新配置後,第一次啟動叢集時進行手動啟動。 啟動之前,叢集中的所有節點都必須有相同的二進位叢集配置檔。系統管理員會在 Serviceguard 管理員中啟動叢集,或者從某個節點發出 cmruncl 命令啟動叢集。只能在叢集未執行,也就是沒有節點執行 cmcld 協助程式時,才能使用 cmruncl 命令。 啟動時,叢集管理員軟體會檢查啟動命令中所指定的所有節點是否都是叢集的合法成員、已啟動並執行中、試圖組成叢集,且可互相通訊。若達到上述條件,則叢集管理員會組成叢集。 節點重新啟動並加入叢集時,叢集會自動啟動。個別節點重新啟動之後,或是叢集中的所有節點都失效時 (通常是發生在長時間斷電,且所有 SPU 都關閉時),叢集會自動啟動。 如果 /etc/rc.config.d/cmcluster 檔中的旗標 AUTOSTART_CMCLD 設為 1,叢集便會自動啟動。此參數設為 1 的任何節點重新啟動時,會重新加入一個已存在的叢集,如果沒有已存在的叢集,則會試圖組成新的叢集。 動態重組是叢集成員的暫時性變化,發生於節點加入或離開執行中的叢集時。重組不同於重新配置,重新配置是永久改變配置檔。叢集重組發生於下列情況 (非完整清單):
通常,叢集重組結果都會有不同的組合。新的叢集包含的節點不一定比先前的叢集多或少。 一般來說,叢集重組的運算法通常要求叢集仲裁 (cluster quorum) 是先前執行節點的絕對多數 (即大於 50%)。如果先前執行叢集的半數 (剛好 50%) 皆允許重組,就會發生核心分離 (split-brain) 的情形,即相同叢集的兩個應用例都在執行。核心分離的情形下,不同的應用程式形態會在同時存取相同的磁碟時結束。其中之一的形態可能會在另一個形態修改磁碟狀態時開始回復動作。Serviceguard 的仲裁需求旨在於防止發生核心分離的情況。 雖然通常需要超過 50% 的叢集仲裁,剛好 50% 先前執行的節點仍可能會重組一個新的叢集,前提是其他 50% 先前執行的節點未重組。使用平局決勝服務 (tie-breaker) 可確保在二個大小相同的節點群組中做選擇時,允許其中一個群組組成叢集,並強迫另一組關閉。這種平局決勝服務的方式稱為叢集鎖定。叢集鎖定是以鎖定磁碟、鎖定 LUN,或仲裁伺服器的方式來執行。 僅當執行中的叢集失效,而 Serviceguard 企圖組成新叢集時,此叢集分成兩個大小相同的子叢集,此時叢集鎖定會作為平局決勝服務使用。每個子叢集都會試圖取得叢集鎖定。新叢集將由得到叢集鎖定的子叢集組成,這樣可以避免兩個子叢集同時執行。如果兩個子叢集的大小不相等,就會由節點高於 50% 的子叢集組成新叢集,而不必使用叢集鎖定。 如果您有雙節點叢集,您會被要求配置一個叢集鎖定。萬一這兩個節點之間失去通訊,擁有叢集鎖定的節點就會接管叢集,另一個節點則會中止 (系統重設)。如果沒有叢集鎖定,只要叢集中的任何一個節點失效,就會使得另一個節點中止,叢集也會因此而中止。此外要注意的是,如果叢集鎖定在取得過程中失效,叢集也會中止。 鎖定磁碟或鎖定 LUN 可用於包含最多四個節點的叢集。 叢集鎖定磁碟是容體群組中,位於 LVM 磁碟上的特殊區域,由叢集中的所有節點共用。同樣地,叢集鎖定 LUN 是一個包含鎖定資訊的小型專用 LUN,連接至叢集內的所有節點。 在 LVM 配置中,用作鎖定磁碟的磁碟不是專門作為叢集鎖定使用;這個磁碟可作為正常容體群組的一部分,用來儲存使用者資料。而一個鎖定 LUN 是專門作為叢集鎖定使用,您不能在其內儲存任何其他的資料。 您在叢集配置檔中指定叢集鎖定容體群組和實體容體 (或叢集鎖定 LUN)。 當節點取得叢集鎖定時,這個區域就會被作上記號,讓其他節點會知道此區域已「鎖定」。 鎖定磁碟或鎖定 LUN 的作業如圖 3-2 「鎖定磁碟或鎖定 LUN 作業」 所示。 Serviceguard 會定期檢查鎖定磁碟或 LUN 的狀況,若鎖定磁碟未通過檢查,Serviceguard 會將訊息寫入 syslog 檔內。監視這個檔才能提早偵測鎖定磁碟的問題。 若是使用鎖定磁碟,便可根據所建構的高可用性配置種類,選擇單鎖定磁碟或雙鎖定磁碟。如果可以,建議使用單鎖定磁碟。不過,不論是採用單鎖定還是雙鎖定,即使有一個節點的電路失效,叢集鎖定都必須可以使用,因此,叢集鎖定的配置有一部份要視可使用的電路數目決定。不論您的選擇為何,叢集中的所有節點都必須能夠存取叢集鎖定,以維持高可用性。
單鎖定磁碟或鎖定 LUN 配置的電路應與叢集中任何節點的電路分開。例如,雙節點叢集最好採用三個電路,以單一、獨立供電的單一磁碟或 LUN 作為叢集鎖定。在雙節點叢集上,這個單鎖定裝置不能跟其他節點共用電路,而且鎖定磁碟必須是外接式磁碟。如果是有三個或四個節點的叢集,磁碟就不應該跟 50% 以上的節點共用電路。 如果您使用的磁碟跟叢集節點安裝在同一個機箱內,叢集中的單鎖定磁碟便會成為單點失效,因為在同一機箱裡擁有鎖定磁碟節點的電源喪失,將會使叢集鎖定無法作用。相同地,在校區 (campus) 叢集中,叢集包含在兩個分開的資料中心執行的節點,若單鎖定磁碟的資料中心毀損,則單鎖定磁碟會成為單點失效。 只有在這兩種情況下,才應該使用有兩個分別供電之叢集磁碟的雙叢集鎖定,以免叢集鎖定磁碟成為單點失效。
如果使用雙叢集鎖定,磁碟不能彼此共用電路或節點基座。這樣萬一停電影響到某個節點和磁碟時,其他節點和磁碟仍然可以使用,所有叢集的重組可以在其餘節點上進行。對於校區叢集,在每個資料中心裡應該要有一個鎖定磁碟,而且所有節點必須可以存取兩個鎖定磁碟。如果其中一個資料中心失效,在剩下的資料中心裡的節點將可取得它們本機的鎖定磁碟,以成功地重組一個新的叢集。
仲裁伺服器可在任何大小的叢集中使用,仲裁伺服器的處理程序會在其提供仲裁服務之叢集外的機器上執行。它會傾聽已知連接埠之 Serviceguard 節點所提出的連線要求。仲裁伺服器替每個叢集維護特定的記憶體區域,當節點取得叢集鎖定時,該區域會標示出來,其他節點會視該鎖定「已使用」。若兩個同等大小的節點群組之間失去通訊,擁有仲裁伺服器鎖定的節點就會接管叢集,另一個節點則會執行系統重設。如果沒有叢集鎖定,只要節點中的任何一個群組失效,就會使得另一個群組中止,叢集也會因此而中止。亦請注意,當試圖存取仲裁伺服器時,若仲裁伺服器無法使用,叢集便會中止。 仲裁伺服器的作業如圖 3-3 「仲裁伺服器的作業」 所示。當節點 1 與節點 2 之間的通訊中斷時,仲裁伺服器會選擇一個節點 (範例中為節點 2) 以便繼續在叢集中執行,另一個節點則會中止。 仲裁伺服器在分開的系統上執行,且能提供多個叢集的仲裁服務。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||