从零构建高可用MySQL集群:Percona XtraDB Cluster 实战部署

news/2025/2/12 10:45:22/

实战指南:基于Percona XtraDB Cluster 构建高可用 MySQL 集群架构

引言:为什么选择PXC?

Percona XtraDB Cluster(PXC)是基于Galera协议的MySQL高可用解决方案,提供同步多主复制、数据强一致性等关键特性,特别适合需要高可用性和数据完整性的金融、电商等场景。


一、环境规划与准备工作

1.1 集群拓扑设计
主机IP(CentOS 7.x)节点角色
172.25.254.11pxc1
172.25.254.12pxc2
172.25.254.13pxc3

架构原理: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

http://www.ppmy.cn/news/1571399.html

相关文章

【用Deepseek搭建免费的个人知识库--综合教程(完整版)】第二篇:Ollama服务器

用Deepseek搭建免费的个人知识库–综合教程(完整版):第二篇:Ollama服务器部署 OLLAMA服务器的配置在很多网上都已经介绍的非常清楚了,我们的重点不在于那些简单的步骤,而是在需要为下一步做准备的地方更加…

iOS AES/CBC/CTR加解密以及AES-CMAC

感觉iOS自带的CryptoKit不好用,有个第三方库CryptoSwift还不错,好巧不巧,清理过Xcode缓存后死活下载不下来,当然也可以自己编译个Framework,但是偏偏不想用第三方库了,于是研究了一下,自带的Com…

Agent论文阅读:NormEnforcement with a Soft Touch: Faster Emergence, Happier Agents

摘要(ABSTRACT) 在多智能体系统(multiagent system, MAS)中,智能体之间的交互可通过社会规范(social norms)进行调节。通常,社会规范并非预设的规则(hardcoded rules&am…

数据结构与算法之数组: LeetCode 541. 反转字符串 II (Ts版)

反转字符串 II https://leetcode.cn/problems/reverse-string-ii/description/ 描述 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余…

元宇宙中的隐私与数据保护:Facebook 的挑战与机遇

随着数字技术的飞速发展,元宇宙(Metaverse)正逐渐成为未来互联网的新舞台。Meta,作为这一领域的先行者,正面临着隐私与数据保护的双重挑战。本文将探讨 Meta 在元宇宙中的隐私与数据保护问题,并分析其可能的…

stm32小白成长为高手的学习步骤和方法

我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。STM32单片机自学教程 这篇博文也是一篇不错的入门教程,初学者可以看看,讲的真心不错。 英文好的同学&#xf…

2025.2.11

1> 制作一个闹钟软件 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QTime> #include <QTimer> #include <QTimeEdit> #include <QDa…

VMware Workstation创建虚拟机

目录 创建新的虚拟机 虚拟机快照功能 虚拟机添加空间 其他注意事项 创建新的虚拟机 打开VMware Workstation&#xff1a;启动软件后&#xff0c;点击“创建新的虚拟机”。 选择安装方式&#xff1a; 典型安装&#xff1a;适合大多数用户&#xff0c;会自动完成大部分配置…