MariaDB Galera Cluster 介紹
簡介
MariaDB集群是MariaDB同步多主機集群,僅支持XtraDB(詳見本文結尾注釋)/InnoDB存儲引擎(雖然有對MyISAM實驗支持 - 看wsrep_replicate_myisam系統變量)
主要功能
- 同步復制 --- Galera主從復制是同步的,底層依賴rsync;
- 真正的multi-master,即所有節點可以同時讀寫數據庫;
- 自動的節點成員控制,失效節點自動被清除;
- 新節點加入數據自動復制;
- 真正的並行復制,行級;
- 用戶可以直接連接集群,使用感受上與MySQL完全一致;
優勢
- 因為是多主,所以不存在Slavelag(延遲) 不存在丟失事務的情況
- 同時具有讀和寫的擴展能力
- 更小的客戶端延遲
- 節點間數據是同步的,而Master/Slave模式是異步的,不同slave上的binlog可能是不同的
說明
Galera集群的復制功能基於Galeralibrary實現,為了讓MySQL與Galera library通訊,特別針對MySQL開發了wsrep API。
以下內容摘自於 https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/,是在發布MariaDB 10.1版本時摘錄的
MariaDB Galera Cluster is MariaDB plus the MySQL-wsrep patch from Codership. It is currently available on Linux only.
#翻譯:MariaDB Galera集群是MariaDB加上來自於諾基亞的MySQL-wsrep補丁。 它目前僅在Linux上可用。
In MariaDB 5.5 and MariaDB 10.0, MariaDB Galera Server is a separate package installed instead of the standard MariaDB Server package. In MariaDB 10.1 the MariaDB Server and MariaDB Galera Server packages have been combined and Galera packages and their dependencies get installed automatically when installing MariaDB. The Galera parts remain dormant until configured, like a plugin or storage engine.
#翻譯: 在MariaDB 5.5和MariaDB 10.0中,MariaDB Galera Server是一個單獨的軟件包,而不是標准的MariaDB Server軟件包。 在MariaDB 10.1中,MariaDB Server和MariaDB Galera服務器軟件包已合並,Galera軟件包及其依賴關系在安裝MariaDB時自動安裝。 Galera部分在配置之前保持休眠狀態,就像插件或存儲引擎一樣。
早期的MariaDB Galera Cluster架構
- haproxy作為MariaDB Galera Cluster的前端
- 2台haproxy用keepalived避免單點故障
- 3台MariaDB和一個garbd仲裁節點組成集群,仲裁節點上無數據
- Galera的SST采用Percona提供的XtraBackup(防止鎖表,非阻塞)
- 配置文件 /etc/my.cnf.d/wsrep.cnf
wsrep_ready 為ON
為防止腦裂引入仲裁人arbitrator
早期版本的架構和安裝配置和現在有很大不同,這里僅作為了解,不必關注。
*值得注意的是目前的MariaDB 10版本演進中,各升級版本的安裝和配置也是不同的,所以在安裝的時候一定要根據自身版本參照與之相匹配的安裝設置文檔進行。
監控
- 查看集群節點地址:mysql> show variables like 'wsrep_cluster_address';
- 查看MySQL版本: mysql> SHOW GLOBAL VARIABLES LIKE 'version';
- 查看wsrep版本: mysql> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';
- 查看wsrep有關的所有變量: mysql> SHOW VARIABLES LIKE 'wsrep%' \G
- 查看Galera集群狀態: mysql> show status like 'wsrep
監控狀態參數說明
- 集群完整性檢查
- wsrep_cluster_state_uuid:在集群所有節點的值應該是相同的,有不同值的節點,說明其沒有連接入集群.
- wsrep_cluster_conf_id:正常情況下所有節點上該值是一樣的.如果值不同,說明該節點被臨時"分區"了.當節點之間網絡連接恢復的時候應該會恢復一樣的值.
- wsrep_cluster_size:如果這個值跟預期的節點數一致,則所有的集群節點已經連接.
- wsrep_cluster_status:集群組成的狀態.如果不為"Primary",說明出現"分區"或是"split-brain"狀況.
- 節點狀態檢查
- wsrep_ready: 該值為ON,則說明可以接受SQL負載.如果為Off,則需要檢查wsrep_connected.
- wsrep_connected: 如果該值為Off,且wsrep_ready的值也為Off,則說明該節點沒有連接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置錯造成的.具體錯誤需要查看錯誤日志)
- wsrep_local_state_comment:如果wsrep_connected為On,但wsrep_ready為OFF,則可以從該項查看原因.
- 復制健康檢查
- wsrep_flow_control_paused:表示復制停止了多長時間.即表明集群因為Slave延遲而慢的程度.值為0~1,越靠近0越好,值為1表示復制完全停止.可優化wsrep_slave_threads的值來改善.
- wsrep_cert_deps_distance:有多少事務可以並行應用處理.wsrep_slave_threads設置的值不應該高出該值太多.
- wsrep_flow_control_sent:表示該節點已經停止復制了多少次.
- wsrep_local_recv_queue_avg:表示slave事務隊列的平均長度.slave瓶頸的預兆.
- 最慢的節點的wsrep_flow_control_sent和wsrep_local_recv_queue_avg這兩個值最高.這兩個值較低的話,相對更好.
- 檢測慢網絡問題
wsrep_local_send_queue_avg:網絡瓶頸的預兆.如果這個值比較高的話,可能存在網絡瓶 - 沖突或死鎖的數目
wsrep_last_committed:最后提交的事務數目
wsrep_local_cert_failures和wsrep_local_bf_aborts:回滾,檢測到的沖突數目
注釋
XtraDB
XtraDB存儲引擎是由Percona開發的一款MySQL數據庫的高性能存儲引擎,其目的是用來代替InnoDB存儲引擎,可用於需要更高性能的環境。
可以看作是InnoDB存儲引擎的增強版本,它在InnoDB上進行了大量的修改和patched,它完全兼容InnoDB,且提供了很多InnoDB不具備的有用的功能。
例如:在多核CPU上面的性能和伸縮性要更好;對於內存的分配和使用也要更好;也解除了InnoDB的很多限制;提供了比InnoDB更多的配置和性能監控參數。
對於高負載的MySQL應用來說,如果不需要MySQL官方技術支持的話,完全可以使用XtraDB來代替InnoDB存儲引擎。此外,Percona還提供了打了補丁的MySQL版本,這些補丁對MySQL很多方面進行了改進,性能提高,增加更多監控參數等等。據說JavaEye的數據庫就是使用了Percona的版本。
當前XtraDB的最新版本是1.0.4-8(release-8)
https://www.percona.com/ 提供開源和技術服務,目前只在美國和歐洲設置聯絡處
Percona XtraDB Cluster是針對MySQL用戶的高可用性和擴展性解決方案,基於Percona Server 5.5.17,最新到了5.7版
-本章完-
2017-02-23