MySQL主从复制(2)半同步复制(无损复制)

一、异步复制与半同步复制的区别

MySQL主从复制默认是采用异步机制进行同步,所谓异步即指主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收到binlog并同步。如果从库还没有接收到binlog的时候主库发生宕机,那么进行主从切换后的从库数据并不能和主库完全一致。为了解决这个问题,从MySQL 5.5开始以插件的形式支持半同步复制(另需要注意由于半同步复制仅与默认复制通道(for channel "")兼容,不支持与多源复制混用。)。半同步复制中,当一个客户端提交事务时主库执行完事务并不会立即响应该客户端,而是等待至少有一个从库接收到了binlog并将事务写到自己的relay log中,最后收到从库的ACK响应后才返回给客户端。这里又根据存储引擎层处理的逻辑不同又将半同步复制分为after-commit和after-sync两种:

1、after-commit

主库未收到从库的ACK消息之前,虽然不会让发起事务的会话收到事务提交结果,但是会在存储引擎层先执行提交。这样一来虽然提交事务的会话无法知道事务结果,但其他会话在主库上却是可以正常查询的。如果发生主从切换,那么原本在主库可以查询到的数据,在从库却丢失了

2、after-sync

也可以叫做增强半同步复制或者无损复制,是MySQL 5.7默认的半同步方式。主库未收到从库的ACK消息之前,发起事务的会话收无法到事务提交结果,存储引擎层也不会执行提交,解决了after-commit的缺陷,保证了数据的严格一致。由于OLTP应用场景大多数是读多写少,读不会产生binlog,所以即便开启无损复制,相比异步复制所损失的性能也并不多

二、MySQL半同步复制配置

1、在主从节点都安装半同步复制插件,这样主从切换后也没有影响

mysql > INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  
mysql > INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 

2、检查插件安装是否成功,正常情况应该是ACTIVE状态 

mysql > SHOW PLUGINS;

3、编辑my.cnf配置文件以启动主从节点的半同步复制功能 

plugin_dir=/usr/local/mysql/lib/plugin
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_wait_no_slave=ON  #如果主库和所有从库都无法正常连接,是否还继续等待从库的ACK信息,默认为ON
rpl_semi_sync_master_wait_for_slave_count=1  #需要至少多少个从库完成确认
rpl_semi_sync_master_wait_point=AFTER_SYNC  #AFTER_COMMIT性能最差,且不能无损,所以不推荐
rpl_semi_sync_master_timeout=5000  #半同步超时时间,超时后转为异步复制,单位为毫秒 

4、重启从节点生效配置,重启后Slave会在Master上注册为半同步复制的Slave角色。 

START SLAVE;

5、当半同步复制发生超时时(由rpl_semi_sync_master_timeout参数控制,单位是毫秒,默认为10000,即10秒),会暂时关闭半同步复制转而使用异步,此时rpl_semi_sync_master_no_tx值不为0,如果持续增加就需要检查复制配置和网络情况。当master dump线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout内收到了从库的响应,则主从又重新恢复为半同步复制。示例:如果从节点Down掉,那么在主节点插入一条语句,这个时候会等待10秒才会插入成功,与rpl_semi_sync_master_timeout参数的时间相吻合。等从节点恢复后,主节点再次插入数据,又会恢复正常。

6、查看半同步复制插件所生成的环境变量与状态变量,状态变量一般用于统计数据。

show global variables like '%semi%';  #半同步复制相关的环境变量
show status like '%semi%';  #半同步复制相关的状态变量

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值