Kind0f的ITPUB博客

转战个站 http://www.tabdba.com

  • 博客访问: 8712
  • 博文数量: 39
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-17 22:34
  • 认证徽章:
ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(39)

文章存档

2017年(19)

2016年(20)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: MySQL


一 : 增强半同步复制

    ① 半同步复制(5.5 5.6)

     
        过程分析:
        1 > session 发出commit请求
        2 > flush binlog and fsync binlog
        3 > InnoDB 引擎层 commit 
        4 > 发送binlog到SLAVE,等待slave发送ack确认
        5 > slave 接受binlog 写入relay log ,刷盘完成发送ack确认包给master
        6 > master 返回 commit ok 信息给session
        
        另外 (master 等待事务A 的 ACK的时候宕机,此时新事务B在宕机之前开启):
        1> binlog 未发送到从库:
            事务B获取到事务A提交的内容, 此时宕机故障切换到slave,事务B获取到的内容却丢失了。事务A commit没有收到反馈信息(则需要业务判断了)。
        2> binlog 已经发送给从库 :
            事务B获取到事务A提交的内容,故障切换到salve ,B仍然获取到A提交的内容,没毛病。事务A commit没有收到反馈信息,若重新执行该事务,则相当于执行两次A事务(则需要业务判断了)。

    ② 增强半同步复制(5.7)
        由该参数 rpl_semi_sync_master_wait_point=AFTER_SYNC/AFTER_COMMIT 两个值选择是否启用增强半同步
        当  半同步模式为 AFTER_COMMIT 时,为以上分析的情况
        当  半同步模式为 AFTER_SYNC 模式时,则:
        
           过程分析:
           1 > session 发出commit请求
           2 > flush binlog and fsync binlog
           3 > 发送binlog到SLAVE,等待slave发送ack确认
           4 > slave 接受binlog 写入relay log ,刷盘完成发送ack确认包给master
           5 > InnoDB 引擎层 commit 

           6 > master 返回 commit ok 信息给session

           另外(master 等待事务A 的 ACK的时候宕机,此时新B在宕机之前启)
           1> 事务B读取不到事务A的内容,因为事务A的ENGINE层有提交(无损复制)
               
二 : 半同步复制增加 ACK线程

    ① mysql5.5 mysql5.6
        1> master dump thread 发送binlog events 给 slave 的IO thread,等待 slave 的ack回包
        2> slave 接受binlog events 写入redo log ,返回 ack 包给master dump thread
        3> master dump thread 收到ack包 ,给session返回commit ok,然后继续发送写一个事务的binlog。

    ② mysql5.7 新增ack线程
        1> master dump thread 发送binlog events 给 slave 的IO thread,开启ack线程等待 slave 的ack回包,dump 线程继续向slaveIO thread发送下一个事务的binlog。
        2> slave 接受binlog events 写入redo log ,返回 ack 包给master ack线程,然后给session返回commit ok。
 
    可以看到,mysql5.7半同步复制中增加了一个 ACK线程专门用来进行semi 复制的ACK确认,这提高了复制的tps。



阅读(565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册