半同步优化的是Io线程
如果需要永久固定写入到/etc/my.cnf即可
确保开机自启动即可
server1:
在master端装载模块,show plugins;
server2、3:
在slave端装载模块
server1:
可以看见它的超时时间是10s,工作模式是AFTER_SYNC
生产环境建议超时时间设置无穷大
server2、3:
变量打开了
状态还没有打开,slave还没有激活
AFTER_SYNC是由io线程控制的,这个时候需要重启一下Io线程
server3操作同理
server1:
server1:
第一个红框是不是通过半同步方式(异步)完成的事件
第二个红框是通过半同步的方式完成的事件
server2、3:
把server2的io停掉
server1:
因为是a->b a->c,尽管server2关闭了,但是还有server3
所以它还是半同步复制
server3:
server2:
server1:
master认为只要有一个slave和我同步就行了
但是我们需要每个服务器都要是半同步,这样才能确保数据的一致性
需要设置参数,这个表示master要等待多少个slave,该数字和后端slave节点数量保持一致
客户端卡住了
server3数据同步了,server2没有,master在等待server2的ack,server2发送ack后,客户端才能写(或者过了设置的时间,没有设置时间,默认是10s变成异步模式)
等待10s后
这样的话,数据就不一致了
END