Mysql 半同步复制配置
以下是配置和监控半同步复制:
1. 半同步复制功能以plugin的方式接入MySQL,需要在主库与从库两端同时开启半同步的支持,具体配置如下:
On the master
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000; # 1 second
On the slave
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
mysql> START SLAVE;
NOTE: SLAVE端需要先开启半同步参数,然后启动从库复制,否则,Rpl_semi_sync_slave_status
的状态始终为:
OFF
。
2. 通过以下参数可以判断半同步是否正常:
Rpl_semi_sync_master_status -- 判断主库当前模式为半同步还是异步复制
Rpl_semi_sync_master_clients -- 当前处于半同步状态的从库个数
Rpl_semi_sync_master_yes_tx,Rpl_semi_sync_master_no_tx -- 主库收到正常确认以及超时未成功确认的事务个数
Rpl_semi_sync_slave_status -- 从库半同步复制是否正常,当io_thread为NO时,状态为OFF
查看半同步相关参数及状态参数命令:
mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%’;
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync%’;
-TAKE AWAY-
半同步复制使MHA更加完美
在之前的文章中曾和大家分享过MHA这种高可用的主从自动的failover方案,而这里说的半同步复制对于MHA是一个很有利的支持。
半同步可以最大程度的保障主库执行过的语句被成功复制到从库relay log中;而当主库发生故障时,使从库的状态更接近主库,保持最小的数据差异。基于半同步这个特点,可以将其与MHA一起使用,当主库故障,故障自动切换被触发,在这个过程中MHA需要比较主库与从库日志差异,由于半同步的特点,差异日志会尽可能的少,那么MHA在进行判断比较、差异生成、拷贝直至最后的差异应用,这一系列的时间消耗都会得到缩减,这样MHA的切换时间就相应减少,数据库故障可以快速恢复。
正常情况下,主库写入binlog日志的pos位置与从库读到的Read_Master_Log_Pos位置应该保持一致;测试中发现,当主库被意外关掉,仍存在少量的跟新语句没有被同步过去,这一点在手册里面有提及(If the master commits but a crash occurs while the master is waiting for acknowledgment from a slave, it is possible that the transaction may not have reached any slave.)