MySQL Group Replication(简称MGR)是MySQL官方在5.7.17版本推出的高可用解决方案。作为一名数据库管理员,我在生产环境中使用MGR已有三年多时间,今天就来详细分享这套集群的搭建与运维经验。
MGR本质上是一个基于Paxos协议的分布式状态机复制系统。与传统的异步复制或半同步复制不同,MGR采用多主架构设计,通过组通信协议实现事务的原子广播。当客户端发起一个事务时,主节点会将该事务广播给组内所有成员,只有在大多数节点确认接收后,事务才会提交。这种设计保证了数据在集群中的强一致性。
在生产环境中,我建议至少使用3台服务器组成MGR集群。以下是推荐的硬件配置:
重要提示:所有节点的MySQL版本必须完全一致,否则可能出现兼容性问题
在/etc/hosts文件中添加所有节点的IP和主机名映射:
bash复制# 所有节点执行
cat >> /etc/hosts <<EOF
192.168.1.101 mgr-node1
192.168.1.102 mgr-node2
192.168.1.103 mgr-node3
EOF
开放必要的端口:
bash复制firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=24901/tcp
firewall-cmd --reload
bash复制# 添加MySQL YUM源
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-5.noarch.rpm
# 安装MySQL Server
yum install -y mysql-community-server
以下是主节点的配置文件示例(/etc/my.cnf):
ini复制[mysqld]
# 基本配置
server_id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 复制配置
log_bin=mysql-bin
binlog_format=ROW
binlog_checksum=NONE
gtid_mode=ON
enforce_gtid_consistency=ON
# MGR配置
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=OFF
group_replication_local_address="mgr-node1:24901"
group_replication_group_seeds="mgr-node1:24901,mgr-node2:24901,mgr-node3:24901"
group_replication_bootstrap_group=OFF
sql复制-- 启动组复制引导
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
-- 验证状态
SELECT * FROM performance_schema.replication_group_members;
在其他节点上执行:
sql复制-- 设置恢复通道
CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='password'
FOR CHANNEL 'group_replication_recovery';
-- 启动组复制
START GROUP_REPLICATION;
sql复制-- 查看组成员状态
SELECT * FROM performance_schema.replication_group_members;
-- 查看组复制通道状态
SHOW STATUS LIKE 'group_replication%';
-- 查看延迟情况
SELECT * FROM sys.gr_member_routing_candidate_status;
当节点故障时,MGR会自动进行故障转移。手动恢复节点步骤:
sql复制START GROUP_REPLICATION;
ini复制group_replication_flow_control_mode="QUOTA"
group_replication_flow_control_applier_threshold=25000
group_replication_flow_control_certifier_threshold=25000
在实际使用中,我总结了以下几点经验:
模式切换命令:
sql复制-- 切换到多主模式
SET GLOBAL group_replication_single_primary_mode=OFF;
SET GLOBAL group_replication_enforce_update_everywhere_checks=ON;
可能原因:
解决方法:
MySQL MGR作为官方提供的高可用解决方案,在保证数据一致性的同时提供了自动故障转移能力。经过三年多的生产环境验证,我认为它特别适合以下场景:
在实际部署时,建议从测试环境开始,充分验证后再上线生产。同时要做好监控和备份,确保万无一失。