上一篇 下一篇 分享链接 返回 返回顶部

香港服务器高可用 MySQL 集群搭建全攻略:用 Galera + ProxySQL 秒杀双12流量高峰,零宕机零延迟!

发布人:Minchunlin 发布时间:2026-01-08 09:37 阅读量:465


几个月前,我们接到了一家跨境电商平台的紧急需求,他们的香港服务器集群在双12购物节期间遭遇了严重的性能瓶颈。访问量突增、数据库写入延迟加剧、数据同步不稳定,整个系统的响应时间急剧上升,严重影响了用户体验。作为运维团队,A5IDC深知,这样的故障不仅仅是一次系统崩溃那么简单——它关乎到企业的声誉与业务持续性。

为了彻底解决这个问题,A5IDC决定从底层架构入手,搭建一个高可用的 MySQL 集群。经过多方考量,我们选择了 Galera 作为集群方案,并通过 ProxySQL 进行流量的智能路由和负载均衡。通过这次实践,我们成功地在香港服务器上部署了一个稳定、低延迟的高可用 MySQL 集群,确保了双12的流量高峰期间,平台能够平稳运行,达到预期的业务目标。

1 前言:为什么选择 Galera + ProxySQL

高可用 MySQL 集群方案中,Galera Protocol 提供“几乎同步”数据复制与多主写入能力,而 ProxySQL 担任 SQL 层负载分发与故障切换代理。Galera 通过 wsrep 实现同步复制架构,避免主从延迟问题;ProxySQL 在 2.x 版本中已原生支持 Galera 状态监控与读写分离策略,适合生产环境使用。

2 部署前环境准备与资源评估

2.1 硬件与网络建议(表 1)

在香港部署生产级数据库集群需要考虑延迟、带宽与存储性能。

表 1:基础硬件与网络配置建议

推荐规格 说明
CPU 8 核以上 高并发处理能力
内存 32GB – 64GB 提升 InnoDB buffer pool 容量
存储 NVMe SSD ×2(RAID1) 提升 I/O 吞吐与可靠性
带宽 1Gbps BGP 直连 保证跨境访问低延迟
网络延迟 ≤20ms 节点间通信对 Galera 同步高敏感
机房 多可用区部署 防止单机房故障

说明:Galera 网络健康对同步性能极为关键;带宽不足或高延迟会显著拉高写入延迟。A5IDC建议选择香港运营商提供的 BGP + CN2 网络组合以优化国际用户访问。

3 Galera 集群架构与节点配置

3.1 节点规划与拓扑设计

最推荐的 Galera 拓扑至少为 3 个节点,避免单点故障及保证 quorum。如下布局:

+----------------+
| Application    |
+--------+-------+
         |
     +--- ProxySQL 集群 (3 节点)
         |
+--------+--------+
|  Galera Cluster |
|  Node1 Node2 Node3 |
+-------------------+

3.2 Percona XtraDB Cluster 安装与配置

这里A5IDC建议使用 Percona XtraDB Cluster (PXC) 作为 Galera 实现,它集成了 Galera & XtraBackup 工具,有成熟的生产实践。

3.2.1 软件安装

# 安装 PXC(以 Ubuntu 22.04 为例)
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo percona-release setup pxc-80
sudo apt update
sudo apt install percona-xtradb-cluster-80

3.2.2 wsrep 与 cluster 配置(/etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf)

[mysqld]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="hk_galera_cluster"
wsrep_node_address="10.0.1.1"      # 当前节点 IP
wsrep_cluster_address="gcomm://10.0.1.1,10.0.1.2,10.0.1.3"
wsrep_sst_method=xtrabackup-v2
wsrep_node_name="galera-node1"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

注意

  • wsrep_cluster_address 中列出所有节点。
  • Xtrabackup SST 方法是最常用和安全的状态传输方式。

3.2.3 启动集群

sudo systemctl start mysql@bootstrap.service   # 第一个节点
sudo systemctl start mysql.service             # 其它节点

3.3 Galera 同步调优核心参数

参数 建议值 注释
wsrep_slave_threads 4 – 8 并行应用写集
gcache.size 2G – 10G 控制 IST 可用 buffer
innodb_buffer_pool_size 70% 内存 InnoDB 缓冲池

gcache 是 Galera 用于加速状态转移的缓存,通过增大 gcache size 能减少 SST 发生频率,提高集群扩容效率。

4 ProxySQL 与 Galera 集群无缝集成

ProxySQL 是应用层代理,可实现流量的智能路由、读写分离、健康检测与故障切换。

4.1 安装 ProxySQL 2.x

# CentOS
yum install proxysql2 -y
# Ubuntu
apt install proxysql2 -y

4.2 ProxySQL Admin 连接

默认 ProxySQL 管理端口是 6032

mysql -u admin -padmin -h127.0.0.1 -P6032

A5IDC强烈建议 修改默认密码并限制管理端访问。

4.3 定义 Galera Hostgroups

在 ProxySQL 中,针对 Galera 集群创建 hostgroups,用于读写分离及健康管理:

INSERT INTO mysql_galera_hostgroups (writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, max_writers, writer_is_also_reader, max_transactions_behind)
VALUES (10, 12, 11, 13, 1, 1, 1, 100);

解释:

  • writer_hostgroup:主写组
  • reader_hostgroup:读组
  • max_transactions_behind:滞后阈值,用于判定节点是否脱机

4.4 添加 Galera 节点到 ProxySQL

INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight) VALUES (10,'10.0.1.1',3306,1000);
INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight) VALUES (10,'10.0.1.2',3306,1000);
INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight) VALUES (10,'10.0.1.3',3306,1000);

然后:

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

4.5 创建监控用户与配置健康检查

在每个 Galera 节点执行:

CREATE USER 'proxysql_monitor'@'%' IDENTIFIED BY 'MonitorPass';
GRANT USAGE ON *.* TO 'proxysql_monitor'@'%';

在 ProxySQL:

UPDATE global_variables SET variable_value='proxysql_monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='MonitorPass' WHERE variable_name='mysql-monitor_password';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

然后检查监控日志:

SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 6;

说明:ProxySQL 会定期 ping 每个后台节点,通过健康检查表调整路由。

5 高可用负载均衡与流量控制

5.1 读写分离策略

常见策略是将写入定向至 writer hostgroup,而读请求分发给 reader hostgroup:

INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup)
VALUES (1,1,'^SELECT',11);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

5.2 节点故障与自动切换

当某节点不可达,ProxySQL 会自动变更该节点状态并从 hostgroup 中剔除;当节点恢复,健康检查通过后会重新加入路由列表。

注意:Galera 节点掉线可能触发 quorum 失效,需要至少超过半数节点存活保证集群写入可用。

6 监控与性能优化

6.1 推荐监控方案

  • Percona Monitoring and Management (PMM):可监控查询响应时间、InnoDB 状态、CPU/IO 指标。
  • 自定义脚本:用于检测 wsrep 相关参数变化(如 wsrep_local_state_comment)与 ProxySQL health。

6.2 性能瓶颈优化建议

方向 建议调整
InnoDB 调优 增加 innodb_buffer_pool_size
Galera 提高 wsrep_slave_threads 并配置更大 gcache
ProxySQL 调整 connection pool 与 timeout

7 故障恢复与容灾策略

7.1 故障重建 SST/IST

当节点长期离线后加入集群,Galera 会触发 SST(全量复制)或 IST(增量复制):

  • SST:需要全量传输,时间长但保证一致性。
  • IST:使用 gcache,速度快,推荐配置足够大缓存。

7.2 数据备份策略

推荐采用 Percona XtraBackup 自动化周期备份:

xtrabackup --backup --target-dir=/data/backup/$(date +%F)

设置自动清理与恢复脚本保证 RTO/RPO 满足业务需求。

8 常见问题与解决方案

8.1 网络延迟导致写性能不理想

Galera 的同步复制对延迟非常敏感。A5IDC建议:

  • 优化网络选路,使用高速 BGP + CN2
  • 集群节点应尽量位于同机房或低延迟链路

8.2 ProxySQL 与应用连接数过高

可通过 ProxySQL 调整 mysql-max_connectionsmysql-default_query_timeout 等参数达到控制效果。

8.3 Schema 更改与 DDL

Galera 对在线 DDL 支持有限,建议使用 pt-oscgh-ost 做在线变更,防止集群阻塞。

9 结语

基于 Galera + ProxySQL 的高可用 MySQL 集群在香港服务器上的实现,需要综合考虑网络、硬件、监控与运维策略。通过合理的配置、监控与自动化工具结合,可以在高并发、跨境访问场景下实现稳定与可扩展性。

如需进一步细化到具体业务场景(例如大流量电商峰值、地理分布容灾等),A5IDC建议你可以在现有架构基础上引入应用层缓存、跨区域数据复制与自动化运维工具链。

目录结构
全文