[关闭]
@Alex-Zhao 2018-04-17T15:23:36.000000Z 字数 2414 阅读 339

Galera集群中关于Safe-To-Bootstrap

数据库


mariadb galera集群如何启动第一个节点
搭建了mariadb galera集群后,整个集群停掉后如何启动呢,我们要先启动那个节点呢,今天我尝试把集群机器全部停掉,然后任意启动一个节点,发现报如下的错误:

170620 21:32:55 [ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .

意思该节点不是最后一个离开集群的节点(最后停掉的节点),可能没有包含所有更新的数据,强制从该节点启动,需要手工编辑grastate.dat文件,设置safe_to_bootstrap=1,当然了,我们不需需要强制从该节点启动,我们逐一排查每个节点下的grastate.dat文件(该文件在data目录下),找到safe_to_bootstrap=1的节点,然后在该节点上启动即可.

比如我这里找到节点的是节点3

  1. [root@hxl03 data]# more grastate.dat
  2. # GALERA saved state
  3. version: 2.1
  4. uuid: 43caaa91-54bf-11e7-9321-c60bd8969b24
  5. seqno: 2919
  6. safe_to_bootstrap: 1

在该节点上先启动,然后逐一启动其他的节点.

关于Safe-To-Bootstrap参数作用

以下内容翻译自Introducing the “Safe-To-Bootstrap” feature in Galera Cluster

Galera集群一般情况是不停机运行,所以集群正常操作是不需要停机的。然而,如果如果出现停机操作,应该是在一定的压力下才会触发,所以为了避免停机时间和数据丢失,快速和安全的恢复集群很重要。

重启整个集群

首先,简单介绍一下集群重启。不管是一个有序的关闭还是突然所有节点崩溃,集群重启要有以下原则:
1. 老集群不存在,重新创建新的集群
2. 第一个节点必须要重新开始引导
3. 新集群第一个节点就是集群的主节点

安全引导的保护

Galera集群正常关闭要进行一个有序的关闭操作,最后关闭的节点应该是新集群开机的第一个节点,选择其他节点开机会出现错误。
Galera从3.19版本开始,在集群被关闭时,开始追踪节点的关闭顺序,最后关闭的节点被标记为“Safe-to-bootstrap”,其他节点被标记为不安全的节点。
当启动一个新的集群,Galera拒绝启动第一个节点标记为非安全的节点,将出现一个报错信息:
“It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates.
To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .”
当整个集群出现崩溃时,所有节点都会被认为是不安全引导节点,这就要强制将一个特定的节点作为引导节点。

选择正确的节点

选择正确的节点引导依赖于集群如何关闭的:有序关闭还是crash
如果是有序的关闭,它将遵循Safe-to-bootstrap的建议,查看grastate.dat文件中的safe-to-bootstrap:1的节点作为新集群引导节点。

  1. # GALERA saved state
  2. version: 2.1
  3. uuid: 9acf4d34-acdb-11e6-bcc3-d3e36276629f
  4. seqno: 15
  5. safe_to_bootstrap: 1

如果是crash的集群,所有节点都将是safe_to_bootstrap: 0,所以我们需要查看InnoDB存储引擎,确定哪些节点是集群最后关闭的节点,这将通过开启mysqld的--wsrep-recover获得,产生如下输出:

  1. 2016-11-18 01:42:15 36311 [Note] InnoDB: Database was not shutdown normally!
  2. 2016-11-18 01:42:15 36311 [Note] InnoDB: Starting crash recovery.
  3. ...
  4. 2016-11-18 01:42:16 36311 [Note] WSREP: Recovered position: 37bb872a-ad73-11e6-819f-f3b71d9c5ada:345628
  5. ...
  6. 2016-11-18 01:42:17 36311 [Note] /home/philips/git/mysql-wsrep-bugs-5.6/sql/mysqld: Shutdown complete

Recovered position关键字后边的UUID字符串应该是新集群开机的最高节点,编辑器配置文件的grastate.dat,设置safe_to_bootstrap: 1
PS:其上的UUID就是grastate.dat文件中的UUID

  1. # GALERA saved state
  2. version: 2.1
  3. uuid: 37bb872a-ad73-11e6-819f-f3b71d9c5ada
  4. seqno: -1
  5. safe_to_bootstrap: 1

这样Galera就会引导起来。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注