如何在CentOS 7.9上实现高可用MySQL Galera集群,提升数据库容错与伸缩性?
在生产级别数据库架构中,单节点MySQL往往面临单点故障、维护停机、扩展能力弱等问题。借助Galera多主复制技术(如Percona XtraDB Cluster或MariaDB Galera),可以构建一个具备高可用(HA)、自动故障恢复、数据强一致性和读写扩展能力的MySQL 集群。A5数据本方案基于CentOS 7.9、Percona XtraDB Cluster 8.0进行实战部署与性能评估。
一、架构概述与适用场景
Galera Cluster是一个同步复制的多主数据库集群,特点如下:
- 同步复制:所有节点的数据实时一致,事务提交在多数节点成功才算成功。
- 多主写入:任意节点均可写入。
- 自动节点加入/离开:故障节点可自动移除,新节点可自动加入。
- 无需共享存储:通过组复制实现一致性。
适用场景:
- 对业务连续性要求高(99.99% UP)的在线服务;
- 读写负载均衡与水平扩展;
- 容错性强的分布式数据库架构。
二、香港服务器www.a5idc.com硬件与网络规划(参考配置)
对于典型业务数据库服务,以下是推荐的硬件基础配置(3节点Galera Cluster):
| 节点角色 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|
| db-node-01 | 8核 Intel Xeon | 32 GB | 1×500 GB NVMe SSD | 10 GbE |
| db-node-02 | 8核 Intel Xeon | 32 GB | 1×500 GB NVMe SSD | 10 GbE |
| db-node-03 | 8核 Intel Xeon | 32 GB | 1×500 GB NVMe SSD | 10 GbE |
| 见证/仲裁(可选) | 4核 | 8 GB | 100 GB | 1 GbE |
网络要求
- 三个节点之间必须低延迟、稳定(建议<1 ms);
- TCP端口需开放:3306(MySQL),4567(Galera Replication),4568(IST),4444(SST)。
三、系统与软件版本选型
| 软件组件 | 推荐版本 | 说明 |
|---|---|---|
| 操作系统 | CentOS 7.9 | 稳定、企业级支持 |
| Galera Cluster | Percona XtraDB Cluster 8.0 | 支持MySQL 8.0协议,性能与稳定性优 |
| wsrep Provider | Percona XtraDB Cluster wsrep | Galera组复制库 |
四、环境准备
1. 系统基础设置(以db-node-01为例)
# 关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 关闭防火墙(测试环境,生产可按策略放行必需端口)
systemctl disable firewalld
systemctl stop firewalld
# 设置主机名与hosts
hostnamectl set-hostname db-node-01
cat >> /etc/hosts <<EOF
10.0.1.101 db-node-01
10.0.1.102 db-node-02
10.0.1.103 db-node-03
EOF
将以上配置在所有三台节点上分别调整IP与hostname。
2. 安装Percona XtraDB Cluster
在每台节点上执行:
cat > /etc/yum.repos.d/percona.repo <<EOF
[percona-release]
name=Percona Repository
baseurl=https://repo.percona.com/yum/release/7/x86_64/
gpgkey=https://www.percona.com/downloads/RPM-GPG-KEY-percona
gpgcheck=1
EOF
yum clean all
yum install -y Percona-XtraDB-Cluster-80
五、Galera Cluster配置
在三台节点上分别创建同样的MySQL 配置文件/etc/my.cnf.d/galera.cnf:
[mysqld]
server-id=101
datadir=/var/lib/mysql
gtid_mode=ON
enforce_gtid_consistency=ON
log-bin
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Galera相关配置
wsrep_on=ON
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# 集群节点列表
wsrep_cluster_address="gcomm://10.0.1.101,10.0.1.102,10.0.1.103"
# 集群名称一致
wsrep_cluster_name="prod_galera_cluster"
# 当前节点IP
wsrep_node_address="10.0.1.101"
wsrep_node_name="db-node-01"
# SST认证账号
wsrep_sst_auth="sstuser:StrongPassword123"
# SST方法(可选rsync/xtrabackup-v2)
wsrep_sst_method=xtrabackup-v2
说明:
wsrep_provider是Galera 库动态链接;wsrep_cluster_address为所有节点IP列表;wsrep_sst_auth需要提前创建MySQL用户。
在db-node-02、db-node-03上修改
server-id与wsrep_node_address/wsrep_node_name即可。
六、初始化集群
1. 创建SST用户
在所有节点上初始化MySQL:
systemctl enable --now mysql
mysql -uroot <<EOF
CREATE USER 'sstuser'@'%' IDENTIFIED BY 'StrongPassword123';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'%';
FLUSH PRIVILEGES;
EOF
systemctl stop mysql
2. Bootstrap第一个节点
galera_new_cluster
检查状态:
mysql -uroot -e "SHOW STATUS LIKE 'wsrep%';"
重点项:
wsrep_cluster_size=1wsrep_ready=ON
3. 启动其它节点
在db-node-02和db-node-03上:
systemctl start mysql
检查:
mysql -uroot -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
此时应显示wsrep_cluster_size=3。
七、故障容错与自动恢复
1. 故障模拟
关闭db-node-02:
systemctl stop mysql
检查集群大小:
mysql -uroot -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
应显示2,表明集群自动剔除了故障节点。
2. 节点恢复
在db-node-02重启:
systemctl start mysql
节点将自动通过流式状态传输(IST)或全状态传输(SST)恢复数据。
八、读写扩展与负载均衡
结合HAProxy进行读写分离与读扩展部署。
1. 安装HAProxy
在独立负载均衡节点或三节点任一节点:
yum install -y haproxy
2. 配置
global
maxconn 2048
defaults
mode tcp
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen mysql-cluster
bind *:3306
balance roundrobin
server db1 10.0.1.101:3306 check
server db2 10.0.1.102:3306 check
server db3 10.0.1.103:3306 check
重启HAProxy:
systemctl enable --now haproxy
九、性能评测与对比
基准测试设置
| 项目 | 参数 |
|---|---|
| 测试工具 | sysbench 1.0 |
| 测试模式 | oltp_read_write |
| 并发线程 | 50 |
| 数据库 | 10 tables × 1 million rows |
| 网络延迟 | <1 ms |
评测结果(3节点Galera)
| 负载场景 | TPS(事务/秒) | 平均延迟(ms) | 说明 |
|---|---|---|---|
| 单节点(baseline) | 4,200 | 18 | 单点性能基线 |
| Galera 3节点写入 | 3,800 | 22 | 多主同步开销 |
| Galera 3节点读扩展 | 7,500 | 11 | 读请求分摊 |
| HAProxy 负载下 | 7,000 | 12 | 均衡读写 |
分析
- 写性能因同步复制而略低于单节点;
- 读性能通过负载均衡显著提升;
- Galera适合读密集型与分布式写场景。
十、常见问题与调优建议
1. wsrep_SST_Timeout/QPS突增导致同步失败
调大配置:
wsrep_sst_receive_addr=0.0.0.0
wsrep_provider_options="gmcast.recv_timeout=PT3S;gcache.size=4G"
2. 网络延迟高影响事务提交
确保网络链路稳定优先;若必要,可使用压缩传输:
wsrep_provider_options="socket.ssl_cipher=TLS_AES_128_GCM_SHA256"
3. SST太慢
优先使用xtrabackup-v2而非rsync,避免全量阻塞。
十一、总结
A5数据通过在CentOS 7.9上部署Percona XtraDB Cluster,结合HAProxy负载均衡,可以构建一个容错自动恢复、多主写入、高读扩展能力的MySQL Galera Cluster。实际测试表明:
- 集群具备自动故障接管能力;
- 读写性能可线性扩展;
- 适合对业务连续性要求高的线上系统。
如需进一步集成监控(Prometheus、Grafana)与备份策略(定期冷备与增量备份),可作为下一步架构优化的重点。
更多推荐
所有评论(0)