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高可用集群的主要内容,如果未能解决你的问题,请参考以下文章