MariaDB Galera Cluster是一種同步多主機集群方案龄减,目前它支持XtraDB/ InnoDB存儲引擎璧帝,為MySQL/MariaDB的高可用架構(gòu)提供了一種實現(xiàn)基礎(chǔ)。
首先引用《MySQL高可用方案選型參考》這篇文章中關(guān)于Gelera優(yōu)缺點的分析。
優(yōu)勢:
- 服務(wù)高可用;
- 數(shù)據(jù)同步復(fù)制(并發(fā)復(fù)制),幾乎無延遲逆航;
- 多個可同時讀寫節(jié)點,可實現(xiàn)寫擴展渔肩,不過最好事先進行分庫分表因俐,讓各個節(jié)點分別寫不同的表或者庫,避免讓galera解決數(shù)據(jù)沖突周偎;
- 新節(jié)點可以自動部署抹剩,部署操作簡單;
- 數(shù)據(jù)嚴格一致性蓉坎,尤其適合電商類應(yīng)用澳眷;
- 完全兼容MySQL;
劣勢:
- 只支持InnoDB引擎蛉艾;
- 所有表都要有主鍵钳踊;
- 不支持LOCK TABLE等顯式鎖操作;
- 鎖沖突勿侯、死鎖問題相對更多拓瞪;
- 不支持XA;
- 集群吞吐量/性能取決于短板助琐;
- 新加入節(jié)點采用SST時代價高吴藻;
- 存在寫擴大問題;
- 如果并發(fā)事務(wù)量很大的話弓柱,建議采用InfiniBand網(wǎng)絡(luò)沟堡,降低網(wǎng)絡(luò)延遲;
接下來動手實踐矢空,用虛擬機完成MariaDB Galera Cluster的搭建航罗。
1.環(huán)境準備
CentOS 7.3
MariaDB 10.1.23
host: 192.168.1.103,192.168.1.105,192.168.1.106
2.修改MariaDB配置文件
192.168.1.103
cat << EOF > /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.1.103,192.168.1.105,192.168.1.106"
wsrep_node_name=node1
wsrep_node_address=192.168.1.103
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Allow server to accept connections on all interfaces.
# bind-address=0.0.0.0
# Optional setting
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
EOF
192.168.1.105
cat << EOF > /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.1.103,192.168.1.105,192.168.1.106"
wsrep_node_name=node2
wsrep_node_address=192.168.1.105
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Allow server to accept connections on all interfaces.
# bind-address=0.0.0.0
# Optional setting
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
EOF
192.168.1.106
cat << EOF > /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.1.103,192.168.1.105,192.168.1.106"
wsrep_node_name=node3
wsrep_node_address=192.168.1.106
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Allow server to accept connections on all interfaces.
# bind-address=0.0.0.0
# Optional setting
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
EOF
3.初始化集群
# 在第一個節(jié)點上啟動galera cluster
galera_new_cluster
# 或
/usr/sbin/mysqld --wsrep-new-cluster --user=root &
# 其它節(jié)點重啟mariadb
systemctl restart mariadb.service
# 特別提醒:如果其它節(jié)點無法啟動,需要關(guān)閉selinux
# /etc/selinux/config中屁药,SELINUX=enforcing改為SELINUX=disabled粥血,重啟后永久生效
4.查詢集群中的節(jié)點
# 查看節(jié)點數(shù)量
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
# 查看更多信息
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep%';
5.測試
- 向任意節(jié)點數(shù)據(jù)庫寫入數(shù)據(jù),無論是對數(shù)據(jù)庫酿箭、表還是對表中數(shù)據(jù)的操作复亏,都會更新到其它節(jié)點;
- 任意使一個節(jié)點上的MariaDB下線缭嫡,集群會自動將該節(jié)點從集群中clean up缔御;MariaDB再次上線時,集群又自動將該節(jié)點添加進來妇蛀。
具體的測試過程就不擺出來了耕突,集群搭建好后這些結(jié)果是沒有什么懸念的。
總結(jié):以上只是如何搭建集群评架,如果要對這種集群方案有深刻的認識和理解眷茁,需要對其原理進一步研究!建議閱讀官方文檔及其它文章纵诞。
參考文章:
Galera replication for MySQL(包括Galera replication原理)
MySQL的Galera Cluster配置說明
如何修復(fù) MariaDB Galera Cluster