暂无图片
mysql mgr 一节点状态始终是RECOVERING,但是同步正常
我来答
分享
StartupForce
2020-12-08
mysql mgr 一节点状态始终是RECOVERING,但是同步正常

环境

mgrb01和mgrb02在ubuntu20.4 docker容器上
mgrb03在一个虚拟机上centos 8.2.2004
数据库软件为8.0.22

现象

  1. mgrb03再加入集群后一直处于RECOVERING状态
root@172.20.3.11:3308 : (none) : 10:54:19>SELECT * FROM performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 3661b76a-38f7-11eb-9d7a-0242ac1e000a | mgrb01 | 3308 | ONLINE | SECONDARY | 8.0.22 | | group_replication_applier | 4ced7a3e-38fa-11eb-bcc5-0242ac10000a | mgrb02 | 3308 | ONLINE | PRIMARY | 8.0.22 | | group_replication_applier | eda990af-1e5c-11eb-9895-00155d011502 | mgrb03 | 3306 | RECOVERING | SECONDARY | 8.0.22 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
复制
  1. 数据同步正常,mgrb02是primary,上面的一切操作都同步到mgrb03了,show master status看到的Executed_Gtid_Set都是一致的
  2. mgrb03的error日志中没有报错,其余两节点error日志也没报错
  3. 主动将master角色的mgrb02停止后,mgrb03的状态变为online
  4. 对比了下日志,发下mgrb03刚加入组的时候日志中少了一句:This server was declared online within the replication group,此时才出现这个日志
2020-12-08T03:03:45.197782Z 0 [Warning] [MY-011499] [Repl] Plugin group_replication reported: 'Members removed from the group: mgrb02:3308'
2020-12-08T03:03:45.197800Z 0 [System] [MY-011500] [Repl] Plugin group_replication reported: 'Primary server with address mgrb02:3308 left the group. Electing new Primary.'
2020-12-08T03:03:45.197883Z 0 [System] [MY-011507] [Repl] Plugin group_replication reported: 'A new primary with address mgrb01:3308 was elected. The new primary will execute all previous group transactions before allowing writes.'
2020-12-08T03:03:45.198100Z 0 [System] [MY-011503] [Repl] Plugin group_replication reported: 'Group membership changed to mgrb01:3308, mgrb03:3306 on view 16073947051824521:6.'
2020-12-08T03:03:45.198962Z 0 [System] [MY-011490] [Repl] Plugin group_replication reported: 'This server was declared online within the replication group.'
2020-12-08T03:03:46.916812Z 36 [System] [MY-011511] [Repl] Plugin group_replication reported: 'This server is working as secondary member with primary member address mgrb01:3308.'
复制
我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
春去秋来

有2钟办法解决
1.将集群的所有主机名都加入到/etc/hosts文件里
2.设置参数report_host=192.168.112.135
report_port=3309

暂无图片 评论
暂无图片 有用 0
打赏 0
StartupForce

我设置了/etc/hosts解析的 ,不然他会报错连接不上3306端口。现在是没有报错。把master主动 停止后就恢复了,感觉是view没更新成功。

暂无图片 评论
暂无图片 有用 0
打赏 0
始于脚下

"主动将master角色的mgrb02停止后,mgrb03的状态变为online"你这个操作之后,你再起mgrb02呢?三个节点都是什么状态?

暂无图片 评论
暂无图片 有用 0
打赏 0
StartupForce

我用netstat看了下网络情况,发现我虚拟机mgrb03上指定的group_replication_group_seeds是docker实体机的地址,但是他实际连接了docker容器内的地址,显示是没有连接通的。但是集群又偶尔能 加入 进去,这应该 就是网络问题导致。docker与虚拟机混用网络可能复杂了点

暂无图片 评论
暂无图片 有用 0
打赏 0
StartupForce

mgrb03 参数:

group_replication_local_address= "172.1.1.226:33061"
group_replication_group_seeds= "172.20.3.13:33081,172.20.3.11:33081,172.1.1.226:33061"

复制

mgrb03 netstat结果:复制还连接的是SECONDARY角色的mgrb01

tcp        0      1 172.1.1.226:49624       172.16.0.10:33081       SYN_SENT   <----
tcp        0      0 172.1.1.226:33976       172.1.1.226:33061       ESTABLISHED
tcp        0      0 172.1.1.226:53268       172.20.3.13:3308        ESTABLISHED
tcp        0      1 172.1.1.226:48736       172.30.0.10:33081       SYN_SENT   <----
tcp6       0      0 172.1.1.226:33061       172.1.1.226:33976       ESTABLISHED
tcp6       0      0 172.1.1.226:33061       172.20.3.11:51952       ESTABLISHED<----
tcp6       0      0 172.1.1.226:3306        172.1.1.145:39326       ESTABLISHED
tcp6       0      0 172.1.1.226:33061       172.18.2.10:51752       ESTABLISHED<----

复制

docker容器网络映射关系如下:

172.16.0.10:33081 --> 172.20.3.11:33081
172.30.0.10:33081 --> 172.20.3.13:33081
172.18.2.10跟172.20.3.13在同一个机器,映射的0.0.0.0:33081

复制

mgrb01参数:容器与容器之间用的容器内部ip通信

group_replication_local_address= "172.30.0.10:33081"
group_replication_group_seeds= "172.30.0.10:33081,172.16.0.10:33081,172.1.1.226:33061"

复制

mgrb02参数:容器与容器之间用的容器内部ip通信

group_replication_local_address= "172.16.0.10:33081"
group_replication_group_seeds= "172.30.0.10:33081,172.16.0.10:33081,172.1.1.226:33061"
复制
暂无图片 评论
暂无图片 有用 0
打赏 0
StartupForce

将参数group_replication_local_address,group_replication_group_seeds都改成主机名模式就没问题了,奇怪,不能指定ip么
group_replication_local_address= “mgrb03:33061”
group_replication_group_seeds= “mgrb01:33081,mgrb02:33081,mgrb03:33061”

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
mysql innodb cluster对server、shell、router版本有要求吗
回答 1
server和router版本一致就行(router8.0.3之后与server一致,2.1.x分支被8.0.x取代);shell版本时间晚于server和router就行,一般shell就用较新版本
有没有关于mysql json的资料?官网的比较难理解
回答 1
已采纳
https://www.modb.pro/db/1692011734424961024
mysql如何获取分区表中,时间分区的上线?
回答 1
SELECTPARTITIONNAME,PARTITIONDESCRIPTIONFROMinformationschema.PARTITIONSWHERETABLESCHEMA'yourdatabas
开源的mysql监控软件哪个好?
回答 2
恩墨的白求恩还不错
MySQL服务器意外宕机
回答 3
已采纳
memohere:7ff7e2a03ef2mysqld.exe!myerrno()7ff93131ec9dMSVCR120.dll!raise()7ff931324874MSVCR120.dll!ab
slowlog,general log 如何按天切割?
回答 1
MySQL本身没有提供内置的按天切割slowlog和generallog的功能,只能通过其他第三方的工具或自己写脚本来实现。另外一个思路:可以考虑将慢查询日志写入到表中,而不是写入到日志文件中,写入到
关于mysql不支持dml语句的子查询包含其本身的原因
回答 4
先说MyISAM和InnoDB的问题.这个&quot;网上&quot;的说法本身就是错误的,所以必然无法复现.MyISAM是非事务存储引擎,每次写入都会有表级别的排他锁,不会涉及这些可见性问题,而In
现在公司一般用的是哪个版本?
回答 4
已采纳
目前,MySQL5.7和8.x版本都是比较常见的版本。但是,不同的公司可能会使用不同的版本,具体取决于公司的业务需求和技术架构。相对来说新兴企业8.x
mysql的索引有几种了的?想不起来了
回答 2
已采纳
btree/hash
使用docker+docker-compose部署+nginx+redis+mysql,要怎么安装和怎么统一规范下挂载目录以及相关设置?
回答 1
主要是对nginx的配置文件、redis的配置和数据文件,mysql的my.cnf和数据文件做持久化,然后dockercompose中做好启动顺序的编排即可。