半同步复制解决的问题:
如果做读写分离,master insert进数据,由于其他问题,导致slave复制延迟。
异步模式,master insert进入数据,就返回给业务正常。
半同步模式 , master insert进入数据,slave更新后,返回给master,master才返回给业务正常。
show plugins; 是否有semisync字母
show variables like 'plugin_dir' 查看plugins的路径
进入到mysql的plugin目录,进入mysql提示符
master:
install plugin rpl_semi_sync_master soname 'semisync_master.so'
set global rpl_semi_sync_master_enabled=on;
slave:
install plugin rpl_semi_sync_slave soname 'semisync_slave.so'
set global rpl_semi_rsync_slave_enabled=on;
在my.cnf加入 :
master:
rpl_semi_sync_master_enabled=1
slave:
rpl_semi_sync_slave_enabled=1
master上有4个参数:
rpl_semi_sync_master_enabled=on 开启半同步复制
rpl_semi_sync_master_timeout=10000 该参数默认10000毫秒,10秒。表示如果主库某次事务中的等待时间超过10秒,则降为异步复制模式,不再等待slave从库。
rpl_semi_sync_master_wait_no_slave 表示是否允许master每个事务提交后都要等待slave接受信号,默认为on
rpl_semi_sync_master_trace_level=32 调试级别
slave上有2个参数:
rpl_semi_sync_slave_enabled=on
rpl_semi_sync_slave_trace_level=32
验证半同步数据:
master:
show variable like '%semi%';
关注一下几个参数:
rpl_semi_sync_master_status 服务器使用半同步模式还是异步模式
rpl_semi_sync_master_clients 多少个从服务器使用了半同步模式
rpl_semi_sync_master_yes_tx 从服务器确认的成功的提交数量
rpl_semi_sync_master_no_tx 从服务器确认的失败提交数量
slave:
show variables like '%semi%'
rpl_semi_sync_slave_status = on 从服务器是否是半同步复制模式
半同步复制与异步复制的切换
1. stop slave
stop slave io_thread;
该操作会将io线程关闭,等待10秒后,如果master未收到slave的接收确认信号,则转换为异步同步
start slave
会转换成半同步模式
!半同步模式和io_thread有关系,和sql_thread没有关系。也就是说,slave接收完二进制日志后会给master一个确认,但不会管relay-log是否执行完成。