集群关机或者异常宕机,重启后想要以IST的方式加入集群,需要考虑集群中是否存在满足的节点,该节点的gcache还存放着停机期间所产生的事物。

重新初始化节点加入集群应该是最后的救命稻草。

这里模拟某个节点意外宕机或者被kill -9 了。

1、查看一下grastate.dat的状态

cat /data/database/pxc3306/grastate.dat

# GALERA saved state
version: 2.1
uuid: b1ac3465-05a1-11e8-9776-77ea0d01e209
seqno: -1
safe_to_bootstrap: 0

解释:

  • uuid: 节点所属集群的wsrep_cluster_state_uuid
  • seqno: 整个集群的状态,也就是wsrep_last_committed,也是下次做IST的起始点。如果集群非正常关闭或者正在运行状态,seqno的值为-1
  • safe_to_bootstrap:

正常情况下,节点启动后会从grastate.dat中的seqno开始做IST。如果是非正常关闭,或者某些原因启动失败,这个值会被改为-1,这时候需要借助wsrep_recovery日志进行恢复。

2、wsrep_recovery

启动失败:

/usr/bin/mysqld_safe --defaults-file=/etc/pxc3306.cnf &

2018-04-03T08:18:47.310804Z mysqld_safe Logging to '/data/database/pxc3306/pxc3306.log'.
2018-04-03T08:18:47.315813Z mysqld_safe Logging to '/data/database/pxc3306/pxc3306.log'.
2018-04-03T08:18:47.371770Z mysqld_safe Starting mysqld daemon with databases from /data/database/pxc3306
2018-04-03T08:18:47.404646Z mysqld_safe WSREP: Running position recovery with --log_error='/data/database/pxc3306/wsrep_recovery.5Dl9fN' --pid-file='/data/database/pxc3306/node-1-recover.pid'

可以看到有个wsrep_recovery.xxxx的日志文件,可以从里面找到Recovered position

或者:

/usr/bin/mysqld_safe --defaults-file=/etc/pxc3306.cnf --wsrep-recover &

3、找到Recovered position

grep Recovered /data/database/pxc3306/wsrep_recovery.5Dl9fN

2018-04-03T08:18:54.534461Z 0 [Note] WSREP: Recovered position: bf26341f-43cb-11e8-a863-62c0eb4d9e79:634

可以看到uuid为:bf26341f-43cb-11e8-a863-62c0eb4d9e79,seqno为:634

4、修改grastate.dat

将找到的seqno重新写入:

vim /data/database/pxc3306/grastate.dat

# GALERA saved state
version: 2.1
uuid: bf26341f-43cb-11e8-a863-62c0eb4d9e79
seqno: 634
safe_to_bootstrap: 0

5、寻找合适的donor的节点

这一步很重要,意味着刚宕机的节点能否以IST的方式加入集群

在节点1上执行:

(root@localhost) [mydb_1]>  show status  like 'wsrep_local_cached_downto';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| wsrep_local_cached_downto | 625 |
+---------------------------+-------+
1 row in set (0.00 sec)

在节点2上执行:

(root@localhost) [(none)]> show status  like 'wsrep_local_cached_downto';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| wsrep_local_cached_downto | 678 |
+---------------------------+-------+
1 row in set (0.01 sec)

可以看出:节点1的gcache中缓存的seqno为625,比宕机节点所需要的634要小,意味着节点1的gcache中缓存在宕机节点宕机期间集群所产生的所有事物,因此节点1可以作为donor节点。相反节点2不行。

6、重新启动

指定节点1作为donor:

/usr/bin/mysqld_safe --defaults-file=/etc/pxc3306.cnf --wsrep_sst_donor=pxc-node-0 &

 2018-04-03T08:26:05.689594Z mysqld_safe Logging to '/data/database/pxc3306/pxc3306.log'.
2018-04-03T08:26:05.694919Z mysqld_safe Logging to '/data/database/pxc3306/pxc3306.log'.
2018-04-03T08:26:05.741478Z mysqld_safe Starting mysqld daemon with databases from /data/database/pxc3306
2018-04-03T08:26:05.757902Z mysqld_safe Skipping wsrep-recover forbf26341f-43cb-11e8-a863-62c0eb4d9e79:634 pair
2018-04-03T08:26:05.760692Z mysqld_safe Assigning bf26341f-43cb-11e8-a863-62c0eb4d9e79:634 to wsrep_start_position

恢复正常,查看一下端口,都ok

netstat -ltnpa | grep mysqld

tcp        0      0 0.0.0.0:4567                0.0.0.0:*                   LISTEN      4473/mysqld
tcp 0 0 30.0.0.199:33819 30.0.0.198:4567 ESTABLISHED 4473/mysqld
tcp 73021 0 30.0.0.199:4568 30.0.0.198:56028 ESTABLISHED 4473/mysqld
tcp 0 0 30.0.0.199:54614 30.0.0.196:4567 ESTABLISHED 4473/mysqld
tcp 0 0 :::3306 :::* LISTEN 4473/mysqld

可以看到启用了4568端口,IST专用。

6、查看一下状态

登录该节点,查看状态:

mysql> show status like 'wsrep_cluster_status';
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+
1 row in set (0.01 sec)

随便select一下会发现如下报错:

ERROR 1047 (08S01): WSREP has not yet prepared node for application use

因为目前数据还没同步完,

mysql>  show status like 'wsrep_last_committed';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| wsrep_last_committed | 655 |
+----------------------+-------+
1 row in set (0.00 sec)

wsrep_last_committed 的值和集群其他节点的一致了,这个节点就恢复ok了。

可以看看节点1的日志:

2018-04-20T07:57:24.655491Z 0 [Note] WSREP: Member 0.0 (pxc-node-2) requested state transfer from '*any*'. Selected 1.0 (pxc-node-0)(SYNCED) as donor.
2018-04-20T07:57:24.655541Z 0 [Note] WSREP: Shifting SYNCED -> DONOR/DESYNCED (TO: 677)
2018-04-20T07:57:24.655702Z 13 [Note] WSREP: IST request: bf26341f-43cb-11e8-a863-62c0eb4d9e79:634-677|tcp://30.0.0.226:4568
2018-04-20T07:57:24.655758Z 13 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2018-04-20T07:57:24.657885Z 0 [Note] WSREP: Initiating SST/IST transfer on DONOR side (wsrep_sst_xtrabackup-v2 --role 'donor' --address '30.0.0.226:4444/xtrabackup_sst//1' --socket '/tmp/pxc3306.sock' --datadir '/data/database/pxc3306/' --defaults-file '/etc/pxc3306.cnf' --defaults-group-suffix '' --binlog 'host-30-0-0-225-bin' --gtid 'bf26341f-43cb-11e8-a863-62c0eb4d9e79:654' --bypass)
2018-04-20T07:57:24.665844Z 13 [Note] WSREP: DONOR thread signaled with 0
2018-04-20T07:57:24.696526Z 0 [Note] WSREP: async IST sender starting to serve tcp://30.0.0.226:4568 sending 655-677
2018-04-20T07:57:25.632154Z WSREP_SST: [INFO] Bypassing SST. Can work it through IST
2018-04-20T07:57:25.675074Z 0 [Note] WSREP: 1.0 (pxc-node-0): State transfer to 0.0 (pxc-node-1) complete.

pxc 集群节点被kill -9 了拿什么拯救?的更多相关文章

  1. 记一次测试环境下PXC集群问题《经验总结》

    1.问题描述                  当PXC集群节点全部宕机的,导致集群几点启动失败.报错导致无法启动   [ERROR] WSREP: It may not be safe to boo ...

  2. docker PXC MYSQL集群节点启动失败/节点顺序消失/只剩一个节点存在问题的解决

    转载于:https://my.oschina.net/u/4884318/blog/4908669 大牛 佩服此人 截取本人遇到的问题: "error:0407008A:rsa routin ...

  3. KeepAlived+HaProxy+MyCat+Percona双机热备PXC集群

    一.搭建PXC集群 1.环境:centos7+PXC5.7.21+mycat1.6.5 2.卸载mariadb rpm -qa | grep mariadb* yum -y remove mariad ...

  4. 用6个案例说明如何恢复PXC集群

    原文链接:https://blog.csdn.net/zengxuewen2045/article/details/51868976 1.   案例一:三个节点,关闭一个 由于维护和配置变更等工作需要 ...

  5. Docker搭建MySQL的PXC集群

    原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...

  6. PXC集群的概述及搭建

    目录 PXC集群的概述及搭建 PXC集群的简介 PXC集群主要由两部分组成: PXC的特性和优点: PXC的局限和劣势: PXC原理描述 在Centos部署基于Mysql高可用方案操作过程 新增节点加 ...

  7. MySQL数据库高可用集群搭建-PXC集群部署

    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. PXC原理描述: 分布式 ...

  8. Akka(12): 分布式运算:Cluster-Singleton-让运算在集群节点中自动转移

    在很多应用场景中都会出现在系统中需要某类Actor的唯一实例(only instance).这个实例在集群环境中可能在任何一个节点上,但保证它是唯一的.Akka的Cluster-Singleton提供 ...

  9. 03中间件mycat对pxc集群的分片处理

    安装第二个pxc集群 作为mycat的第二个分片 直接拷贝其中的一个虚拟机,然后还原到最初的状态,这样会小很多,启动改一下IP和基础配置,然后再次拷贝这个虚拟机两份改IP重启即可 正常安装pxc集群即 ...

随机推荐

  1. Python 全栈开发十一 深浅拷贝

    深浅拷贝 深浅拷贝的前提: 相等和相同的关系 深浅拷贝针对的是列表等可变的数据类型. 深浅拷贝在普通的列表没有什么意义,只有在嵌套列表,或其他嵌套数据类型才有意义. a = "aaa&quo ...

  2. Windows 下MySql Replication(复制)配置

    环境准备 到官网下载mysql-installer-web-community-5.7.21.0.msi并安装,选择MySql Workbench,记录安装时root输入的密码. 需要安装在两台机器上 ...

  3. U盘复制文件到最后5秒会卡住怎么办解决

    现在的U盘容量已经非常大了,一般都有16G以上,为了能放单文件大于4G的数据大多数时候我们都是把U盘格式化为ntfs格式的,所以会出现不管是大文件还是小文件,当你往U盘里复制文件或者使用发送到U盘功能 ...

  4. Linux修改SSH登录端口

    Linux的默认登录端口为:22,为系统安全运维都会将端口改成其它端口. 假如我们修改的端口为:3000 1.首先要配置防火墙,允许此端口通行. /sbin/iptables -A INPUT -p ...

  5. cocos2dx - Lua 语言

    快捷注释: - -[[ print(10) - ->10  - - 不起作用(因为这是注释) - -]] 当重新启用这段代码时,只需在一次行行首添加一个连接字符即可: - - -[[ print ...

  6. 答案在哪里?action config/Interceptor/class/servlet

    项目已提测,这两天我们都集中精力梳理外包团队给我司研发的这个三方支付系统的代码逻辑.今天下午爱琴海会议室,开发组里一同学分享他对支付结果回调的梳理成果. 支付结果回调的整体时序是:支付渠道方处理完用户 ...

  7. Unity shader学习之逐顶点漫反射光照模型

    公式如下: Cdiffuse = Clight * mdiffuse * max(0, dot(n,l)); 其中,n 为表面法线,l 为指向光源的单位向量,mdiffuse 为材质温反射颜色,Cdi ...

  8. 15. 3Sum(字典)

    Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find ...

  9. UML之状态机图

    状态机图 基本概念: 状态机图,UML 1.x规范中称状态图,是一个展示状态机的图. 状态机图基本上就是一个状态机中元素的投影,这也就意味着状态机图包括状态机的所有特征.状态机图显示了一个对象如何根据 ...

  10. html5-css列表和表格

    td{    /*width: 150px;    height: 60px;*/    padding: 10px;    text-align: center;} table{     width ...