最近在使用MySQL InnoDB Cluster中,遇到了一个比较大的问题。

问题背景:

在运行一个cluster中,其物理架构如下:

为了体验如何从整个cluster宕机到恢复的过程,本人手动将5台虚拟机直接关机,模拟物理断电下的cluster宕机场景。

问题描述

关闭所有机器后,手动重启整个cluster中的每一个server。这个时候我们需要重启整一个cluster。这一个在mysql shell 提供了对应的API。我们在mysql shell 重启整个cluster。shell> mysqlsh --log-level=DEBUG3

MySQL JS> shell.connect('root@vm000')

MySQL JS> let cluster = dba.rebootClusterFromCompleteOutage('cluster_name')

MySQL JS> cluster.status()

执行完以上命令后,我们使用cluster.status()查看,会发现secondary机器会处于RECOVERING状态,然后有一些机器有时候就能从RECOVERING状态转换到ONLINE状态。但是有一些机器会从RECOVERING状态转换成MISSING状态。

图中vm000 处于ONLINE状态,vm001处于RECOVERING状态,vm002、vm003、vm004均处于MISSING状态。

处于MISSING状态,一般是机器在线,但是因为数据同步出现错误而导致了MISSING状态。这个时候我们根据官方的mysql shell APIMySQL JS> cluster.rejoinInstance('root@vm001')

这个时候vm001会再次处于RECOVERING状态。cluster.status()

但是vm001、vm002、vm003、vm004在经过多次的cluster.rejoinInstance('root@vm001')、cluster.rejoinInstance('root@vm002')、cluster.rejoinInstance('root@vm003')、cluster.rejoinInstance('root@vm004')之后仍然会从RECOVERING状态转换到MISSING状态。

server加入cluster失败一直处于MISSING状态,导致该问题的原因是什么?解决该问题的方案又是什么?

解决过程导致该问题的原因?

解决该问题的方案?

因为以往我也曾经遇到过这个问题,因为vm000中的事务要远多于vm001、vm002、vm003、vm004,导致在RECOVERING过程中有时候网络抖动也会导致MISSING状态。我们使用cluster.rejoinInstance('root@vm001')几次后肯定能ONLINE。所以我一开始了rejoin了好几次,但是均失败了,这个时候我肯定不是我先前遇到过的那种情况。

这个时候我们打开MySQL的error log. 我们可以看到以下信息:

里面有几行引起了我的注意:

[ERROR] [MY-011574] [Repl] Plugin group_replication reported: 'Maximum number of retries when trying to connect to a donor reached. Aborting group replication recovery.'

这一句告知我们为什么每次RECOVERING一段时间之后就会变成MISSING状态,因为RECOVERING过程根本就没有完成,一开始连接建立时就已经失败了。

[ERROR] [MY-010584] [Repl] Slave I/O for channel 'group_replication_recovery': error connecting to master 'mysql_innodb_cluster_r1719717232@vm000:3306' - retry-time: 60 retries: 1, Error_code: MY-001045

我们可以通过这个猜测vm001连接vm000的过程出现了问题。

[ERROR] [MY-011582] [Repl] Plugin group_replication reported: 'There was an error when connecting to the donor server. Pleasecheck that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable.'

这一行报错帮我们推测了两种可能:DNS出现问题。这个时候我在每台机器上ping了整个cluster的每一台server,均是正常响应。所以排除DNS问题。

group_replication_recovery channel credentials 这个困扰到我了,我一直不知道Group Replication 通信过程还有使用什么证书之类的东西。后面在mysql community 的 slack跟MySQL 的开发者 lefred交流后才知道问题确实时出现在这里(此处要感谢lefred耐心的指导)。

所以到这里,根据报错信息我们可以推断在cluster的机器在突然宕机的情况下,可能会造成一些credentials丢失,导致在建立replication recovery channel 失败。导致我们rejoin的时候出现总是从RECOVERING转换到MISSING的问题。

解决问题

那我们如何解决这个问题?因为现在大部分server处于MISSING,导致我们没有办法使用cluster.removeInstance('root@vm001'),因为Paxos需要超过一半以上的server来投票。这样直接remove会报错。

在这种情况下,我们可以通过以下方法来解决:MySQL JS> cluster.removeInstance('root@vm001', {force: true})

MySQL JS>cluster.addInstance('root@vm001')

通过这个方法,cluster会自动更新相关的credentials信息,这样cluster内部的server就可以建立连接。

最终vm001可以重新ONLINE。vm002、vm003、vm004按照同样的解决方案操作一遍就可以解决问题,让整个cluster重新全部ONLINE。

对于credentials究竟是什么,建立replication recovery channel的过程中,这个credentials是怎么用的?我还没有弄清楚。如果有大佬已经知道了,还麻烦告诉我一声,万分感谢。

mysql cluster 宕机_MySQL InnDB Cluster 排错--dba.rejoinInstance()失败相关推荐

  1. 记一次 Redis Cluster 宕机引发的事故

    关注我们,获得更多资源 导读: Redis官方号称支持并发11万读操作,并发8万写操作.由于优异的性能和方便的操作,相信很多人都在项目中都使用了Redis,为了不让应用过分的依赖 Redis服务,Re ...

  2. Redis Cluster 宕机引发的事故

    导读: Redis官方号称支持并发11万读操作,并发8万写操作.由于优异的性能和方便的操作,相信很多人都在项目中都使用了Redis,为了不让应用过分的依赖 Redis服务,Redis的作用只作为提升应 ...

  3. mysql in 宕机_一条SQL引起的mysql宕机

    背  景 MySQL引入了Materialization(物化)这一关键特性用于子查询(比如在IN/NOTIN子查询以及 FROM子查询)优化,其关键点在于对子查询只需要执行一次.具体实现方式为: 在 ...

  4. mysql cluster 宕机 恢复_mysql cluster 集群恢复不起来,还请大神赐教?报错-问答-阿里云开发者社区-阿里云...

    mysql cluster 集群原本使用的几乎全是内存表,后来随着数据的增长,把大的内存表迁移到磁盘表了,之后集群出现6050错误,整个集群挂掉:之后重新启动集群一直启动不起来... ----以下是集 ...

  5. mysql主库宕机能写吗_MYSQL主主切换(主库宕机)_MySQL

    bitsCN.com MYSQL主主切换(主库宕机) 将主主(3307写--3308读)切换 前提:3307宕机 一.修改配置文件.命令行操作 vim /home/bbq/mysql/mysql-33 ...

  6. 初探mysql innodb集群_MySQL InnoDB Cluster搭建

    MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, Galera Cluster, InnoDB Cluste ...

  7. mysql 主从宕机切换_mysql主从复制配置操作以及主从宕机切换演练

    主从复制目的: 主从服务器设置的稳健性得以提升,如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器.在主从服务器上分开处理用户的请求,读的话,可以直接读取备机数据,可获得更短的响应时 ...

  8. mysql主从 主机宕机_MySQL主从宕机的解决方法

    测试系统:centos6.5系统 测试环境IP地址划分: master: 192.168.80.130 slave:192.168.80.143 slave:192.168.80.146 首先模拟(M ...

  9. MySQL MGR 宕机后如何开启复制

    MGR宕机后的重启,分两种情况 整个MGR集群宕机 1.首先将所有实例开启,例如 mysqld_safe --defaults-file=/etc/my.cnf1 --user=mysql & ...

最新文章

  1. 端子排怎么生成_防雷接地图纸怎么看?
  2. Waymo起诉加州车管所,要求对无人车事故数据保密,网友:这事怕不是和特斯拉有关...
  3. oracle 选择最频繁出现之前,5文章数据
  4. java的自动装配是什么意思_java – 什么时候在Spring中使用自动装配
  5. CodeForces - 475B Strongly Connected City(最短路+判断强联通图/思维)
  6. php 容器实现,PHP 依赖注入容器实现
  7. 深入了解React组件重新渲染的条件和生命周期
  8. Servlet第三篇【request和response简介、response的常见应用】
  9. ASP.Net2.0小技巧 保持滚动条的位置 焦点移动到某个控件 $符号轻松的使用FindControl...
  10. 理想化的 Redis 集群
  11. 华为交换机web界面配置
  12. mysql数据比较工具_mysql主从数据对比工具简介
  13. VS2017+海康威视工业相机调用查找不到设备的问题
  14. 模拟登录幸运抽奖(java)
  15. 就业培训 | 2020第一期重庆高校毕业生大数据职业技能线上特训营开课啦
  16. 浮生若梦,静如止水,不问情意,只愿你安好
  17. nlp-with-transformers系列-03_剖析transformers模型
  18. Laravel Excel(maatwebsite/excel )导入
  19. Android源码-高质量开发库
  20. 什么是爬电距离?宽爬电距离光耦为什么越来越受大家青睐?

热门文章

  1. 二年级数学计算机教学教案,最新人教版二年级下册数学全册教案.doc
  2. 北斗授时与GPS授时的异同点
  3. Shell自动化脚本学习
  4. 跳点搜索算法JPS及其优化(万字长文)
  5. 网络协议与网络传输相关知识
  6. oracle分区表加索引,oracle分区表增加索引
  7. 硬件在环(HIL)仿真方案
  8. 每个程序都应该读的非编程书
  9. 【免费送书】《疯狂Spring Boot终极讲义》
  10. tfs java_ALM TFS/VSTS工具 的Java集成