Galera Cluster是MariaDB的一個雙活多主集羣,其可使得MariDB的全部節點保持同步,Galera爲MariaDB提供了同步複製(相對於原生的異步複製),所以其能夠保證HA,且其當前僅支持XtraDB/InnoDB存儲引擎(擴展支持MyISAM),而且只可在Linux下使用。
從MariaDB 10.1開始,在Galera Cluster中默認已經包含了wsrep API。在MariaDB 10.0和MariaDB 5.5時仍是獨立的,因此在安裝部署上可能會有所不一樣,具體看MariaDB官方介紹。node
● 真正的多主架構,任何節點均可以進行讀寫。
● 同步複製,各節點間無延遲且節點宕機不會致使數據丟失。
● 緊密耦合,全部節點均保持相同狀態,節點間無不一樣數據。
● 無需主從切換操做或使用VIP。
● 熱Standby,在Failover過程當中無停機時間(因爲不須要Failover)。
● 自動節點配置,無需手工備份當前數據庫並拷貝至新節點。
● 支持InnoDB存儲引擎。
● 對應於透明,無需更改應用或是進行極小的更改。
● 無需進行讀寫分離。mysql
● 由於是多主,因此不存在Slavelag(延遲)。
● 不存在丟失事務的狀況。
● 同時具備讀和寫的擴展能力。
● 更小的客戶端延遲。
● 節點間數據是同步的,而Master/Slave模式是異步的,不一樣slave上的binlog多是不一樣的。sql
● 目前的複製僅僅支持InnoDB存儲引擎,任何寫入其餘引擎的表,包括mysql.*表將不會複製,可是DDL語句會被複制的,所以建立用戶將會被複制,可是insert into mysql.user…將不會被複制的。
● DELETE操做不支持沒有主鍵的表,沒有主鍵的表在不一樣的節點順序將不一樣,若是執行SELECT…LIMIT… 將出現不一樣的結果集。
● 在多主環境下LOCK/UNLOCK TABLES不支持,以及鎖函數GET_LOCK(), RELEASE_LOCK()…。
● 查詢日誌不能保存在表中,若是開啓查詢日誌,只能保存到文件中。
● 容許最大的事務大小由wsrep_max_ws_rows和wsrep_max_ws_size定義,任何大型操做將被拒絕,如大型的LOAD DATA操做。
● 因爲集羣是樂觀的併發控制,事務commit可能在該階段停止。若是有兩個事務向在集羣中不一樣的節點向同一行寫入並提交,失敗的節點將停止。對於集羣級別的停止,集羣返回死鎖錯誤代碼(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK))。
● XA事務不支持,因爲在提交上可能回滾。
● 整個集羣的寫入吞吐量是由最弱的節點限制,若是有一個節點變得緩慢,那麼整個集羣將是緩慢的。爲了穩定的高性能要求,全部的節點應使用統一的硬件。
● 集羣節點建議最少3個。
● 若是DDL語句有問題將破壞集羣。數據庫
說明:3臺機器192.168.10.43/192.168.10.44/192.168.10.45bootstrap
[root@db04 ~]# systemctl stop firewalld.service [root@db04 ~]# systemctl disable firewalld.service
# cp /usr/local/mariadb/support-files/wsrep.cnf /etc/my.cnf.d/ 在/etc/my.cnf裏面添加一行 !includedir /etc/my.cnf.d/
編輯wsrep文件架構
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=192.168.10.43 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/local/mariadb/lib/galera/libgalera_smm.so wsrep_provider_options="gcache.name = /data/galera/galera.cache; gcache.size=1G; gcache.page_size=1G; gcache.recover = yes" # Galera Cluster Configuration wsrep_cluster_name="test_cluster" wsrep_cluster_address="gcomm://192.168.10.43,192.168.10.44,192.168.10.45" #wsrep_cluster_address="gcomm://" wsrep_sst_auth=galera:000000 # Galera Synchronization Configuration wsrep_sst_method=xtrabackup-v2 # Galera Node Configuration wsrep_node_address="192.168.10.43" wsrep_node_name="node1" wsrep_slave_threads=8
# service mysqld stop
# mysqld --wsrep-new-cluster # service mysqld start --wsrep_new_cluster 或者 # service mysqld start --galera_new_cluster
搭建galera cluster的時候設置sst爲xtrabackup,啓動node1報錯。
[ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .
解決方式:
grastate.dat file of the node you intend to use as the first node.
須要把該文件刪除 從新啓動便可。併發
解決方法:
1.安裝插件yum -y install socat
2.檢查用戶galera是否可在本機登錄異步
出現節點脫離集羣,緣由是多節點同時對同一記錄發送更新致使集羣節點脫落,若是會發生這種狀況那麼是否須要讀寫分離,最後wsrep_slave_tereads制線程數量根據我的品行核心 作出決定。ide