转载请务必保留超链接:原文链接
本次实验环境介绍:
说明 IP MySQL版本 PORT
Master 192.168.1.23 MySQL 5.7.19 3306
Slave 192.168.1.24 MySQL 5.7.19 3306
一、增强半同步AFTER_SYNC的工作机制如图(这张图片来自“知数堂”):
![](https://img.haomeiwen.com/i9022818/76b40c96a9aff80d.jpg)
从上图得知,增强半同步的工作机制如下:
1、客户端向master发送请求
2、MySQL服务器解析SQL
3、写入redo
4、写入Binary log
5、等待Slave ACK应答
6、Master 提交事务, 同时实现复制
7、返回结果给客户端
二、如何搭建增强半同步复制?
执行 show plugins; 查看增强半同步复制的(rpl_semi_sync_master 和 rpl_semi_sync_slave)插件是否已经安装,如果没有安装,请先安装插件。下面是我的安装步骤:
1、安装插件
Master:
mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
Slave:
mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
通过执行 show plugins; 如下图, 可以看到 rpl_semi_sync_master 和 rpl_semi_sync_slave 插件已经安装。
![](https://img.haomeiwen.com/i9022818/b154681a578775d6.jpg)
2、在Master和Slave 的 mysqld 配置文件 添加参数
![](https://img.haomeiwen.com/i9022818/66330ce902887d8f.png)
或者修改通过 set 设置参数,如下所示:
set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_master_timeout=1000;
set global rpl_semi_sync_slave_enabled=1;
注: 在 mysqld 添加半同步复制参数后需要重启;
3、做同步
Master:
grant all privileges on *.* to 'semisync'@'192.168.1.%' identified by '123456abc';
flush privileges;
Slave:
change master to master_host='192.168.1.23',master_port=3306,master_user='semisync',master_password='123456abc',master_auto_position=1;
start slave;
show slave status\G; //查看复制情况
4、 如何确认是同步还是半同步?
从Master和Slave上看:
show global variables like '%semi%';
![](https://img.haomeiwen.com/i9022818/6f3cd0d9f85f133b.png)
5、监控
从Master上看:
show global status like '%semi%';
![](https://img.haomeiwen.com/i9022818/f11f843910cb67d8.png)
其中各个参数的备注如下:
![](https://img.haomeiwen.com/i9022818/1104f79ecdadbcb1.png)
Rpl_semi_sync_master_no_tx | 21| 表示库未及时响应的事务数,如果这个值很大可能就会有问题。当然,也有其它的原因,如下图,在增强半同步复制的场景中新增6个事物,可以发现都是 Rpl_semi_sync_master_no_tx 的值都是21, 说明在这之前不是用增强半同步复制。
![](https://img.haomeiwen.com/i9022818/6975a4e889038c90.png)
三、补充:
1、 Master接收到N个Slave应答后,才Commit事务,可以设置应答的Slave数量(默认是1, MySQL5.7半同步新增特性);在Master上操作:
mysql > set global rpl_semi_sync_trx_master_wait_for_slave_count=2;
2、增强半同步场景下,会不会存在主从延迟?
会,只是 sql_thread 延迟。
网友评论