在生产级别数据库架构中,单节点MySQL往往面临单点故障、维护停机、扩展能力弱等问题。借助Galera多主复制技术(如Percona XtraDB Cluster或MariaDB Galera),可以构建一个具备高可用(HA)、自动故障恢复、数据强一致性和读写扩展能力的MySQL 集群。A5数据本方案基于CentOS 7.9Percona XtraDB Cluster 8.0进行实战部署与性能评估。


一、架构概述与适用场景

Galera Cluster是一个同步复制的多主数据库集群,特点如下:

  • 同步复制:所有节点的数据实时一致,事务提交在多数节点成功才算成功。
  • 多主写入:任意节点均可写入。
  • 自动节点加入/离开:故障节点可自动移除,新节点可自动加入。
  • 无需共享存储:通过组复制实现一致性。

适用场景:

  • 对业务连续性要求高(99.99% UP)的在线服务;
  • 读写负载均衡与水平扩展;
  • 容错性强的分布式数据库架构。

二、香港服务器www.a5idc.com硬件与网络规划(参考配置)

对于典型业务数据库服务,以下是推荐的硬件基础配置(3节点Galera Cluster):

节点角色CPU内存存储网络
db-node-018核 Intel Xeon32 GB1×500 GB NVMe SSD10 GbE
db-node-028核 Intel Xeon32 GB1×500 GB NVMe SSD10 GbE
db-node-038核 Intel Xeon32 GB1×500 GB NVMe SSD10 GbE
见证/仲裁(可选)4核8 GB100 GB1 GbE

网络要求

  • 三个节点之间必须低延迟、稳定(建议<1 ms);
  • TCP端口需开放:3306(MySQL),4567(Galera Replication),4568(IST),4444(SST)。

三、系统与软件版本选型

软件组件推荐版本说明
操作系统CentOS 7.9稳定、企业级支持
Galera ClusterPercona XtraDB Cluster 8.0支持MySQL 8.0协议,性能与稳定性优
wsrep ProviderPercona XtraDB Cluster wsrepGalera组复制库

四、环境准备

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-idwsrep_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=1
  • wsrep_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,20018单点性能基线
Galera 3节点写入3,80022多主同步开销
Galera 3节点读扩展7,50011读请求分摊
HAProxy 负载下7,00012均衡读写

分析

  • 写性能因同步复制而略低于单节点;
  • 读性能通过负载均衡显著提升;
  • 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)与备份策略(定期冷备与增量备份),可作为下一步架构优化的重点。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐