mariadb galera cluster集群故障恢复时,经常会遇到节点无法启动的情况,启动服务时报错:
systemctl start mariadb
Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.
一般情况下,如果集群中还有存活的节点,那么离线的节点只需要执行systemctl start mariadb即可重新加入集群,但如果所有节点均已离线,就会出现这种情况,此时需要人工确定启动顺序,先检查每个节点的/var/lib/mysql/grastate.dat文件,以测试环境为例,当前两节点上的mariadb服务均处于停止状态,grastate.dat的内容分别为:
# GALERA saved state
version: 2.1
uuid: 44f8dbe5-1271-11eb-8206-1e1a48859dc8
seqno: 157035
safe_to_bootstrap: 0
# GALERA saved state
version: 2.1
uuid: 44f8dbe5-1271-11eb-8206-1e1a48859dc8
seqno: 157036
safe_to_bootstrap: 1
可以看到两者有相同的uuid,但seqno和safe_to_bootstrap不同。集群中seqno最大的节点是优先启动节点,一般它的safe_to_bootstrap=1。此时以galera_new_cluster方式启动优先节点,然后再以systemctl start mariadb方式启动其它节点,集群就顺利恢复了。