ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ubuntu 24单节点MySQL Group Replication配置指南

Ubuntu 24单节点MySQL Group Replication配置指南

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 mysql

3. 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:在单节点场景下也必须设置唯一ID
  • group_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/mysql

4.2 初始化数据

使用mysqld初始化空数据库:

sudo mysqld --initialize-insecure --user=mysql

启动MySQL服务:

sudo systemctl start mysql

4.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.'

解决方案:

  1. 确认所有必选参数已正确设置
  2. 检查show variables like 'group_replication%'输出
  3. 确保没有启用只读模式(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. 扩展为多节点集群

虽然本文聚焦单节点配置,但了解如何扩展很有必要。要添加第二个节点:

  1. 在新节点上重复安装步骤
  2. 修改server_id为不同值
  3. 配置指向第一个节点的group_replication_group_seeds
  4. 直接执行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,如果不是则说明有性能问题需要排查。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进