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 端配置启用半同步模式
#安装半同步插件
# 查看插件情况
# 打开半同步功能
# 查看半同步功能状态
在slave端开启半同步功能
# 查看半同步功能状态
# 重启 io 线程,半同步才能生效