首页 > 其他分享 >semi-sync原主库加入集群阻塞问题分析

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

时间:2024-09-27 08:53:41浏览次数:8  
标签:slave semi sync 复制 master 原主 rpl

问题现象

客户在一个一主两从的半同步复制环境下做了手工切换,然后尝试把原主库加入集群中,结果发现新集群中的数据一直无法同步到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。

标签:slave,semi,sync,复制,master,原主,rpl
From: https://www.cnblogs.com/gdjgs/p/18434934

相关文章

  • 一篇文章讲清楚synchronized关键字的作用及原理
    概述在应用Sychronized关键字时需要把握如下注意点:一把锁只能同时被一个线程获取,没有获得锁的线程只能等待;每个实例都对应有自己的一把锁(this),不同实例之间互不影响;例外:锁对象是*.class以及synchronized修饰的是static方法的时候,所有对象公用同一把锁synchronized修饰......
  • Don't Block on Async Code 不要阻止异步代码
    翻译自 Don'tBlockonAsyncCode(stephencleary.com)ThisisaproblemthatisbroughtuprepeatedlyontheforumsandStackOverflow.Ithinkit’sthemost-askedquestionbyasyncnewcomersoncethey’velearnedthebasics.这是论坛和StackOverflow上反复......
  • MT5016A-ASEMI三相整流桥MT5016A
    编辑:llMT5016A-ASEMI三相整流桥MT5016A型号:MT5016A品牌:ASEMI封装:D-63批号:2024+类型:三相整流桥电流(ID):50A电压(VF):1600V安装方式:直插式封装特性:大功率、整流方桥产品引线数量:4产品内部芯片个数:4产品内部芯片尺寸:MIL工作结温:-55℃~150℃功率:大功率包装方式:500/盒:3000/箱MT5016A应用领......
  • MT5016A-ASEMI三相整流桥MT5016A
    编辑:llMT5016A-ASEMI三相整流桥MT5016A型号:MT5016A品牌:ASEMI封装:D-63批号:2024+类型:三相整流桥电流(ID):50A电压(VF):1600V安装方式:直插式封装特性:大功率、整流方桥产品引线数量:4产品内部芯片个数:4产品内部芯片尺寸:MIL工作结温:-55℃~150℃功率:大功率包装方式:500/盒:3000......
  • 36MT160-ASEMI三相电机专用36MT160
    编辑:ll36MT160-ASEMI三相电机专用36MT160型号:36MT160品牌:ASEMI封装:D-63批号:2024+分类:整流桥特性:整流方桥、三相整流桥平均正向整流电流(Id):35A最大反向击穿电压(VRM):1600V恢复时间:>2000ns结温:-55℃~150℃正向峰值电压:1.10V引脚数量:4芯片个数:4芯片尺寸:MIL36MT160特点芯片与底板电气绝缘真......
  • 36MT160-ASEMI三相电机专用36MT160
    编辑:ll36MT160-ASEMI三相电机专用36MT160型号:36MT160品牌:ASEMI封装:D-63批号:2024+分类:整流桥特性:整流方桥、三相整流桥平均正向整流电流(Id):35A最大反向击穿电压(VRM):1600V恢复时间:>2000ns结温:-55℃~150℃正向峰值电压:1.10V引脚数量:4芯片个数:4芯片尺寸:MIL36MT160特点芯......
  • Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF
    一、问题描述 Redis日志:2110:M24Apr02:01:02.058*AsynchronousAOFfsyncistakingtoolong(diskisbusy?).WritingtheAOFbufferwithoutwaitingforfsynctocomplete,thismayslowdownRedis.2110:M24Apr02:01:12.862#Connectionwithslaveclientid......
  • PostSync介绍
    PostSync促进技术文章发展介绍这是一个开源的同步文章的软件,你可以使用它来同步你的文章到多个平台。使用打开浏览器,登录各个平台的账号,掘金、CSDN、知乎、公众号、哔哩哔哩、博客园、个人WordPress打开config.yaml文件,配置你的浏览器信息以及浏览器用户数据目录运行命......
  • sersync+rsync实现服务器文件实时同步
    sersync+rsync实现服务器文件实时同步一、为什么要用rsync+sersync架构?1、sersync是基于inotify开发的,类似于inotify-tools的工具2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用r......
  • rsync+inotfiy文件同步
    rsync+inotfiy文件同步1.部署rsync服务yuminstallrsync#安装rsync,如果嫌yum版本过低也可以源码安装2.vim/etc/rsyncd.conf#默认rsync没有配置文件,创建一个,文件中#和汉字仅为注释,使用中请将所有注释清除......