实战指南:基于Percona XtraDB Cluster 构建高可用 MySQL 集群架构
引言:为什么选择PXC?
Percona XtraDB Cluster(PXC)是基于Galera协议的MySQL高可用解决方案,提供同步多主复制、数据强一致性等关键特性,特别适合需要高可用性和数据完整性的金融、电商等场景。
一、环境规划与准备工作
1.1 集群拓扑设计
主机IP(CentOS 7.x) | 节点角色 |
---|---|
172.25.254.11 | pxc1 |
172.25.254.12 | pxc2 |
172.25.254.13 | pxc3 |
架构原理:PXC采用多主架构,所有节点均可读写,通过Galera Cluster实现事务的同步复制(certification-based replication)
1.2 基础环境配置
# 所有节点执行
hostnamectl set-hostname pxc[1-3]
echo "172.25.254.11 pxc1
172.25.254.12 pxc2
172.25.254.13 pxc3" >> /etc/hosts# 验证网络互通
ping -c 4 pxc2 && ping -c 4 pxc3# 所有节点执行
bash
二、高效部署方案
2.1 下载官方RPM(不推荐)
下载地址: https://www.percona.com/downloads
# 依赖包示例(需安装大量依赖项)
audit-libs-python.x86_64 0:2.8.5-4.el7
checkpolicy.x86_64 0:2.5-8.el7
libev.x86_64 0:4.15-7.el7
libsemanage-python.x86_64 0:2.5-14.el7
percona-xtradb-cluster-client.x86_64 0:8.0.37-29.1.el7
percona-xtradb-cluster-icu-data-files.x86_64 0:8.0.37-29.1.el7
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
perl-DBD-MySQL.x86_64 0:4.023-6.el7
perl-DBI.x86_64 0:1.627-4.el7
perl-Data-Dumper.x86_64 0:2.145-3.el7
perl-IO-Compress.noarch 0:2.061-2.el7
perl-Net-Daemon.noarch 0:0.48-5.el7
perl-PlRPC.noarch 0:0.2020-14.el7
policycoreutils-python.x86_64 0:2.5-34.el7
python-IPy.noarch 0:0.75-6.el7
qpress.x86_64 0:11-3.el7
setools-libs.x86_64 0:3.3.8-4.el7
缺点:依赖复杂、版本冲突风险高
2.2 官方仓库部署(推荐)
官方文档:https://docs.percona.com/percona-xtradb-cluster/8.0/yum.html#install-from-percona-software-repository
# 删除 MariaDB 程序包
yum -y remove mari*# 禁用系统默认MySQL模块
yum module disable mysql -y# 安装Percona官方仓库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
percona-release setup pxc-80# 安装PXC核心组件(包含Galera库,速度较慢)
yum install percona-xtradb-cluster -y
优势:自动解决依赖、保持版本一致性、支持后续升级
三、集群初始化与配置
3.1 核心配置文件
# /etc/my.cnf 关键参数说明
[mysqld]
# 必须全局唯一
server-id = 1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock# Galera配置段
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
# PXC集群的名称
wsrep_cluster_name=pxc_cluster
# PXC集群的所有IP
wsrep_cluster_address=gcomm://172.25.254.11,172.25.254.12,172.25.254.13
# 当前节点IP
wsrep_node_address=172.25.254.11
# 当前节点名称
wsrep_node_name=pxc1
# 同步方法
wsrep_sst_method=xtrabackup-v2
四、集群启动与验证
4.1 引导节点初始化
# 首个节点启动(注意必须带bootstrap参数)
systemctl start mysql@bootstrap.service# 获取临时密码
grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'# 修改密码策略(先登录,密码随意,符合MySQL密码策略即可)
alter user root@localhost identified by 'MySQL@?';
4.2 集群扩展
# 证书同步(保障节点间安全通信)
scp -rp /var/lib/mysql/*.pem pxc2:/var/lib/mysql/
scp -rp /var/lib/mysql/*.pem pxc3:/var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/# 启动后续节点前检查
systemctl status firewalld # 必须关闭防火墙
getenforce # 应为Disabled# 查看集群状态(重点指标)
mysql> SHOW STATUS LIKE 'wsrep%';
# 留意以下信息
| wsrep_incoming_addresses | 172.25.254.11:3306
| wsrep_cluster_size | 1
| wsrep_cluster_status | Primary
| wsrep_connected | ON
| wsrep_ready | ON# 启动后续节点
systemctl start mysqld
# 在引导节点观察集群状态
mysql> SHOW STATUS LIKE 'wsrep_cluster_size';# 加入完毕后,在任意节点观察集群状态
mysql> show status like 'wsrep_cluster%';
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_cluster_weight | 3 |
| wsrep_cluster_capabilities | |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 5b679b77-e7d1-11ef-bfb5-7a1208e170bc |
| wsrep_cluster_status | Primary |
+----------------------------+--------------------------------------+
五、安全下线流程
# 普通节点下线
systemctl stop mysqld# 引导节点下线
systemctl stop mysql@bootstrap.service