半同步复制原理
- 客户端提交相关操作
- 主服务器产生bin_log日志,通知从服务器来拿
- 从服务器去拿的时候,主服务器sync刷新到磁盘,同时进行commit操作,发送ack请求
- 从服务器拿到并写入自己的relay log,发送ack信息
- 主服务器接收到ack信息后将结果返回给客户端
半同步复制的好处在于,他能够避免数据丢失,减少延迟。
如果主服务器发送ack请求10s之后从服务器没有发送ack信息,半同步就失败了,master会启用异步模式。
实现半同步复制步骤
参考MySQL官方地址:
https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html
1、在master上安装配置半同步的插件
install plugin rpl_semi_sync_master soname 'semisync_master.so';
2、在master上设置超时时间为1秒
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 1;
在配置文件中修改,永久生效
vim /etc/my.cnf
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
修改配置文件之后要刷新mysql服务
service mysqld restart
3、在slave上安装配置半同步的插件
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
4、在slave中
set global rpl_semi_sync_slave_enabled=1;
在配置文件中修改,永久生效
vim /etc/my.cnf
[mysqld]
rpl_semi_sync_slave_enabled=1;
刷新mysql服务
service mysqld restart
5、在master和slave上执行以下语句查看是否激活半同步
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%semi%';
如果显示未active则表示已成功激活半同步
root@(none) 21:20 mysql>SELECT PLUGIN_NAME, PLUGIN_STATUS
-> FROM INFORMATION_SCHEMA.PLUGINS
-> WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
+----------------------+---------------+
1 row in set (0.03 sec)