一、重新啟動叢集節點
要重新啟動叢集節點,請關閉MySQL并重新啟動它。該節點将離開叢集(并且法定人數的總計數應該減少)。釋出指令 systemctl restart mysql
當它重新加入時,節點應該使用IST進行同步。如果gcache在整個叢集中的任何其他節點上的檔案中找不到IST所需的更改集,則會執行SST。是以,從叢集的角度來看,重新啟動叢集節點以進行滾動配置更改或軟體更新非常簡單。
注意
如果您重新啟動具有無法加載MySQL配置更改的節點,則Galera将删除該節點的狀态并強制該節點的SST。
二、叢集故障轉移
叢集成員資格僅由哪些節點連接配接到叢集的其餘部分來确定; 沒有配置設定明确定義所有可能的叢集節點的清單。是以,每次節點加入叢集時,叢集的總大小都會增加,并且節點離開(優雅地)時大小會減小。
叢集的大小用于确定實作法定人數所需的投票。當一個或多個節點被懷疑不再是叢集的一部分時(他們沒有回應),将進行法定人數投票。此無響應逾時是evs.suspect_timeout在設定wsrep_provider_options(預設值為5秒),并且當一個節點出現異常,寫操作将被阻止在叢集上的時間比逾時稍長。
一旦确定某個節點(或多個節點)斷開連接配接,則其餘節點将投出法定票數,并且如果斷開連接配接之前的大多數節點仍處于連接配接狀态,則該分區保持連接配接狀态。在網絡分區的情況下,一些節點将在網絡斷開的每一側處于活動并處于活動狀态。在這種情況下,隻有法定人數會繼續。沒有法定人數的分區将更改為非主要狀态。
是以,在2節點叢集中無法實作安全的自動故障切換,因為一個節點的故障将導緻其餘節點變為非主節點。而且,任何一個節點數量為偶數的節點(比如兩個不同交換機中的兩個節點)都有一定的分裂情況的可能性,當兩個節點之間的連接配接丢失時,任何一個分區都不能保留法定數量投票,而成為非主要分區。
是以,對于自動故障轉移,建議使用3s規則。它适用于各種級别的基礎架構,具體取決于叢集散布多遠以避免單點故障。例如:
單個交換機上的叢集應該有3個節點
跨越叢集的交換機應平均分布在至少3台交換機上
跨越網絡的叢集應該跨越至少3個網絡
跨越資料中心的叢集應至少跨越3個資料中心
這些規則将防止裂腦情況并確定自動故障切換正常工作。
1、使用仲裁員
如果添加第三個節點,交換機,網絡或資料中心的成本太高,則應使用仲裁器。仲裁者是可以接收和轉發複制的叢集的投票成員,但它不會保留任何資料,并且運作自己的守護程序而不是mysqld。即使是第三位的仲裁員也可以将分裂腦保護添加到僅分布在兩個節點/位置的叢集中。
2、恢複非主叢集
需要注意的是,3s的規則僅适用于自動故障轉移。如果是雙節點叢集(或者在其他一些中斷使少數節點處于活動狀态的情況下),則一個節點的故障将導緻另一節點成為非主節點并拒絕操作。但是,您可以使用以下指令從非主狀态恢複節點:
SET GLOBAL wsrep_provider_options = 'pc.bootstrap = true' ;
這将告訴節點(以及所有節點仍然連接配接到其分區)它可以成為主叢集。但是,隻有當您确定沒有其他分區在主伺服器上運作時才能執行此操作,否則Percona XtraDB Cluster将允許這兩個分區發生分歧(并且最終會生成兩個不可能重新分區的資料庫自動合并)。
例如,假設有兩個資料中心,其中一個是主要資料中心,另一個資料中心用于災難恢複,每個資料中心都有偶數個節點。當額外仲裁器節點僅在主資料中心中運作時,以下高可用性功能将可用:
主資料中心或輔助資料中心内任何一個或多個節點的自動故障轉移
輔助資料中心的故障不會導緻主資料中心失效(由于有仲裁節點)
主資料中心的故障将使輔助中心處于非主要狀态。
如果已執行災難恢複故障轉移,則可以讓輔助資料中心使用單個指令引導自己,但災難恢複故障轉移仍在您的控制之中。