mysql-MGR高可用集群

Posted p0st

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-MGR高可用集群相关的知识,希望对你有一定的参考价值。

1.MySQL Group Replication(MGR)

mysql Group Replication(MGR:mysql组复制技术)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供。
MGR基于分布式paxos协议,实现组复制,在分布式中保证数据一致性和原子性,且具有容错率的一致性算法。内置故障检测和自动选主功能,只要不是集群中的大多数节点都宕机,就可以继续正常工作。
提供单主模式与多主模式,多主模式支持多点写入。

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性,总结MGR特点如下:
    高一致性:基于原生复制以及分布式paxos协议实现组复制,并已插件的方式提供,保证数据一致性(paxos协议:解决多节点写入的问题);
    高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,有自动检测机制,当不同节点产生资源竞争时,不会出现错误,按照先到先优先的原则进行处理,内置自动化防脑裂保护机制;
    高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致,如果某个节点被移除了,其他节点会自动更新组信息,自动维护新的组信息。
    高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入。

2.MGR使用限制

限制一:仅支持innodb存储引擎
MGR集群中,只支持innodb存储引擎,能够创建非innodb引擎的表,但是无法写入数据,向非innodb表写数据直接报错。因为事物支持在commit时对各节点进行冲突检查
要求:
    节点必须开启binlog且为row模式
    必须开启gtid
    且主从状态信息存于表中
        --master-info-repository=TABLE
        --realy-log-info-repository=TABLE
        --log-slave-updates打开,级联更新)
    一致性检测设置 --transaction-write-extraction=XXHASH64

  限制二:表必须有主见或者非NULL的唯一值

MGR集群中,只支持innodb引擎的表,并且该表必须有显式的主键,或者非Null的唯一键,否则即使能够创建表,也无法向表中写入数据。
限制三:网络限制
MGR 组通信引擎目前仅支持IPv4网络,并且对节点间的网络性能要求较高,低延迟、高带宽的网络是部署MGR集群的基础。
限制四:MGR忽略表锁和命名锁
在MGR中lock tables、unlock tables、get_lock、release_lock等这些表锁和命名锁将被忽略。
其他限制
1.RP和普通复制binlog校验不能共存,需设置--binlog-checksum=none;
2.不支持gap lock(间隙锁),隔离级别需设置为read committed;
3.MGR多主模式中,默认不支持 SERIALIZABLE 隔离级别。
4.多主模式下,对同一个对象进行并发的有冲突的ddl和dml操作导致这种冲突在部分成员节点中无法检测到,最终可能导致数据不一致。
5.多主模式下,不支持级联约束的外键,可能造成有冲突的操作无法检测。
6.不支持超大事务。
7.多主模式下可能导致死锁,比如select ...for update在不同节点执行,由于多节点锁无法共享,很容易导致死锁。
8.不支持复制过滤,如果有节点设置了复制过滤,将影响节点间决议的达成。
9.MGR最多支持9个节点,大于9个节点,将拒绝新节点的加入。

 3.集群搭建(官方建议:都是奇数台)

单主模式架构图
技术图片

 

注意:
  在db01,db02,db03上都保存了全部的数据。
  当主句宕机之后,会自动选举新的主,无需人工干预
  单主模式可做读写分离

 

 多主模式架构图

技术图片

 

 注意:
  三台机器都是可读可写的
  但是堵住模式都去读写的话,会发生冲突

4.单主模式搭建

要求:
    1.mysql版本大于5.7.17
    2.防火墙关闭状态 systemctl status firewalld
    3.selinux都关闭 getenforce
    4.mysql的server_uuid要不同 生成uuid:select uuid();
    5.配置主机的host  vim /etc/hosts


报错信息
1.防火墙未关闭
 Plugin group_replication reported: [GCS] The member was unable to join the group. Local port: 33061

2.不写/etc/hosts的话会造成Plugin group_replication reported: Fatal error during the Recovery process错误

 

 

 

pass

以上是关于mysql-MGR高可用集群的主要内容,如果未能解决你的问题,请参考以下文章

高可用kubernetes集群搭建

Nginx keepalived 高可用集群

Flink高可用集群搭建

Linux 高可用(HA)集群基本概念详解

集群介绍keepalived介绍用keepalived配置高可用集群

基于 ZooKeeper 搭建 Hadoop 高可用集群