1. MySQL组复制与路由实战:构建高可用云原生数据库集群
在分布式系统架构中,数据库的高可用性和扩展性始终是核心挑战。MySQL官方提供的组复制(Group Replication)和MySQL Router解决方案,为构建云原生数据库集群提供了标准化路径。这套方案不仅实现了多节点数据实时同步,还通过智能路由机制简化了应用层访问逻辑。
2. 环境规划与架构设计
2.1 基础环境准备
实验采用三节点MySQL集群(172.25.254.10/20/30)和独立路由节点(172.25.254.40)的架构。所有节点操作系统为RHEL9,MySQL版本选用8.4.7社区版。关键设计要点包括:
- 多主模式组复制:所有节点均可处理写请求
- 读写分离路由策略:读操作轮询分发,写操作优先可用
- 自动化运维:通过Ansible批量管理节点
生产环境建议:节点应部署在不同可用区,网络延迟需控制在1ms内。建议使用至少5节点集群以保证脑裂情况下的多数派存活。
3. 集群部署实战
3.1 节点初始化方案对比
提供两种初始化方式满足不同场景需求:
Ansible自动化方案(适合批量部署)
# clear_mysql.yml - name: reset mysql hosts: mysql tasks: - name: stop mysql shell: '/etc/init.d/mysqld stop' ignore_errors: yes - name: delete mysql data file: path: /data/mysql state: absent - name: create data directory file: path: /data/mysql state: directory owner: mysql group: mysql - name: initialize mysql shell: '/usr/local/mysql/bin/mysqld --initialize --user=mysql'手动初始化方案(适合调试环境)
# 通用初始化步骤 /etc/init.d/mysqld stop rm -rf /data/mysql/* cat > /etc/my.cnf <<'EOF' [mysqld] datadir=/data/mysql socket=/data/mysql/mysql.sock symbolic-links=0 server-id=10 # 各节点需不同(10/20/30) log-bin=mysql-bin gtid_mode=ON enforce-gtid-consistency=ON default_authentication_plugin=mysql_native_password log_slave_updates=ON binlog_format=ROW binlog_checksum=NONE disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" EOF mysqld --user=mysql --initialize3.2 组复制核心配置
网络基础配置
# 所有节点统一hosts解析 cat >> /etc/hosts <<EOF 172.25.254.10 mysql-node1 172.25.254.20 mysql-node2 172.25.254.30 mysql-node3 EOFMySQL关键参数
# 组复制专用配置(追加到my.cnf) 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="172.25.254.10:33061" # 各节点IP不同 group_replication_group_seeds="172.25.254.10:33061,172.25.254.20:33061,172.25.254.30:33061" group_replication_bootstrap_group=off group_replication_single_primary_mode=OFF3.3 集群引导流程
首节点初始化
-- 安全操作:临时关闭二进制日志 SET SQL_LOG_BIN=0; -- 创建复制专用账户 CREATE USER rpl_user@'%' IDENTIFIED BY 'lee'; GRANT REPLICATION SLAVE, CONNECTION_ADMIN, BACKUP_ADMIN, GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%'; FLUSH PRIVILEGES; -- 恢复二进制日志记录 SET SQL_LOG_BIN=1; -- 配置复制通道 CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='lee' FOR CHANNEL 'group_replication_recovery'; -- 引导集群 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION USER='rpl_user', PASSWORD='lee'; SET GLOBAL group_replication_bootstrap_group=OFF;从节点加入集群
-- 遇到ERROR 3092时的处理方法 RESET MASTER; -- 清除可能存在的binlog冲突 START GROUP_REPLICATION USER='rpl_user', PASSWORD='lee'; -- 验证集群状态 SELECT * FROM performance_schema.replication_group_members;关键故障排查点:若节点长时间处于RECOVERING状态,检查防火墙是否放行33061端口,以及复制账户权限是否配置正确。
4. MySQL Router部署与优化
4.1 路由服务安装
# 下载安装包 wget https://downloads.mysql.com/archives/get/p/41/file/mysql-router-community-8.4.7-1.el9.x86_64.rpm # 安装并启用服务 dnf install mysql-router-community-8.4.7-1.el9.x86_64.rpm -y systemctl enable --now mysqlrouter4.2 路由策略配置
# /etc/mysqlrouter/mysqlrouter.conf [routing:ro] # 读路由 bind_address = 0.0.0.0 bind_port = 7001 destinations = 172.25.254.10:3306,172.25.254.20:3306,172.25.254.30:3306 routing_strategy = round-robin [routing:rw] # 写路由 bind_address = 0.0.0.0 bind_port = 7002 destinations = 172.25.254.30:3306,172.25.254.20:3306,172.25.254.10:3306 routing_strategy = first-available4.3 生产环境优化建议
- 连接池配置:增加max_connections参数避免连接耗尽
- 健康检查:配置health_check_interval监控后端节点状态
- TLS加密:启用ssl_mode=REQUIRED保障数据传输安全
- 故障转移:结合failover_strategy参数优化故障切换逻辑
5. 集群验证与性能测试
5.1 基础功能验证
-- 节点1创建测试数据 CREATE DATABASE cluster_test; CREATE TABLE cluster_test.sync_check ( id INT PRIMARY KEY, data VARCHAR(100) ); INSERT INTO cluster_test.sync_check VALUES (1, 'node1_data'); -- 节点2验证并写入 SELECT * FROM cluster_test.sync_check; INSERT INTO cluster_test.sync_check VALUES (2, 'node2_data'); -- 节点3验证数据一致性 SELECT * FROM cluster_test.sync_check ORDER BY id;5.2 路由功能测试
读写分离验证
# 读操作测试(观察连接轮询) watch -n1 "mysql -uroot -plee -h172.25.254.40 -P7001 -e 'SHOW VARIABLES LIKE \"server_id\"'" # 写操作测试(固定连接首个可用节点) mysql -uroot -plee -h172.25.254.40 -P7002 -e 'INSERT INTO cluster_test.sync_check VALUES (3, "router_test")'6. 生产环境运维要点
6.1 监控指标建议
- 组复制延迟:监控
replication_group_member_stats视图 - 冲突检测:关注
replication_group_member_stats.COUNT_TRANSACTIONS_IN_QUEUE - 路由性能:跟踪
connections_routed和active_connections指标
6.2 常见故障处理
节点加入失败
- 检查
group_replication_group_seeds配置是否包含所有节点IP - 验证各节点
server-id的唯一性 - 确认防火墙规则允许33061端口通信
数据冲突处理
-- 查看未认证事务 SELECT * FROM performance_schema.replication_group_member_stats\G -- 必要时重置本地节点 STOP GROUP_REPLICATION; RESET MASTER; START GROUP_REPLICATION USER='rpl_user', PASSWORD='lee';这套方案在实际金融级应用中表现出色,某支付平台采用类似架构后,数据库可用性从99.9%提升至99.99%,读性能通过路由扩展提升了3倍。关键在于合理设置组复制流控参数(group_replication_flow_control_mode)和定期进行网络基准测试,确保集群通信质量。