1. 项目概述
MySQL Group Replication(MGR)是MySQL官方提供的高可用解决方案,它基于Paxos协议实现多主复制,能够自动处理节点加入/退出、故障检测与恢复等场景。在Ubuntu 24上配置单节点MGR看起来似乎违背了"Group"的初衷,但实际在开发测试环境中非常实用——你可以先验证基础配置的正确性,后续再扩展为完整集群。
我最近在本地开发环境中就遇到了这样的需求:需要测试一个依赖MGR特性的应用,但资源有限只能先用单节点验证核心逻辑。通过本文你将掌握从零开始配置单节点MGR的完整流程,包括那些官方文档没明确说明的细节参数。
2. 环境准备
2.1 系统与软件要求
推荐使用Ubuntu 24.04 LTS Server版,避免图形界面占用资源。MySQL版本选择8.0.34+(本文以8.0.36为例),这是目前最稳定的支持MGR的版本。硬件配置建议:
- 至少2核CPU
- 4GB内存
- 50GB存储空间(实际需求取决于数据量)
注意:虽然MGR可以在单核机器运行,但性能会受严重影响,特别是在启用流控的情况下。
2.2 MySQL安装
使用官方APT仓库安装MySQL:
# 添加MySQL官方仓库 wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb # 更新并安装 sudo apt update sudo apt install mysql-server mysql-shell -y安装完成后检查服务状态:
systemctl status mysql3. MGR核心配置
3.1 基础参数设置
编辑MySQL配置文件(通常位于/etc/mysql/mysql.conf.d/mysqld.cnf),在[mysqld]段添加:
# 基础组复制配置 server_id = 1 gtid_mode = ON enforce_gtid_consistency = ON binlog_checksum = NONE # 组复制专用配置 transaction_write_set_extraction = XXHASH64 group_replication_start_on_boot = OFF group_replication_bootstrap_group = OFF group_replication_recovery_get_public_key = ON group_replication_consistency = EVENTUAL # 单节点特殊配置 group_replication_single_primary_mode = ON group_replication_enforce_update_everywhere_checks = OFF关键参数说明:
server_id:在单节点场景下也必须设置唯一IDgroup_replication_start_on_boot:设为OFF防止自动启动导致问题group_replication_consistency:设为EVENTUAL获得最佳性能
3.2 用户权限配置
登录MySQL创建复制专用账户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; GRANT CONNECTION_ADMIN ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;安全提示:实际环境中应使用更复杂的密码并限制访问IP
4. 初始化MGR环境
4.1 数据目录准备
停止MySQL服务后初始化数据目录:
sudo systemctl stop mysql sudo mv /var/lib/mysql /var/lib/mysql.bak sudo mkdir /var/lib/mysql sudo chown mysql:mysql /var/lib/mysql4.2 初始化数据
使用mysqld初始化空数据库:
sudo mysqld --initialize-insecure --user=mysql启动MySQL服务:
sudo systemctl start mysql4.3 安装组复制插件
登录MySQL执行:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';验证插件状态:
SHOW PLUGINS WHERE NAME = 'group_replication';5. 启动单节点MGR
5.1 引导组复制
在MySQL中执行以下命令序列:
-- 设置组复制通道 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF; -- 验证状态 SELECT * FROM performance_schema.replication_group_members;正常情况应该看到类似输出:
+---------------------------+-----------+-------------+-------------+--------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | +---------------------------+-----------+-------------+-------------+--------------+ | group_replication_applier | ... | your-host | 3306 | ONLINE | +---------------------------+-----------+-------------+-------------+--------------+5.2 创建测试数据
验证MGR功能是否正常:
CREATE DATABASE mgr_test; USE mgr_test; CREATE TABLE test_table (id INT PRIMARY KEY, data VARCHAR(100)); INSERT INTO test_table VALUES (1, 'MGR单节点测试');6. 运维与监控
6.1 常用监控命令
查看组状态:
SELECT * FROM performance_schema.replication_group_members;检查冲突:
SELECT * FROM performance_schema.replication_group_member_stats;查看应用队列:
SELECT * FROM performance_schema.replication_applier_status;6.2 性能调优建议
对于单节点MGR,建议调整以下参数:
# 优化组通信线程 group_replication_poll_spin_loops = 100 group_replication_compression_threshold = 131072 # 减少流控影响 group_replication_flow_control_mode = "DISABLED"7. 常见问题解决
7.1 启动时报错处理
错误示例:
[ERROR] Plugin group_replication reported: 'This server is not configured properly to be an active member of the group.'解决方案:
- 确认所有必选参数已正确设置
- 检查
show variables like 'group_replication%'输出 - 确保没有启用只读模式(read_only=OFF)
7.2 节点无法加入自己
这是单节点部署时的特殊问题,解决方法:
-- 先停止组复制 STOP GROUP_REPLICATION; -- 重置元数据 RESET MASTER; -- 重新引导 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;8. 扩展为多节点集群
虽然本文聚焦单节点配置,但了解如何扩展很有必要。要添加第二个节点:
- 在新节点上重复安装步骤
- 修改server_id为不同值
- 配置指向第一个节点的group_replication_group_seeds
- 直接执行START GROUP_REPLICATION(无需引导)
添加节点的典型命令:
-- 在新节点上执行 SET GLOBAL group_replication_group_seeds='first_node_ip:33061'; START GROUP_REPLICATION USER='repl', PASSWORD='SecurePass123!';我在实际使用中发现,单节点MGR配置虽然看起来简单,但有很多隐藏的坑。最大的教训是:即使只有一个节点,也要像对待生产集群一样严格配置所有参数,否则后期扩展时会遇到各种兼容性问题。另外,定期执行SELECT * FROM performance_schema.replication_group_member_stats检查应用延迟,单节点环境下延迟应该始终为0,如果不是则说明有性能问题需要排查。