您的位置:首页 > 数据库 > MySQL

MySQL半同步复制

2016-09-06 17:26 141 查看
MySQL半同步复制

      MySQL为了容灾数据一致性服务,有几种复制方式: 主从复制方式,异步,半同步,lossless半同步复制方式。
      异步的复制: 默认的复制是异步的,即master commit时不等更新被slave接受就向客户端回话应答成功。slave会对master有一个更新延迟,当master宕机,slave被提升为新的master时,必然会发生数据丢失。

      半同步复制:半同步复制时,master会等本地commit成功并且至少有一个半同步复制slave收到了binglog且写入relay
log刷新到磁盘。

      lossless半同步复制:就是先等待slave返回已接受到binglog并刷盘的应答,然后再提交Commit命令到存储层,说白了就是对调了一下两个操作的次序。 
    
 
    下面重点介绍下MySQL半同步复制:
       
     


注: 上图摘自微信后台团队。

上图描述了MySQL的Binlog半同步过程。Wait ACK是半同步的关键步骤,Master把Binlog发给Slave之后,需要等待Slave的ACK。Master直到成功收到ACK之后,才执行Engine Commit把数据持久化到Storage。具体细节可参考:http://my-replication-life.blogspot.com/2013/09/loss-less-semi-synchronous-replication.html

MySQL启动时,Wait ACK过程会被跳过,导致Engine Commit会被直接执行。具体细节请参考:https://jira.mariadb.org/browse/MDEV-162 

总结:MySQL的半同步复制和Master切换都存在一些不足。数据复制存在回滚难题,Master切换存在多Master难题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: