1
半同步模式原理
1.
用户线程写入完成后
master
中的
dump
会把日志推送到
slave
端
2.slave
中的
io
线程接收后保存到
relaylog
中继日志
3.
保存完成后
slave
向
master
端返回
ack
4.
在未接受到
slave
的
ack
时
master
端时不做提交的,一直处于等待当收到
ack
后提交到存储引擎
5.
在
5.6
版本中用到的时
after_commit
模式,
after_commit
模式时先提交在等待
ack
返回后输出
ok
2.gtid
模式
当为启用
gtid
时我们要考虑的问题
- 在master端的写入时多用户读写,在slave端的复制时单线程日志回放,所以slave端一定会延迟与master端
- 这种延迟在slave端的延迟可能会不一致,当master挂掉后slave接管,一般会挑选一个和master延迟日志最接近的充当新的master
- 那么为接管master的主机继续充当slave角色并会指向到新的master上,作为其slave
- 这时候按照之前的配置我们需要知道新的master上的pos的id,但是我们无法确定新的master和slave之间差多少
当激活GITD之后
当master出现问题后,slave2和master的数据最接近,会被作为新的master
slave1指向新的master,但是他不会去检测新的master的pos id,只需要继续读取自己gtid_next即可
master主服务器设置gtid模式
在slave上:
启动slave
启用半同步模式
在
master
端配置启用半同步模式
#安装半同步插件
![](https://i-blog.csdnimg.cn/direct/8b1425e71fb641e6bb164dbd3c8ac641.png)
#
查看插件情况
#
打开半同步功能
#
查看半同步功能状态
在slave端开启半同步功能
#
查看半同步功能状态
#
重启
io
线程,半同步才能生效