不同于标准的MySQL服务器和MySQL集群,MySQL / MariaDB Galera集群在启动方式上有一些细小的区别。Galera需要在集群启动一个节点作为参考点,剩余的节点才能加入形成集群。这个过程被称为集群引导。引导是一个初始步骤,引导数据库节点作为主节点,其它节点将主节点作为参考点同步数据。
启动集群
在三台机器上安装mariadb,并做初始化配置。在第一台节点上修改/etc/my.cnf.d/server.cnf 的内容,在[galera]部分添加集群配置:
1
2
3
4
5
6
7
8
9
10
11
12
|
wsrep_on=ON
wsrep_provider=
/usr/lib64/galera/libgalera_smm
.so
wsrep_cluster_address=
'gcomm://'
#第一个启动节点配置
wsrep_cluster_name=
'mariadb_cluster'
wsrep_node_address=
'192.168.0.56'
#本机IP地址
wsrep_node_name=
'mariadb_node1'
#集群节点名称
wsrep_sst_method=
rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
|
在第二台和第三台节点上配置/etc/my.cnf.d/server.cnf 文件的[galera]部分:
1
2
3
4
5
6
7
8
9
10
11
12
|
wsrep_on=ON
wsrep_provider=
/usr/lib64/galera/libgalera_smm
.so
wsrep_cluster_address=
'gcomm://192.168.0.56,192.168.0.58'
wsrep_cluster_name=
'mariadb_cluster'
wsrep_node_address=
'192.168.0.57'
wsrep_node_name=
'mariadb_node2'
wsrep_sst_method=
rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
|
1
2
3
4
5
6
7
8
9
10
11
12
|
wsrep_on=ON
wsrep_provider=
/usr/lib64/galera/libgalera_smm
.so
wsrep_cluster_address=
'gcomm://192.168.0.56,192.168.0.57'
wsrep_cluster_name=
'mariadb_cluster'
wsrep_node_address=
'192.168.0.58'
wsrep_node_name=
'mariadb_node3'
wsrep_sst_method=
rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
|
如果要启动Mariadb Galera Cluster ,首先选择node1节点为初始节点,将node1作为第一个启动节点,并且设置gcomm为空,否则无法启动。
1
|
wsrep_cluster_address=
'gcomm://'
|
nide1启动命令(不同版本的不同启动方式):
$ service mysql bootstrap
# sysvinit
$ service mysql start --wsrep-new-cluster
# sysvinit
$ galera_new_cluster
# systemd
$ mysqld_safe --wsrep-new-cluster
# command line
node1启动之后,依次启动node2和node3. 之后修改node1 "wsrep_cluster_address"配置,添加上其它集群节点IP.
1
|
$ systemctl start mariadb
|
查看系统端口是否存在,默认情况下系统会监听3306,4567端口。
登录数据库,查看集群节点是否加入:
1
|
MariaDB [(none)]> SHOW STATUS LIKE
"wsrep_cluster_size"
;
|
1
2
3
4
5
|
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
|
可以通过 wsrep_cluster_status 和 wsrep_local_state_comment 查看节点的同步状态。
1
2
3
4
5
6
7
|
MariaDB [(none)]> show status like
"wsrep_cluster_status"
;
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+
1 row
in
set
(0.00 sec)
|
1
2
3
4
5
6
7
|
MariaDB [(none)]> show status like
"wsrep_local_state_comment"
;
+---------------------------+--------+
| Variable_name | Value |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
1 row
in
set
(0.00 sec)
|
警告:对一个已存在的集群添加新的节点时,不要使用引导的方式(bootstrap)启动这个节点,不能在一个集群中使用两个引导节点。
故障恢复和重启集群
当我们的mariadb Galera Cluster集群需要重启(意外宕机)时,未来保证数据的完整性,选择合适的主节点作为引导启动节点非常重要,如果启动顺序不正确可能会造成数据丢失或者无法启动。
当Galera以节点上的引导命令启动时该 特定节点将到达主状态(检查wsrep_cluster_status的值)。其余的节点只需要一个正常的启动命令,它们将自动查找集群中的现有主组件(PC)并加入组成一个集群。然后,数据同步通过加速器和供体之间的增量状态转移(IST)或快照状态转移(SST)发生。
因此,基本上,如果要启动新集群或集群中没有其他节点处于PRIMARY状态,则应仅引导集群。在选择采取的行动时应该小心,否则可能会导致拆分集群或丢失数据。
如果集群中主节点运行正常,我们只需要正常启动其他节点。所以做关键的一点是在集群全部宕机之后,我们要找到最后一个退出集群,并且数据是最完整的节点。通过启动这个节点,其他节点启动之后与这个节点同步数据才能保证数据库集群的数据不丢失。
参考文档:
https://severalnines.com/blog/how-bootstrap-mysqlmariadb-galera-cluster
http://galeracluster.com/documentation-webpages/restartingcluster.html