MySQL MGR(组复制)是目前企业级高可用方案的首选之一,它通过分布式共识协议实现数据强一致,单点故障时自动切换,无需额外依赖第三方中间件。很多运维人员在初次接触时容易被复杂的参数劝退,其实只要按步骤配置,整个过程非常清晰。下面直接上干货,带你从零搭建三节点MGR集群。
环境与前置准备
准备三台Linux服务器,系统建议选用CentOS 7.9或Ubuntu 20.04以上版本。MySQL统一使用8.0.27或更高版本,因为早期版本在插件加载和网络通信上存在已知缺陷。确保三台机器时间同步,防火墙关闭或放行3306、33061端口。每台机器的hostname不能重复,且/etc/hosts文件需互相解析IP与主机名。如果这三项基础没做好,后面启动组复制一定会报错。另外,建议为MySQL分配独立的磁盘挂载点,关闭大页内存机制,防止XtraDB存储引擎出现性能抖动。
第一步:安装MySQL并初始化
在三台服务器上执行相同的安装命令,推荐使用官方YUM源或RPM包,避免编译安装带来的环境差异。安装完成后,启动MySQL服务并运行安全初始化脚本设置root密码。登录数据库后,执行版本查询命令确认版本号一致。为了后续管理方便,建议在每台机器上创建统一的data目录权限,并将临时目录指向独立磁盘,防止临时文件撑爆根分区。初始化阶段务必保证三台机器的插件路径和数据目录结构完全一致,这是后续顺利组网的基础。
第二步:核心配置文件编写
MGR的稳定性完全依赖my.cnf的参数调优。打开各节点的配置文件,追加以下关键参数。server_id必须每台唯一,例如node1设为1,node2设为2,node3设为3。gtid_mode设为ON,enforce_gtid_consistency设为ON,这是开启组复制的前提。binlog_format设为ROW,transaction_write_set_extraction设为XXHASH64。最关键的是group_replication_group_name,三台机器必须填写完全相同的UUID,否则无法组成同一个组。group_replication_local_address分别填写本机的33061端口,group_replication_group_seeds填写所有三台节点的地址,用逗号分隔。最后设置引导序列参数为OFF,仅在第一台引导节点生效。配置保存后重启MySQL服务使参数生效。
第三步:创建复制账户并启动主节点
配置生效后,登录第一台服务器,执行账号创建与授权命令。接着执行设置全局引导开关、启动组复制、关闭引导开关的三步操作。这三条命令会强制当前节点作为组的引导者,其他节点随后加入时会同步其元数据。可以通过查询性能模式表查看成员状态,当状态显示PRIMARY时,说明主节点已成功上线。此时切勿向该节点写入大量生产数据,应等待全量集群组建完毕。
第四步:添加从节点与集群验证
在第二台和第三台服务器上,同样先创建rep用户并授权。然后直接执行启动组复制命令即可,不需要设置引导变量。此时MySQL会自动通过指定端口连接主节点,拉取日志并完成数据同步。等待几秒后再次查询成员表,三个节点的状态都应变为ONLINE。进入任意节点创建测试库和表,插入几条数据,切换到其他节点查询,如果发现数据实时同步且无冲突提示,说明MGR集群已完美跑通。关于网络拓扑方面,MGR对延迟极其敏感。三台节点最好部署在同一机房同一VLAN内,或者跨机房但专线延迟控制在五毫秒以内。如果网络条件一般,可适当放大报文上限参数,避免因网络波动导致的心跳丢包。实际生产环境中,建议搭配Prometheus进行深度监控,重点关注流量控制暂停指标,若该值超过百分之十,说明网络带宽或磁盘IO已成为瓶颈,需及时扩容硬件或优化SQL语句。定期备份Binlog与Xtrabackup快照仍是不可省略的安全底线,毕竟高可用架构解决的是故障恢复速度,而非数据丢失问题。按照上述流程操作,半小时内即可完成一套具备自动故障转移能力的MySQL MGR集群。



