MariaDB Galera Cluster是一种同步多主机集群方案,目前它支持XtraDB/ InnoDB存储引擎,为MySQL/MariaDB的高可用架构提供了一种实现基础。
首先引用 《MySQL高可用方案选型参考》 这篇文章中关于Gelera优缺点的分析。
接下来动手实践,用虚拟机完成MariaDB Galera Cluster的搭建。
1.环境准备
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
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
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
3.初始化集群
# 在第一个节点上启动galera cluster
galera_new_cluster
/usr/sbin/mysqld --wsrep-new-cluster --user=root &
# 其它节点重启mariadb
systemctl restart mariadb.service
# 特别提醒:如果其它节点无法启动,需要关闭selinux
# /etc/selinux/config中,SELINUX=enforcing改为SELINUX=disabled,重启后永久生效
4.查询集群中的节点
# 查看节点数量
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
# 查看更多信息
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep%';
向任意节点数据库写入数据,无论是对数据库、表还是对表中数据的操作,都会更新到其它节点;
任意使一个节点上的MariaDB下线,集群会自动将该节点从集群中clean up;MariaDB再次上线时,集群又自动将该节点添加进来。
具体的测试过程就不摆出来了,集群搭建好后这些结果是没有什么悬念的。