kolla-ansible mariadb_recovery原理

kolla-ansible mariadb_recovery 原理

详情见 kolla-ansible\ansible\roles\mariadb\tasks\recover_cluster.yml 文件

# 在所有节点上, 删除以下临时文件
rm /tmp/kolla_mariadb_grastate.dat
rm /tmp/kolla_mariadb_recover_inventory_name  # 该文件用来记录谁是主节点
# 在所有节点上, 停止容器
# 在所有节点上, 带参数 --wsrep-recover 启动容器, 为了从日志文件中获取事务ID, 来比较大小确定谁是主节点
# 在所有节点上, 停止容器
# 在所有节点上, 拷贝容器中的日志文件到 /tmp
docker cp mariadb:/var/log/kolla/mariadb/mariadb.log /tmp/mariadb_tmp.log
# 在所有节点上, 获取 mariadb wsrep recovery seqno
tail -n 200 /tmp/mariadb_tmp.log | awk -F" " '$0~/Recovered position/{print $NF;exit;}' | awk -F":" '{print $1}'
# 在所有节点上, 删除 /tmp 目录中的 mariadb_tmp.log
rm /tmp/mariadb_tmp.log
# 比较所有 mariadb 节点上的 seqno, 取得最大值
# 将最大值的节点的 hostname 写入到 /tmp/kolla_mariadb_recover_inventory_name 文件中
echo "hostname" > /tmp/kolla_mariadb_recover_inventory_name
chmod 0644 /tmp/kolla_mariadb_recover_inventory_name
# 将最大值的节点定义为启动节点和 master 节点
# 在启动节点上, 拷贝 /var/lib/mysql/grastate.dat 到 /tmp 目录
docker cp mariadb:/var/lib/mysql/grastate.dat /tmp/kolla_mariadb_grastate.dat
# 在启动节点上, 修改启动节点中 /tmp/kolla_mariadb_grastate.dat 文件中的值
safe_to_bootstrap: 1
# 在启动节点上, 将修改过后的文件拷回容器内
docker cp /tmp/kolla_mariadb_grastate.dat mariadb:/var/lib/mysql/grastate.dat
# 在启动节点上, 带参数 --wsrep-new-cluster 启动容器
# 容器启动成功后, 将改 mariadb 容器设置为 primary
docker exec mariadb mysql -uroot -p{{ database_password }} -e \"SET GLOBAL wsrep_provider_options='pc.bootstrap=yes';\"
# 在其他节点上, 启动 mariadb 容器

详解

grastate.dat 文件记录了全局事务ID(seqno), 每执行一个操作集合(多个sql操作), 就将seqno 加 1,正常示例:

/var/lib/mysql/grastate.dat
version: 2.1
uuid: cbd332a9-f617-11e2-b77d-3ee9fa637069
seqno: 43760

mysql 服务停止后,查看grastate.dat 文件,如果 seqno 大于0,表示正常关闭,如果为 -1, 如下,表示改节点在执行事务时异常崩溃

/var/lib/mysql/grastate.dat
version: 2.1
uuid: cbd332a9-f617-11e2-b77d-3ee9fa637069
seqno: -1

而如果是如下, uuid 全为0,表示该节点在执行 DDL 时异常崩溃

/var/lib/mysql/grastate.dat
version: 2.1
uuid: 00000000-0000-0000-0000-000000000000
seqno: -1

可以在启动改服务时加上--wsrep-recover 参数,mysql 会输出最后一次提交的 GTID(seqno) 到 mysqld.log 文件中

例如:

140716 12:55:45 [Note] WSREP: Found saved state: cbd332a9-f617-11e2-b77d-3ee9fa637069:36742

表示 uuidcbd332a9-f617-11e2-b77d-3ee9fa637069, 而 seqno36742

--wsrep-recover启动时,会将InnoDB表空间恢复到一致状态,将相应的Global Transaction ID值打印到错误日志中,然后退出

safe_to_bootstrap: 1 表示改节点可以用来启动集群,如果以没有改标识的节点来启动集群,将会报以下错误:

2016-11-07 01:49:19 5572 [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 .

查看集群大小

SHOW STATUS LIKE 'wsrep_cluster_size';

查看集群状态

show global status like 'wsrep_cluster_status';

例如

SHOW GLOBAL STATUS LIKE 'wsrep_cluster_status';

+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+

如果所有节点都不是 Primary, 那么就需要重置仲裁

通过如下命令将节点变为 Primary

SET GLOBAL wsrep_provider_options='pc.bootstrap=YES';

参考

https://galeracluster.com/library/training/tutorials/restarting-cluster.html

https://galeracluster.com/library/documentation/quorum-reset.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值