不同于标准的MySQL服务器和MySQL集群,MySQL / MariaDB Galera集群在启动方式上有一些细小的区别。Galera需要在集群启动一个节点作为参考点,剩余的节点才能加入形成集群。这个过程被称为集群引导。引导是一个初始步骤,引导数据库节点作为主节点,其它节点将主节点作为参考点同步数据。
启动集群
在三台机器上安装mariadb,并做初始化配置。在第一台节点上修改/etc/my.cnf.d/server.cnf 的内容,在[galera]部分添加集群配置:
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]部分:
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
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为空,否则无法启动。
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.
$ systemctl start mariadb
查看系统端口是否存在,默认情况下系统会监听3306,4567端口。
登录数据库,查看集群节点是否加入:
MariaDB [(none)]> SHOW STATUS LIKE"wsrep_cluster_size";
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
可以通过 wsrep_cluster_status 和 wsrep_local_state_comment 查看节点的同步状态。
MariaDB [(none)]> show status like "wsrep_cluster_status"; +----------------------+---------+ | Variable_name | Value | +----------------------+---------+ | wsrep_cluster_status | Primary | +----------------------+---------+ 1 row in set (0.00 sec)
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状态,则应仅引导集群。在选择采取的行动时应该小心,否则可能会导致拆分集群或丢失数据。
如果集群中主节点运行正常,我们只需要正常启动其他节点。所以做关键的一点是在集群全部宕机之后,我们要找到最后一个退出集群,并且数据是最完整的节点。通过启动这个节点,其他节点启动之后与这个节点同步数据才能保证数据库集群的数据不丢失。
1、找到最后一个停机的节点(seqno 数字最高的节点为下一次启动的主节点,应该首先启动):
# cat /maria-data/mysql/grastate.dat # GALERA saved state version: 2.1 uuid: 8736f68d-0af7-11e7-aba5-9a9e6a4d342c seqno: 15 safe_to_bootstrap: 0
提示: 如果所有的节点都是seqno的值都为-1,而且我们知道哪一个节点的优先级高,那么我们可以手动指定此节点为引导节点,修改grastate.dat文件的safe_to_bootstrap =1,然后启动此节点。
2、如果所有节点因为突然宕机导致数据库停止,我们需要找到数据同步最完整的节点作为启动节点,可以在每个节点上使用如下命令:
$ mysqld --wsrep-recover
...
2016-11-18 01:42:15 36311 [Note] InnoDB: Database was not
shutdown
normally!
2016-11-18 01:42:15 36311 [Note] InnoDB: Starting crash recovery.
...
2016-11-18 01:42:16 36311 [Note] WSREP: Recovered position: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f:114428
...
提示信息中,在Recovered position 后所指定的ID,就是我们需要首先启动的数据库节点。修改此节点grastate.dat 配置文件 “safe_to_bootstrap: 1”,启动此节点即可。
参考文档:
https://severalnines.com/blog/how-bootstrap-mysqlmariadb-galera-cluster
http://galeracluster.com/documentation-webpages/restartingcluster.html
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。