mysql5.7 开启增强半同步复制
前提是主从异步复制环境要提前搭建好,然后再开启mysql增强半同步
环境:mysql5.7.26 主从异步复制早已部署好。
1.加载plugin插件
建议master和slave上全部执行(考虑到MHA的主从自动切换的环境)
在主库安装semisync_master.so和semisync_slave.so插件:
linux服务器上的master库执行:
linux服务器上的slave库执行:
提示:slave上增强半同步的插件已经存在,所以报错。
原因:master上安装增强半同步的插件后自动同步到了slave库上
2.slave和master开启增强半同步参数
生产环境上建议先在slave库上的开启 增强半同步参数
此刻观察master的错误日志:提示开启了Semi-sync replication 复制
然后master上再开启增强半同步参数
3.MySQL官网配置方法
官方要求master和slave的/etc/my.cnf要开启下面的参数:
重启master和slave数据库。
4.实际生产环境配置方法
当然实际操作中还是不建议把参数rpl_semi_sync_master_enabled 和rpl_semi_sync_slave_enabled 直接写入配置文件的。
原因:把参数加入my.cnf配置文件时,在slave库挂掉,重新开启slave库或者是slave库重启后,会自动开启增强半同步复制。
如果在slave库断开master库时间较长时,最好是先开启mysql异步复制,让slave库追赶上master库后,然后再开启增强半同步复制。这样不会拖垮master库。要是直接开启增强半同步复制是会拖垮主库的。
rpl_semi_sync_master_timeout =1000 ##1s 这个转化为异步复制的超时参数是可以写入配置文件的。
5.演示增强半同步超时被关闭
演示增强半同步复制超过设定的时间被关闭:
在master上设置超时时间
在slave上停止io_thread 线程
然后在master库上删除一个测试库来演示增强半同步关闭:
在卡盾的20s期间,在master库上执行show proccesslist,发现这期间,master库一直在等待slave的 semi-sync 的ack的响应:
此时查看master库的错误日志关闭了增强半同步复制:
当超过master库上设定的20s超时时间后,增强半同步复制被关闭了。Waiting for semi-sync ACK from slave 消失
接着在master上删除test01库时不再出现卡盾,说明增强半同步复制已经被关闭了
mysql> drop database test01;
Query OK, 2 rows affected (0.00 sec)
此时在maser查看当前增强半同步复制中有几个slave client,发现已没有client链接
在slave上开启 io_thread
查看master库上的错误日志:
提示增强半同步有开启了。
master 查看半同步链接状态新增了1个:
6.观察master库错误日志的变化
6.1 slave库关闭io 线程,再关闭半同步复制,然后再开启 slave 的io_thread线程
此刻观察master库的错误日志:
6.2 slave库关闭io 线程,等待20s后然后再关闭半同步复制,然后再开启 slave 的io_thread线程
此刻观察master库的错误日志:
发现6.1和6.2的错误日志还是有不同的地方的
7.案例
当线上运行的MySQL增强半同步复制架构中,当其中的一台slave库挂掉了应该如何正确重新添加到原先的增强半同步复制架构??
正确的做法如下:
演示到此处,欢迎留言一起交流学习。