前情提要:
MySQL官方在 5.7.17版本正式推出组复制(MySQL Group Replication,简称MGR),使用类似 zookeeper 的多于一半原则。在一个集群由 2N+1 个节点共同组成一个复制组,一个事务的提交,必须经过 N+1 (也就是集群节点数 / 2+ 1)个节点决议并通过后才可以提交。这是目前 MySQL 数据库高可用与高扩展的最优解决方案。MGR有以下几个限制条件:
1、存储引擎必须为Innodb,即仅支持InnoDB表
2、每张表必须有主键,用于做write set的冲突检测
3、不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚
4、必须开启GTID特性,二进制日志格式必须设置为ROW,用于选主与write set
5、二进制日志binlog不支持Replication event checksums
6、多主模式(也就是多写模式) 下:不支持SERIALIZABLE事务隔离级别,不完全支持级联外键约束,不支持在不同节点上对同一个数据库对象并发执行DDL
8、只支持ipv4网络,最多支持9个节点
一、环境准备
Ubuntu 22.04 LTS (三台虚拟机),每台上面安装MySQL 8.0.33。
分别在每个节点配置 /etc/hosts 主机域名映射。
IP 主机名
10.53.207.20 master1
10.53.207.21 slave1
10.53.207.22 slave2
关闭 ubuntu 防火墙或者设置三个节点进白名单。
二、MySQL配置文件设置
分别在三个节点进行配置,内容基本相同,只有server_id、report_host、group_replication_local_address 值不同。它们在三个接点的值分别设置如下:
10.53.207.20:server_id=20;report_host = 10.53.207.20,group_replication_local_address = "10.53.207.20:33061"
10.53.207.21:server_id=21;report_host = 10.53.207.21;group_replication_local_address = "10.53.207.21:33061"
10.53.207.22:server_id=22;report_host = 10.53.207.22;group_replication_local_address = "10.53.207.22:33061"
属性 group_replication_bootstrap_group 配置是否引导组复制,如果某个节点设置此属性为ON,则先启动此节点创建一个组服务并成为 master 节点,接受其他后启动节点加入组复制集群。
如果属性 group_replication