当前位置: 首页 > news >正文

semi-sync原主库加入集群阻塞问题分析

问题现象

客户在一个一主两从的半同步复制环境下做了手工切换,然后尝试把原主库加入集群中,结果发现新集群中的数据一直无法同步到slave(原主库)中来,查看slave(原主库)同步状态,IO线程和SQL线程都是YES状态,但是Seconds_Behind_Master大于0.

查看show processlist状态, 发现SQL线程一直处于Waiting for semi-sync ACK from slave状态,可是这个slave(原主库)下已经没有从库了。为什么还需要等待slave返回的ACK呢?

问题分析

从SQL线程等待的的半同步问题出发,先查看semi-sync状态和设置

通过上面semi-sync的状态变量,可以发现semi-sync运行状态Rpl_semi_sync_master_status=ON、Rpl_semi_sync_slave_status=ON。这里最奇怪的是Rpl_semi_sync_master_status=ON。

根据半同步复制原理:主库发生数据变更写binlog,然后等待从库接收并返回ACK,最后在存储引擎层提交数据。这也就是为什么在从库(原主库)一直查不到新主库变更后的数据原因。在默认情况下,半同步复制只有在等待ACK超出 rpl_semi_sync_master_timeout设置的时间才会自动降为异步复制。

这里slave(原主库)被认为是半同步的master,但是没有从库连接他,所以一直在等待从库返回的ACK。等待的时间我们查看rpl_semi_sync_master_timeout变量取值

查看semi-sync参数发现从库同时开启了rpl_semi_sync_master_enabled=ON、rpl_semi_sync_slave_enabled=ON和rpl_semi_sync_master_timeout=10000000(1万秒,默认10000毫秒)。

客户竟然把rpl_semi_sync_master_timeout设置为10万秒,也就是说,原主库要等待1万秒才能自动变为异步并加入集群中同步数据,slave(原主库)无法从集群中继续同步数据的根本原因就在这里。

跟客户沟通后,客户之所以将rpl_semi_sync_master_timeout设置这么大的值,是强调数据强一致性,不希望在任何情况下半同步复制结构降为异步复制,最大限度保证数据一致性。

原理分析

前面涉及到几个semi-sync复制参数,可能有些同学不太了解,下面给大家简单讲解一下MySQL semi-sync 复制安装配置和原理。 在MySQL 5.7版本里如果要开启半同步复制,需要在master端安装semisync_master.so库并配置my.cnf

在slave端安装semisync_slave.so库并配置my.cnf

  • 在master端看到Rpl_semi_sync_master_status状态变量显示ON状态,就表示master进入半同步复制模式。
  • 此时,在slave端会看到Rpl_semi_sync_slave_status显示ON状态,也就表示slave进入半同步复制模式。

进入半同步复制,客户端在master每提交一个事务,master MySQL将对应事务写入binlog,然后等待slave返回的ACK,之后在存储引擎层提交,最后返回给客户端写入成功的消息。

如果slave没有返回,master将等待指定超时时间;超过超时时间后,会自动降为异步复制模式。

  • 如果master在超时时间内(rpl_semi_sync_master_timeout超时时间,默认10000毫秒)没有收到指定数量(rpl_semi_sync_master_wait_for_slave_count接收slave返回ACK数量,默认1)的slave的ACK回包,master自动降为异步复制模式。
  • 当半同步复制降为异步复制模式,在master端可以看到Rpl_semi_sync_master_status=OFF,在save端可以看到Rpl_semi_sync_slave_status=OFF。
  • 上述master等待行为都发生在rpl_semi_sync_master_wait_no_slave=ON(默认值)情况下。如果rpl_semi_sync_master_wait_no_slave设置为OFF时,连接master的slave的数量少于rpl_semi_sync_master_wait_for_slave_count设置的值,master不会等待超时,立刻自动降为异步复制模式。 建议

如果把rpl_semi_sync_master_timeout设置非常大,在主从切换时导致原主库加入集群时同步阻塞,建议把rpl_semi_sync_master_wait_no_slave=OFF。

http://www.jsqmd.com/news/307048/

相关文章:

  • VMware Workstation 17 Pro 破解版下载及安装使用教程
  • 2026年比较好的WCB微型齿轮油泵/YCB齿轮油泵厂家选择参考建议
  • 2026年知名的颗粒饲料/畜禽饲料厂家选购完整指南
  • 2026年口碑好的看台膜结构车棚/停车场膜结构车棚厂家信誉综合参考
  • Kylin V11 实战:PostgreSQL 18 容器化部署,别再被参数坑了
  • 巴豆酰化如何重塑对组蛋白修饰与转录调控的认知?
  • 杰理之会出现明显延时出声音【篇】
  • 杰理之增加llns 到 混响数据流中【篇】
  • 杰理之四路IIS输入输出【篇】
  • 杰理之上位机读取请求【篇】
  • 不再被设备和网络束缚✨VSCode+WSL+cpolar 让开发环境随身走
  • GitHub 热榜项目 - 日榜(2026-01-27)
  • 2026年评价高的潍坊膜结构/气膜结构优质供应商推荐参考
  • 2026年比较好的系统/专业扩声系统高口碑产品榜
  • 【万字长文】大模型应用开发:意图路由与查询重写设计模式(从入门到精通) - 实践
  • 《把脉行业与技术趋势》-107-科学于不确定中求规律,工程以确定方法实现目标,生产靠标准流程确保产品一致。三者层层递进,共筑技术从认知到落地的完整链条。
  • 2026年靠谱的电感器/复合功率电感器厂家推荐与采购指南
  • 2026年评价高的EPEF电流互感变压器/PCB变压器用户口碑认可参考(高评价)
  • 2026年福建汽车托运公司权威推荐:商品车托运 /铁路托运汽车 /火车托运汽车/车拉车托运/物流托运甄选指南
  • 笔记本电脑待机、睡眠与休眠模式的手艺差异解析
  • 飞行器设计生成式模型专栏正式发布 | 航空学报
  • 基于PHP、asp.net、java、Springboot、SSM、vue3的可视化流量统计分析系统的设计与实现
  • 2026年懂车帝负面厦门公关/事件公关行业权威榜
  • 2026年口碑好的阵列中低频扬声器/同轴吸顶扬声器人气实力厂商推荐
  • 2026年知名的公路挂篮/架桥机挂篮热门厂家推荐汇总
  • 很多工厂说“巡检做得挺顺”,但真正合格的巡检到底长什么样?
  • 详细介绍:ProcDump 学习笔记(6.9):MiniPlus 转储(-mp)——轻量却够用的现场证据
  • 2026年质量好的汽车扎带/尼龙扎带厂家实力与用户口碑参考
  • 2026年口碑好的重庆不锈钢雕塑/重庆铸铜雕塑厂家选择参考建议
  • 深入 Maven:从仓库配置到私服架构的进阶实践 - 指南