zoukankan      html  css  js  c++  java
  • MySQL MGR--数据同步原理

    MGR复制架构

    在MySQL 5.7.17版本正式推出组复制(MySQL Group Repliation MGR),用来解决异步复制和半同步复制可能产生数据不一致的问题,组复制依靠分布式一致性协议(Paxos协议变体)来实现"数据最终一致性",并提供单主模式下自动选主的高可用解决方案。

    MySQL异步复制数据同步方式:

    MySQL 半同步复制数据同步方式(AFTER SYNC):

    MySQL组复制数据同步方式:

    在2N+1个节点组成的单主模式组复制集群中,主库上一个事务提交时,会将事务修改记录相关的信息和事务产生的BINLOG事件打包生成一个写集(WRITE SET),将写集发送给所有节点,并通过至少N个节点投票通过才能事务提交成功。

    在事务执行期间,会将:
    1、事务操作生成的map event/query event/dml event等写入BINLOG CACHE中(内存)
    2、将Write Set写入到Rpl_transaction_write_set_ctx中(内存)

    在事务提交时,具体在MYSQL_BIN_LOG::prepare之后但是在MYSQL_BIN_LOG::ordered_commit之前,即事务相关的BINLOG Event还在BINLOG CACHE没有写入到BINLOG FILE前,将BINLOG CACHE中和Rpl_transaction_write_set_ctx中的数据进行处理并写入到transaction_msg中,由gcs_module负责发送transaction_msg到各个节点,等待各节点进行事务认证。

    由于transaction_msg中包含BINLOG信息,并在事务认证期间发送给MGR各节点,因此无需等待主节点的BINLOG落盘后再发送给备用节点。

    每个MGR群集中的节点上,都存在IO线程和SQL线程,IO线程会解析transaction_msg获取到BINLOG EVENT并保存到RELAY LOG中,再由SQL线程执行重放到辅助节点上。

    从MGR复制原理上看,当主节点事务提交时,辅助节点上可能还未重放该事务对应的BINLOG,因此MGR仍属于异步复制。

    参考资料:

    https://www.cnblogs.com/luoahong/articles/8043035.html

    https://www.jianshu.com/p/9fb56fa4c6e4

    https://www.jianshu.com/p/0bd0f6ba4741

  • 相关阅读:
    Django 点滴
    Django 用 userena 做用户注册验证登陆
    screen 基础用法(转)
    yum 常用命令
    利用 awk 将当前的链接按端口汇总倒排序
    Django 的逆向解析url(转)
    Ubuntu 安装 setuptools
    支付宝 python alipay 集成(转)
    linux 下批量在多文件中替换字符串
    springmvc进阶
  • 原文地址:https://www.cnblogs.com/gaogao67/p/11201597.html
Copyright © 2011-2022 走看看