MariaDB集羣Galera Cluster的研究與測試

MariaDB集羣Galera Cluster的研究與測試

Galera Cluster是MariaDB的一個雙活多主集羣,其可使得MariDB的全部節點保持同步,Galera爲MariaDB提供了同步複製(相對於原生的異步複製),所以其能夠保證HA,且其當前僅支持XtraDB/InnoDB存儲引擎(擴展支持MyISAM),而且只可在Linux下使用。
Galera Cluster擁有如下特性:node

  • 真正的多主架構,任何節點均可以進行讀寫
  • 同步複製,各節點間無延遲且節點宕機不會致使數據丟失
  • 緊密耦合,全部節點均保持相同狀態,節點間無不一樣數據
  • 無需主從切換操做或使用VIP
  • 熱Standby,在Failover過程當中無停機時間(因爲不須要Failover)
  • 自動節點配置,無需手工備份當前數據庫並拷貝至新節點
  • 支持InnoDB存儲引擎
  • 對應於透明,無需更改應用或是進行極小的更改
  • 無需進行讀寫分離

Galera使用基於認證的複製,其流程以下:
CBLCBL
其主要思想是在不出現衝突的背景下事務正常執行並持續到commit爲止;當客戶端發起commit命令時(此時仍然沒有發生真正的commit),全部本事務內對數據庫的改動與改動數據行的主鍵都會被蒐集到一個寫入集(writeset)中,該寫入集隨後會被複制到其餘節點,該寫入集會在每一個節點上使用搜集到的主鍵進行確認性認證測試(包括被「提交」事務的當前節點)來判斷該寫入集是否能夠被應用。若是認證測試失敗,寫入集會被丟棄而且原始事務會被回滾,若是認證成功,事務會被提交而且寫入集會被在剩餘節點進行應用。
以上的認證測試在Galera集羣中的實現取決於全局事務順序,每一個事務在複製期間都會被指派一個全局順序序列;當一個事務到達提交點時,該事務會知道當前與該事務不衝突的最新已提交事務的順序序號,在這兩個事務的全局順序序列之間的間隔是不肯定區域,在該區域間的事務相互是「看不到」對方的影響的,但全部在這間隔之間的惟物都會被進行主鍵衝突檢測(若是發現衝突認證測試就會失敗)。
如下演示如何配置Galera Cluster:
一、首先在各節點上安裝MariaDB Galera:mysql

 

 

二、初始化MariaDB數據庫並啓動MariaDB服務:sql

 

 

初始化完成後啓動MariaDB:數據庫

 

 

此時能夠查看到Galera相關的配置選項,能夠看出Galera相關的配置參數有36個之多:bootstrap

 

 

三、在MariaDB實例上建立用於Galera集羣的用戶,第一個節點創建便可:centos

 

 

四、先在一個節點上配置Galera Cluster:架構

 

補充:後續過程發現bootstrap模式初始化後並啓動的MariaDB實例不能正常的處理其餘節點請求,所以須要重啓MariaDB實例;
注意:wsrep_node_address和wsrep_node_name需是相對應的用於指定當前Galera節點主機及IP信息;當第一個節點啓動完成後即可以調換以上配置文件中的wsrep_cluster_address參數了;參數wsrep_sst_method可使用rsync方式或Percona提供的Xtrabackup;
經測發現wsrep_sst_method=xtrabackup時不能正常工做,有待進一步測試;
五、向以前配置的Galera集羣(即IP爲192.168.192.129的節點)中加入其餘新節點:app

 

第三節點:異步

 


六、依次啓動其餘節點,其餘節點會根據配置自動加入集羣並同步數據:
ide

 

 

七、在Galera上查看各集羣狀態:

 

今後處能夠看出當有其餘節點加入到集羣中時,wsrep_cluster_size能夠反映出當前集羣節點數量;
八、在一節點上新建表並插入數據以在其餘實例上觀測數據是否同步:

 

在其餘節點上觀測數據:

 

 

 

八、測試節點故障機恢復:
首先中止nd1節點(已調整過該節點的wsrep_cluster_address配置):

 

 

在nd2節點上刪除並更新數據:

 

 

在nd3節點上查看數據是否一致:

 

 

啓動中止的nd1節點:

 

 

在nd1節點上查看數據是否自動同步:

 

 

關於更多的INSERT、UPDATE、DELETE測試道理是相同的,各位可自行完成;固然,若是要在生產環境中使用的話還須要進行更復雜功能性、邏輯性測試。也歡迎各位一塊兒探討Galera Cluster的使用及測試經驗。

相關文章
相關標籤/搜索