Percona XtraDB Cluster高可用與狀態快照傳輸(PXC 5.7 )

張衝andy發表於2018-10-09

Percona XtraDB Cluster(下稱PXC)高可用叢集支援任意節點在執行期間的重啟,升級或者意外當機,即它解決了單點故障問題。那在這個意外當機或者重啟期間,該節點丟失的資料如何再次進行同步呢?本文介紹了在節點故障和重啟PXC如何實現高可用以及狀態快照傳輸的幾種方法優缺點。

一、高可用

在具有3個節點的基本設定中,如果您關閉任何節點,Percona XtraDB叢集將繼續執行。在任何時候,您都可以關閉任何節點來執行維護或進行配置更改。即使在非計劃的情況下(如節點崩潰或者透過網路無法使用),Percona XtraDB叢集將繼續工作,您將能夠在工作節點上執行查詢。

如果在節點關閉期間資料發生更改,則節點在再次加入群集時可以使用兩個選項:

  狀態快照傳輸State Snapshot Transfer(SST),即將所有資料從一個節點複製到另一個時。

  通常在新節點加入叢集並從現有節點接收所有資料時使用SST。Percona XtraDB叢集中有三種可用的SST方法:

    mysqldump 
    rsync 
    xtrabackup

  mysqldump與rsync的缺點是,當資料正在被複制的時候,您的叢集狀態將變為只讀(這2個SST方式使用了FLUSH TABLES WITH READ LOCK)

  使用SST xtrabackup方式,在整個同步過程中,不需要讀鎖(READ LOCK),僅用於同步.frm檔案(與常規備份相同)。

  增量狀態傳輸Incremental State Transfer(IST)是指僅將增量更改從一個節點複製到另一個節點時。

  即使沒有將群集鎖定在只讀狀態,SST可能會影響並干擾服務的正常執行。 IST可以避免這種情況。 如果某個節點短時間內關閉,它能夠獲取僅僅發生故障時刻的更改。 IST是在節點上使用快取機制來實現。 每個節點都包含一個快取記憶體,最後N次更改的環形緩衝區(大小可配置),並且該節點能夠傳輸該快取記憶體的一部分。 顯然,只有當傳輸所需的變化量小於N時才能完成IST。如果它超過N,那麼加入節點必須執行SST。

可以使用以下命令監視節點的當前狀態:

SHOW STATUS LIKE ‘wsrep_local_state_comment’ ; 
當一個節點處於狀態Synced (6)時,它是叢集的一部分並可以對外提供服務

二、狀態快照傳輸

狀態快照傳輸(SST)是從一個節點(捐獻者)到加入節點(加入者)的完整資料複製。當新節點加入群集時使用它。為了與群集同步,新節點必須從已經是群集一部分的節點接收資料。

Percona XtraDB叢集中有三種可用的SST方法:

  mysqldump 
  rsync 
  xtrabackup

mysqldump和rsync缺點是捐獻節點變為READ-ONLY當資料被複制時。另一方面,Xtrabackup SST使用備份鎖定,這意味著Galera提供程式不會像FTWRL(帶有讀鎖的重新整理表)那樣暫停。SST方法可以使用wsrep_sst_method變數進行配置。

注意

如果gcs.sync_donor變數設定為Yes (預設為No),那麼如果捐獻節點被SST阻塞,則整個叢集將被阻塞。

1、選擇SST捐獻節點

如果沒有可用的節點可以安全地執行增量狀態傳輸(IST),則群集預設為SST。 
如果有可用的節點可以執行IST,則叢集首選遠端節點上的本地節點作為捐獻節點。 
如果沒有本地節點可用於執行IST,則群集將選擇一個遠端節點作為捐獻節點。 
如果有多個本地和遠端節點可以執行IST,則群集將選擇最高seqno的節點作為捐獻節點。

2、使用Percona Xtrabackup

預設的SST方法是使用Percona XtraBackup的xtrabackup-v2。這是利用備份鎖的最少阻塞方法。XtraBackup在捐獻節點上本地執行,因此在捐獻節點上設定正確的使用者憑證非常重要。為了讓Percona XtraDB叢集使用XtraBackup執行SST,需要在wsrep_sst_auth變數中設定用於連線到捐獻節點的證書。除了憑證之外,還需要在伺服器配置檔案my.cnf中指定datadir,否則傳輸過程將失敗。

有關所需憑據的更多資訊,請參閱XtraBackup手冊。

要測試憑據是否可用,請在捐獻節點上使用wsrep_sst_auth變數中指定的使用者名稱和密碼執行innobackupex。例如,如果值wsrep_sst_auth是root:Passw0rd,在innobackupex命令應該是這樣的:

innobackupex –user = root –password = Passw0rd /tmp/ 
Percona XtraBackup SST配置文件中提供了有關此方法的詳細資訊。

3、使用mysqldump

此方法使用標準mysqldump實用程式來轉儲來自捐獻節點的所有資料庫,並將其匯入加入節點。要使此方法有效,wsrep_sst_auth需要使用根證書設定變數。這種方法是最慢的,它在SST期間執行全域性鎖定,這阻止了對捐獻節點的寫入。

用於此方法的指令碼是/usr/bin/wsrep_sst_mysqldump ,它包含在Percona XtraDB Cluster二進位制包中。

4、運用 rsync

此方法使用rsync將檔案從捐獻節點複製到加入節點。在某些情況下,這可能比使用XtraBackup更快,但它需要一個全域性資料鎖定,這將阻止寫入到捐獻節點。此方法不需要在wsrep_sst_auth變數中設定根憑證。

用於此方法的指令碼是/usr/bin/wsrep_sst_rsync ,它包含在Percona XtraDB Cluster二進位制包中。

5、表空間不在資料目錄中的表的SST

例如:

CREATE TABLE t1 (c1 INT PRIMARY KEY ) DATA DIRECTORY = ‘/alternative/directory’ ;

結果取決於SST方法:

SST使用 rsync

SST會報告成功,但表格的資料不會被複制,因為rsync只是複製檔案。您將無法訪問joiner節點上的表: 
mysql> select * from t1; 
ERROR 1812 (HY000): Tablespace is missing for table  sbtest . t1 .

SST 使用mysqldump 
按預期工作。如果檔案不存在,它將被建立。否則,它將嘗試使用該檔案(如果該檔案沒有預期的格式,則返回錯誤)。

使用Percona XtraBackup的SST

XtraBackup會將表格還原到joiner節點上的相同位置。如果目標目錄不存在,它將被建立。如果目標檔案已經存在,則會返回錯誤,因為XtraBackup無法清除不在資料目錄中的表空間。

三、更多參考

 

--------------------- 作者:Leshami 來源:CSDN 原文:https://blog.csdn.net/leshami/article/details/79908071?utm_source=copy 版權宣告:本文為博主原創文章,轉載請附上博文連結!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2215745/,如需轉載,請註明出處,否則將追究法律責任。

相關文章