mysql cluster 宕机_MySQL InnDB Cluster 排错--dba.rejoinInstance()失败
最近在使用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()失败相关推荐
- 记一次 Redis Cluster 宕机引发的事故
关注我们,获得更多资源 导读: Redis官方号称支持并发11万读操作,并发8万写操作.由于优异的性能和方便的操作,相信很多人都在项目中都使用了Redis,为了不让应用过分的依赖 Redis服务,Re ...
- Redis Cluster 宕机引发的事故
导读: Redis官方号称支持并发11万读操作,并发8万写操作.由于优异的性能和方便的操作,相信很多人都在项目中都使用了Redis,为了不让应用过分的依赖 Redis服务,Redis的作用只作为提升应 ...
- mysql in 宕机_一条SQL引起的mysql宕机
背 景 MySQL引入了Materialization(物化)这一关键特性用于子查询(比如在IN/NOTIN子查询以及 FROM子查询)优化,其关键点在于对子查询只需要执行一次.具体实现方式为: 在 ...
- mysql cluster 宕机 恢复_mysql cluster 集群恢复不起来,还请大神赐教?报错-问答-阿里云开发者社区-阿里云...
mysql cluster 集群原本使用的几乎全是内存表,后来随着数据的增长,把大的内存表迁移到磁盘表了,之后集群出现6050错误,整个集群挂掉:之后重新启动集群一直启动不起来... ----以下是集 ...
- mysql主库宕机能写吗_MYSQL主主切换(主库宕机)_MySQL
bitsCN.com MYSQL主主切换(主库宕机) 将主主(3307写--3308读)切换 前提:3307宕机 一.修改配置文件.命令行操作 vim /home/bbq/mysql/mysql-33 ...
- 初探mysql innodb集群_MySQL InnoDB Cluster搭建
MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, Galera Cluster, InnoDB Cluste ...
- mysql 主从宕机切换_mysql主从复制配置操作以及主从宕机切换演练
主从复制目的: 主从服务器设置的稳健性得以提升,如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器.在主从服务器上分开处理用户的请求,读的话,可以直接读取备机数据,可获得更短的响应时 ...
- mysql主从 主机宕机_MySQL主从宕机的解决方法
测试系统:centos6.5系统 测试环境IP地址划分: master: 192.168.80.130 slave:192.168.80.143 slave:192.168.80.146 首先模拟(M ...
- MySQL MGR 宕机后如何开启复制
MGR宕机后的重启,分两种情况 整个MGR集群宕机 1.首先将所有实例开启,例如 mysqld_safe --defaults-file=/etc/my.cnf1 --user=mysql & ...
最新文章
- 端子排怎么生成_防雷接地图纸怎么看?
- Waymo起诉加州车管所,要求对无人车事故数据保密,网友:这事怕不是和特斯拉有关...
- oracle 选择最频繁出现之前,5文章数据
- java的自动装配是什么意思_java – 什么时候在Spring中使用自动装配
- CodeForces - 475B Strongly Connected City(最短路+判断强联通图/思维)
- php 容器实现,PHP 依赖注入容器实现
- 深入了解React组件重新渲染的条件和生命周期
- Servlet第三篇【request和response简介、response的常见应用】
- ASP.Net2.0小技巧 保持滚动条的位置 焦点移动到某个控件 $符号轻松的使用FindControl...
- 理想化的 Redis 集群
- 华为交换机web界面配置
- mysql数据比较工具_mysql主从数据对比工具简介
- VS2017+海康威视工业相机调用查找不到设备的问题
- 模拟登录幸运抽奖(java)
- 就业培训 | 2020第一期重庆高校毕业生大数据职业技能线上特训营开课啦
- 浮生若梦,静如止水,不问情意,只愿你安好
- nlp-with-transformers系列-03_剖析transformers模型
- Laravel Excel(maatwebsite/excel )导入
- Android源码-高质量开发库
- 什么是爬电距离?宽爬电距离光耦为什么越来越受大家青睐?