1. Ubuntu 22.04 搭建 MySQL 8.0.45 MGR 集群实战指南
作为一名长期从事数据库运维的工程师,我最近在项目中成功部署了MySQL 8.0的MGR集群。相比传统的复制方案,MGR提供了真正的多主复制能力,同时保证了数据一致性。本文将详细记录我在Ubuntu 22.04系统上搭建三节点MGR集群的全过程,包括环境准备、软件安装、配置优化和集群初始化等关键步骤。
2. 环境准备与规划
2.1 硬件与网络配置
我们使用三台虚拟机搭建集群,每台配置为4核CPU和2GB内存。这种配置适合中小型应用的数据库需求,如果业务量较大,建议适当增加资源。以下是节点信息:
| 主机名 | IP地址 | MySQL版本 | 操作系统 |
|---|---|---|---|
| node0 | 192.168.143.128 | 8.0.45 | Ubuntu 22.04 |
| node1 | 192.168.143.129 | 8.0.45 | Ubuntu 22.04 |
| node2 | 192.168.143.130 | 8.0.45 | Ubuntu 22.04 |
提示:生产环境中建议将节点部署在不同物理机上,避免单点故障风险。
2.2 系统基础配置
2.2.1 设置主机名
为每个节点设置唯一的主机名,便于后续管理和识别:
# 在node0执行 hostnamectl set-hostname node0 # 在node1执行 hostnamectl set-hostname node1 # 在node2执行 hostnamectl set-hostname node22.2.2 配置hosts文件
在所有节点上编辑/etc/hosts文件,添加集群节点信息:
vi /etc/hosts添加以下内容:
192.168.143.128 node0 192.168.143.129 node1 192.168.143.130 node2注意:确保所有节点的hosts文件内容一致,这是MGR集群正常通信的基础。
3. MySQL安装与初始化
3.1 软件包准备
我们选择手动安装MySQL 8.0.45社区版,这种方式可以更好地控制安装过程和版本一致性。
3.1.1 创建安装目录
mkdir /usr/src/mysql && cd /usr/src/mysql3.1.2 下载软件包
有两种方式获取安装包:
- 直接使用wget下载:
wget -c --load-cookies=cookies.txt "http://seafile.szzt.com.cn/f/2003ef096e584044b8cb/?dl=1" -O "mysql-server_8.0.45-1ubuntu22.04_amd64.deb-bundle.tar"- 本地下载后上传到服务器
3.1.3 解压软件包
tar -xvf mysql-server_8.0.45-1ubuntu22.04_amd64.deb-bundle.tar解压后会得到多个deb包,包括客户端、服务端和各种组件。
3.2 安装MySQL组件
3.2.1 安装基础依赖
dpkg -i mysql-common_8.0.45-1ubuntu22.04_amd64.deb dpkg -i mysql-community-client-plugins_8.0.45-1ubuntu22.04_amd64.deb3.2.2 安装客户端库
dpkg -i libmysqlclient21_8.0.45-1ubuntu22.04_amd64.deb dpkg -i libmysqlclient-dev_8.0.45-1ubuntu22.04_amd64.deb3.2.3 安装客户端核心组件
dpkg -i mysql-community-client-core_8.0.45-1ubuntu22.04_amd64.deb dpkg -i mysql-community-client_8.0.45-1ubuntu22.04_amd64.deb dpkg -i mysql-client_8.0.45-1ubuntu22.04_amd64.deb3.2.4 安装服务端组件
安装服务端时可能会遇到依赖问题:
dpkg -i mysql-community-server-core_8.0.45-1ubuntu22.04_amd64.deb如果报错提示缺少libmecab2和libnuma1,先安装这些依赖:
apt install -y libmecab2 libnuma1然后重新安装服务端组件:
dpkg -i mysql-community-server-core_8.0.45-1ubuntu22.04_amd64.deb3.2.5 完成服务端安装
apt install -y psmisc --fix-broken apt -f install ./mysql-community-server_8.0.45-1ubuntu22.04_amd64.deb安装过程中会提示设置root密码,建议设置强密码并选择"Use Strong Password Encryption"选项。
3.3 验证安装
安装完成后,检查MySQL服务状态和端口监听:
ss -atnl应该能看到3306和33060端口处于监听状态。
4. MySQL集群配置
4.1 基础配置调整
4.1.1 停止MySQL服务
service mysql stop4.1.2 修改配置文件
编辑MySQL配置文件:
vim /etc/mysql/mysql.conf.d/mysqld.cnf在文件末尾添加以下配置内容。注意不同节点的server_id和loose-group_replication_local_address需要修改:
# 业务数据库必要配置 character-set-server=utf8 log_bin_trust_function_creators=1 lower_case_table_names = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES transaction_isolation = READ-COMMITTED group_concat_max_len = 102400 # MGR集群核心配置 server_id = 128 # 每个节点唯一,建议使用IP尾数 gtid_mode = ON enforce_gtid_consistency = ON binlog_checksum = NONE log_slave_updates = ON binlog_format = ROW transaction_write_set_extraction = XXHASH64 # MGR专用配置 loose-group_replication_group_name = "161ec121-861b-4f61-b6ed-c969087cc1be" loose-group_replication_start_on_boot = OFF loose-group_replication_recovery_get_public_key = ON loose-group_replication_recovery_use_ssl = ON loose-group_replication_local_address = "192.168.143.128:33061" # 当前节点IP loose-group_replication_group_seeds = "192.168.143.128:33061,192.168.143.129:33061,192.168.143.130:33061" loose-group_replication_bootstrap_group = OFF重要提示:group_replication_group_name需要所有节点保持一致,可以使用uuidgen命令生成一个新的UUID。
4.1.3 重新初始化数据目录
由于我们修改了lower_case_table_names参数,需要重新初始化数据目录:
rm -rf /var/lib/mysql mkdir /var/lib/mysql chown -R mysql:mysql /var/lib/mysql mysqld --initialize-insecure --user mysql --datadir=/var/lib/mysql --lower-case-table-names=14.2 启动服务并配置用户
4.2.1 启动MySQL服务
service mysql start4.2.2 配置root用户
登录MySQL并设置root密码:
mysql -uroot -p执行以下SQL:
use mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Szzt@123'; FLUSH PRIVILEGES; CREATE USER 'root'@'%' IDENTIFIED BY 'Szzt@123'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;5. MGR集群初始化
5.1 创建同步用户和安装插件
在所有节点上执行:
CREATE USER 'rpl_user'@'%' IDENTIFIED BY '@Password1122!'; GRANT REPLICATION SLAVE ON *.* TO 'rpl_user'@'%'; CREATE USER 'warton'@'%' identified by '@Password1122!'; GRANT ALL PRIVILEGES ON *.* TO 'warton'@'%'; FLUSH PRIVILEGES; RESET MASTER; INSTALL PLUGIN group_replication SONAME 'group_replication.so';5.2 初始化主节点
在node0上执行:
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;5.3 加入其他节点
在node1和node2上分别执行:
CHANGE MASTER TO MASTER_USER="rpl_user", MASTER_PASSWORD="@Password1122!" FOR CHANNEL 'group_replication_recovery'; START GROUP_REPLICATION;5.4 验证集群状态
在主节点上执行:
SELECT * FROM performance_schema.replication_group_members;正常输出应该显示三个节点都为ONLINE状态,其中一个为PRIMARY,其他为SECONDARY。
6. 集群管理与维护
6.1 常见问题排查
节点无法加入集群:
- 检查防火墙设置,确保33061端口开放
- 验证group_replication_group_seeds配置是否正确
- 检查各节点的server_id是否唯一
数据同步延迟:
- 监控网络延迟
- 检查系统资源使用情况(CPU、内存、IO)
- 考虑调整group_replication_flow_control_mode参数
6.2 日常维护建议
- 定期检查集群状态:
SELECT * FROM performance_schema.replication_group_members; SHOW STATUS LIKE 'group_replication%';备份策略:
- 使用mysqldump定期全量备份
- 考虑使用Percona XtraBackup进行物理备份
- 测试备份恢复流程
监控指标:
- 集群节点状态
- 复制延迟
- 事务冲突计数
- 网络延迟
7. 性能优化建议
7.1 参数调优
根据业务特点调整以下参数:
group_replication_flow_control_mode = "QUOTA" group_replication_flow_control_applier_threshold = 25000 group_replication_flow_control_certifier_threshold = 25000 group_replication_transaction_size_limit = 2097152007.2 硬件优化
- 使用SSD存储提高IO性能
- 为MySQL分配足够的innodb_buffer_pool_size
- 考虑使用高性能网络设备
7.3 架构优化
- 读写分离:将读操作路由到SECONDARY节点
- 分片:对于超大规模数据考虑分片方案
- 多活部署:跨机房部署MGR集群提高容灾能力
8. 总结
通过本文的详细步骤,我们成功在Ubuntu 22.04上搭建了MySQL 8.0.45的MGR集群。相比传统的主从复制,MGR提供了自动故障转移、多主写入等高级特性,适合对高可用要求较高的场景。
在实际生产环境中,还需要注意以下几点:
- 做好监控和告警,及时发现集群异常
- 定期演练故障转移流程
- 根据业务特点调整集群参数
- 制定完善的备份和恢复策略
MySQL Group Replication是一个功能强大但相对复杂的组件,需要DBA投入时间深入理解其工作原理和最佳实践。希望本文能为读者提供一个可靠的部署参考。