一 简介:今天咱们来聊聊mgr的具体实现细节

二 关于多点写入的锁冲突问题以及处理:
   certify模块主要负责检查事务是否允许提交,是否与其它事务存在冲突,如两个事务可能修改同一行数据。在单机系统中,两个事务的冲突可以通过封锁来避免,但在多主模式下,不同节点间没有分布式锁,所以无法使用封锁来避免。为提高性能,Group Replication乐观地来对待不同事务间的冲突,乐观的认为多数事务在执行时是没有并发冲突的。事务分别在不同节点上执行,直到准备提交时才去判断事务之间是否存在冲突
乐观锁通过使用数据版本(Version)记录机制实现 数据每更新一次,对此version值加一。
   1 当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新
   2 版本号是共享且唯一的。
   3 mgr对冲突事务的处理是回滚
三 关于MGR 如何选择新主的问题
   1 当主节点宕掉,自动会根据服务器的server_uuid变量和group_replication_member_weight变量值,选择下一个slave谁作为主节点,group_replication_member_weight的值最高的成员被选为新的主节点,
   2 在group_replication_member_weight值相同的情况下,group根据数据字典中 server_uuid排序,排序在最前的被选择为主节点

3 如果原主需要下线进行维护,那么可以直接stop复制,如果有目标新主,预先调整好权重即可.新主会进行识别
四 消息压缩(Message Compression)
   这个压缩主要是指MySQL的bin-log压缩,所使用的压缩算法是LZ4。当网络带宽是瓶颈时,消息压缩可以在组通信级别提供高达30-40%的吞吐量改进,这在网络传输压力比较大的组中是尤为重要的。LZ4能很好的支持多线程环境,获得更高的压缩和解压速度。
   经过压缩的binlog在传输到节点后会进行解压缩
   默认情况下启用压缩,阈值为1000000字节(1MB)。压缩阈值(以字节为单位)可以设置为大于默认值。在这种情况下,只有具有大于阈值的有效负载的事务被压缩。下面是如何设置压缩阈值的示例。
   压缩参数group_replication_compression_threshold= 2097152;
   注意:修改此参数需要重启组复制,所以推荐在搭建时候预先设置好
六 关于日志
  1 因为组复制同步还是基于二进制日志来进行同步的,清理某个节点bin-log时,必须判定这个日志文件是否还在使用,如果在使用,则绝对不能删除,如果删除,则整个集群直接ERROR。
  2 expire_logs_days默认是0,就是不删除任何binlog日志,可以在每个节点进行自定义设置
  3  在单模式下,主只写binlog,其他节点会写relay和本地binlog2种文件 在多主模式下,所有节点都会写relay和本地binlog
七 关于组复制的延迟问题
  组复制的延迟对集群是有影响的,一旦出现延迟(默认延迟25000个事务),则启动流量控制(Flow Control),每个周期性能衰减当前的10%,直到集群不可用(但集群节点状态为online),单个节点慢整个集群全慢。
九 关于故障转移的问题
  无论部署模式如何,组复制不处理客户端故障切换,它必须由应用程序本身、连接器或中间件框架(如代理或路由器)等处理。
十 高可用
 1 一旦集群故障的节点超过阈值,整个集群变会被挂起,成为只读的状态,比如 3个节点,一旦挂掉2个 就会导致集群只读
    计算方式 2n+1=total, n为故障节点的阈值
 2 单个节点的状态只有到ERROR时才会被认为是不可用,踢出集群,视图发生变更
 3 网络抖动问题可能导致集群的性能问题,所以要设置事务压缩和限制事务大小
十一 写集合
 1 主键在MGR中主键是有着极其重要的地位,是判断是否冲突的重要依据,所以规定表必须有主键
 2 写集合信息会封装进Transaction_context_log_event,同其他binlog event信息一起发送给其他节点
 3 生成写集合的是在Innodb层完成更改操作,MySQL层写入binlog event之前。
十二 过程

0 MGR 在主节点执行,形成binglog_event+写集合
1 MGR 是先发送 写集合+binlog_event 到各个节点
2 从节点进行验证,验证通过后主节点写入binlog
3 binlog复制到从节点的relay-log,从节点读取relay-log进行应用 写到本地binlog 最后提交
4 整个事务顺利完成

十三 MGR 本身限制

1 不支持XA事务,外键和串行化操作 
2 表需要有主键
3 只支持IPV4的网络
4 网络性能对于集群影响很大 ,需要低延迟,高带宽
5 现在限制最多9个节点
6 集群性能取决于最差的硬件机器,所以推荐所有硬件统一配置
7 官方推荐RC隔离级别,不过我觉得单主模式下RR是没有问题的

8 多主条件下的限制
  1 针对同一对象但是不同实例的并发DML操作,在DDL操作执行完前,是有风险的,会存在 未检测到不同实例执行冲突的DDL语句风险
  2 不支持同一对象但是不同实例的并发DDL操作

十四 关于多主的设计架构

1 采用轮训方式 haproxy+mgr多写,对于后端的三个节点随机进行读写

2 采用不同库不同节点进行读写,这样能减少多写模式下锁冲突的产生

3 多机房的架设,一部分在第一机房提供服务 另一部分在另一积分提供服务,但是需要考虑网络问题

mysql 架构~mgr具体细节分析的更多相关文章

  1. mysql 架构~MGR监控手段

    一 简介 今天咱们来聊聊MGR的监控 二 监控 方面: 1 节点mysql进程监控                       2 节点mysql复制进程的监控                    ...

  2. mysql 架构 ~ MGR 与PXC的对比

    一 简介 MGR和PXC的对比 二  WriteSet1 定义 是组件对于写节点应用事务生成binlog的再封装,用来验证其他节点的事务冲突 PXC构成key db_table_组件值data bin ...

  3. 打通MySQL架构和业务的任督二脉

    目前,在很多OLTP场景中,MySQL数据库都有着广泛的应用,也有很多不同的使用方式.从数据库的业务需求.架构设计.运营维护.再到扩容迁移,不同的MySQL架构有不同的特点,适应一定的业务场景,或者解 ...

  4. 纲举目张:打通MySQL架构和业务的任督二脉

    目前,在很多OLTP场景中,MySQL数据库都有着广泛的应用,也有很多不同的使用方式.从数据库的业务需求.架构设计.运营维护.再到扩容迁移,不同的MySQL架构有不同的特点,适应一定的业务场景,或者解 ...

  5. ch2 MySQL 架构组成

    第 2 章 MySQL 架构组成 前言 麻雀虽小,五脏俱全.MySQL    虽然以简单著称,但其内部结构并不简单.本章从 MySQL 物理组成.逻辑组成,以及相关工具几个角度来介绍    MySQL ...

  6. 理解MySQL——架构与概念

    写在前面:最早接触的MySQL是在三年前,那时候MySQL还是4.x版本,很多功能都不支持,比如,存储过程,视图,触发器,更别说分布式事务等复杂特性了.但从5.0(2005年10月)开始,MySQL渐 ...

  7. 第 2 章 MySQL 架构组成

    麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...

  8. mysql 架构 ~异地容灾

    一 简介 我们来探讨下多机房下的mysql架构二 目的:    首先要清楚你的目的     1 实现异地机房的容灾备份      2 实现异地机房的双活 三 叙说     1 实现异地机房的容灾备份  ...

  9. <转载> MySQL 架构 http://www.cnblogs.com/winner-0715/p/6863802.html

    1.MySQL整体逻辑架构 我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture) 图1 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都 ...

随机推荐

  1. [代码]--c#实现屏幕取词源码下载

    最近公司有一个 项目需要实现类似于金山词霸,有道词典等的屏幕取词功能,准确来说是划词功能,网上搜了各种屏幕取词无外乎就两种: A.金山词霸组件法 B.Nhw32.dll法 百度搜到的重复内容真的太多了 ...

  2. ansible创建vmware虚拟机

    环境:vmware 虚拟化需求:如果业务部门一次提几十台甚至几百台虚拟机需求,一个个的手动创建肯定耗时 使用ansible vmware_guest 创建虚拟机,避免手动一台一台创建的纯手工 工作废话 ...

  3. poj2586 【贪心】

    Accounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost some vital data for ...

  4. IDEA上传码云报错Push rejected: Push to origin/master was rejected

    原因是README.md文件冲突,码云上在创建项目的时候不要初始化README.md,然后再用IDEA上传

  5. 自学Zabbix12.2 Zabbix命令-zabbix_get

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix12.2 Zabbix命令-zabbix_get 1. zabbix_get概念 ...

  6. 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表 Items表记录了i ...

  7. 【HDU1693】Eat the Trees(插头dp)

    [HDU1693]Eat the Trees(插头dp) 题面 HDU Vjudge 大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍. 题解 这题的弱化版 ...

  8. 洛谷 P1430 序列取数 解题报告

    P1430 序列取数 题目描述 给定一个长为\(n\)的整数序列\((n<=1000)\),由\(A\)和\(B\)轮流取数(\(A\)先取).每个人可从序列的左端或右端取若干个数(至少一个), ...

  9. 洛谷 P1407 [国家集训队]稳定婚姻 解题报告

    P1407 [国家集训队]稳定婚姻 题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的 ...

  10. 洛谷 P1076 寻宝 解题报告

    P1076 寻宝 题目描述 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书.说明书的内容如下: 藏宝楼共有\( ...