# 集群部署工具
工具类型: shell 脚本
文档更新: 2025-09-09 03:02:06
适用场景: 非云化产品的的私有化部署(自建环境)
# 一些介绍
此工具基于 Percona Server for MySQL 和 Percona XtraDB Cluster 作为 MySQL 的最佳开源替代。
** 采用基于docker的容器化部署 部署前请认真评估 **
Percona Server for MySQL (PS)
→ 基于 MySQL 社区版(Community Edition)二次开发的一个开源分支。
→ 兼容 MySQL 协议、语法、存储引擎,可以无缝替代 MySQL。
→ 主打性能增强、诊断监控、企业级功能,但保持 100% 开源。
Percona XtraDB Cluster (PXC)
→ 基于 Galera 的 MySQL 高可用集群方案。
→ 提供多主写入、强一致性、自动故障切换。
Percona XtraBackup (PXB)
→ 开源的 热备份工具,支持无锁备份 InnoDB 数据。
| 对比项 | MySQL (社区版) | Percona Server for MySQL |
| -------- | ----------------------------- | -------------------------------------- |
| **兼容性** | 官方标准,业界基准 | 完全兼容 MySQL |
| **性能优化** | 基础功能 | 优化 InnoDB/XtraDB,改进缓冲池、压缩、读写性能 |
| **监控诊断** | 基本性能视图(Performance Schema) | 增强监控视图(Userstat、扩展 Performance Schema) |
| **备份工具** | MySQL Enterprise Backup(商业收费) | Percona XtraBackup(完全开源) |
| **高可用** | MySQL InnoDB Cluster(商业功能更全) | Percona XtraDB Cluster(完全开源) |
| **授权** | 社区版 GPL,但高级功能在企业版收费 | 100% 开源(GPL / Apache) |
| **支持服务** | Oracle 商业支持 | Percona 提供商业支持 |
# 环境支持
脚本文件: multi-deploy-percona.sh
脚本功能: 在 amd64/arm64 架构的 linux 上容器化部署 percona
支持环境: amd64/arm64 + linux + bash 4.x/5.x
脚本用法: bash multi-deploy-percona.sh [i|c|d|r|t|v]
创建时间: 2025-04-01 00:51:00
更新时间: 2025-09-09 02:27:41
环境支持 - 操作系统
红帽家族: RHEL 7/8/9/10 | CentOS 7/8 | AlmaLinux 8/9/10 | Rocky 8/9/10 | OracleLinux 7/8/9/10
德班家族: Debian 10/11/12/13 | Ubuntu 18.04/20.04/22.04/24.04
Suse家族: SLES 15.4/15.5/15.6/15.7 | openSuse 15.4/15.5/15.6
国产信创: OpenCloudOS 8/9 | UOS 1050/1060/1070 A/D/E系列 | Kylin V10 SP1/SP2/SP3
OpenEuler 20.03/22.03/24.03 SP1/SP2/SP3/SP4 | Anolis 7/8/9/10 | BClinux 8
脚本用法
安装准备: 上传 脚本/安装文件 到运维机上
参数修改: 设置 sh 脚本内的相关参数以及 cfg/docker/percona.hosts 文件中的主机信息
传参示例: bash multi-deploy-percona.sh [i|c|d|r|t|v]
执行部署: bash multi-deploy-percona.sh i
卸载部署: bash multi-deploy-percona.sh r
需求检查: bash multi-deploy-percona.sh c
部署测试: bash multi-deploy-percona.sh t
安装依赖: bash multi-deploy-percona.sh d
版本信息: bash multi-deploy-percona.sh v
# 补充说明
# ########## v8中间件容器化部署工具 for percona ##########
# 1、纯离线环境部署
# 2、只支持 amd64 和 arm64 两种平台架构
# 3、任何定制化需求 可部署后自行修改和调试
# 4、只支持 percona 8.0.33+/8.4.x 的版本(与官方 mysql 8.0.x/8.4.x 对应)
# 5、运行脚本、部署和运行docker及各中间件时 需要使用 root 账号及权限 如有普通用户需求 请自行调试
# 6、不建议也不支持在不同处理器架构(如 amd64 和 arm64)的节点之间组成集群
# 7、部署信息保存在 doc/apps-deployment-summary.txt
# 8、容器化部署工具不做服务器的配置检查 请确保对应服务器的硬件配置满足要求
# 9、只支持 percona server/xtrabackup/xtradb-cluster | 不支持 percona mongodb/postgres
# 10、单机部署(ps) 和 集群部署(pxc)时 network_mode 都采用 host 模式 而不是 bridge 模式
# 11、不支持在同一台主机上进行集群或高可用部署
# 12、集群部署且启用单写模式(即启用keepalived)时 必须额外准备一个vip地址
# 采用镜像驱动部署的模式
# 基于镜像进行版本适配、架构适配、配置生成
# 完整的docker镜像url地址: <registry>/<repository>/<image>:<tag>
# 离线镜像文件名命名格式(必须严格遵守): <image>-<tag>-<arch>.<tgz|tar>
# - image: 镜像名称 必须与官方镜像地址里的一致
# - tag: 镜像标签 必须与官方镜像地址里的一致
# - arch: 镜像架构 只能是 amd64 或 arm64 必须与实际架构匹配
# - tgz|tar: 镜像文件的后缀名 支持两种格式 均可被 docker load 所导入
# 例如:
# percona-server-8.0.35-amd64.tgz
# percona-server-8.0.35-arm64.tgz
# percona-xtrabackup-8.0.35-amd64.tgz
# percona-xtrabackup-8.0.35-arm64.tgz
# percona-xtradb-cluster-8.0.35-amd64.tgz
# percona-xtradb-cluster-8.0.35-arm64.tgz
# percona-server-8.4.5-amd64.tgz
# percona-server-8.4.5-arm64.tgz
# percona-xtrabackup-8.4.0-amd64.tgz
# percona-xtrabackup-8.4.0-arm64.tgz
# percona-xtradb-cluster-8.4.5-amd64.tgz
# percona-xtradb-cluster-8.4.5-arm64.tgz
# 工具下载
网盘地址: https://pan.baidu.com/s/1vtQc-7CxVjjpzsNxQoIaug?pwd=2025
大致步骤:
从网盘下载全量包,上传到运维机,然后解压,按需配置脚本参数和SSH主机信息,执行脚本安装。
# 上传文件
# 配置参数
# 调整脚本参数
vim multi-deploy-percona.sh
######################## 按需修改以下配置 ########################
# 是否使用自定义版本进行部署 1=是 空值或其他值=否 若不开启则自动在本地查找最新版本进行部署
# 注意: psVer/pxcVer 对应 pxbVer 的主版本号和次版本号必须一致
useCustomVer="1"
dockerVer="28.4.0"
psVer="8.0.43"
pxcVer="8.0.42"
pxbVer="8.0.35"
keVer="2.3.3"
# prxVer="3.0.2"
# 目标主机上的安装根目录
# 将在此目录下自动创建对应软件的子目录进行部署 相关配置、数据、日志都会在此子目录下保存 ***** 切勿随意删除此目录下的子目录 *****
# 建议部署前先准备独立磁盘 格式化为xfs文件系统 使用uuid的方式挂载到安装根目录 且设置好开机自动挂载
instRootDir="/data"
# 目标主机上存放部署相关文件的临时目录 必须是绝对路径 可按需修改
pushDir="/data/temp"
# 检测到已安装时 要采取的操作 只能是 skip|force 其中 skip=跳过安装 | force=强制重装 清除所有数据之后全新安装 *** 慎重开启 ***
onExistAct="force"
# 是否安装依赖 1=是 空值或其他值=否 作用域: 运维机和目标主机 容器化部署可不开启
installDeps=""
# 是否检查依赖 1=是 空值或其他值=否 作用域: 运维机和目标主机 容器化部署可不开启
checkDeps=""
# 安装软件前 当检测到服务已启动时是否自动关闭 1=是 空值或其他值=否 否则停止安装
autoStopSrv="1"
# 是否自动优化系统 1=是 空值或其他值=否 作用域: 目标主机
autoTuneSystem=""
# 是否自动设置主机名 1=是 空值或其他值=否 需设置 autoTuneSystem="1"
autoSetHostname="1"
# 是否自动设置时区 1=是 空值或其他值=否 需设置 autoTuneSystem="1"
autoSetTimezone="1"
# 系统时区 若是国内 不要修改 例如: Asia/Shanghai 或 Asia/Hong_Kong
osTimezone="Asia/Shanghai"
# 集群部署时 是否检查目标主机的时间一致性 1=是 空值或其他值=否 作用域: 目标主机 不需要检查时间是否一致时 可关闭此功能
checkTimeConsistency=""
# 集群部署时 是否检查目标主机的平台架构一致性 1=是 空值或其他值=否 作用域: 目标主机 不要求平台架构是否一致时 混网环境勿开启
checkArchConsistency="1"
# 集群部署时 是否检查目标主机的操作系统一致性 1=是 空值或其他值=否 作用域: 目标主机 不需要检查OS是否一致时 可关闭此功能
checkOSConsistency=""
# 集群部署时 是否检查目标主机的系统内核一致性 1=是 空值或其他值=否 作用域: 目标主机 不需要检查内核是否一致时 可关闭此功能
checkKernConsistency=""
# 集群部署时 是否检查目标主机的网卡一致性 1=是 空值或其他值=否 作用域: 目标主机 不需要检查网络接口是否一致时 集群部署时不可关闭此参数
checkEthConsistency="1"
# 集群部署时 是否检查目标主机的时区一致性 1=是 空值或其他值=否 作用域: 目标主机 不需要检查时区是否一致时 可关闭此功能
checkTZConsistency=""
# 当部署 ps 时(单机部署)是否部署 pxb 1=是 空值或其他值=否
psDeployPxb="1"
# 当部署 pxc 时(集群部署)是否部署 pxb 1=是 空值或其他值=否
pxcDeployPxb="1"
# 当部署 pxc 时(集群部署)是否部署 ke 1=是 空值或其他值=否 适用于单写场景
pxcDeployKe="1"
# 当部署 pxc 且启用 ke 时的vip地址 必填
pxcVipAddr="192.168.100.130"
# 当部署 pxc 且启用 ke 时的vip的cidr 必填
pxcVipCIDR="32"
# 当部署 pxc 时(集群部署)的集群名称
pxcClusterName="v8-pxc"
# 当部署 pxc 时(集群部署)是否部署 prx 1=是 空值或其他值=否 适用于单写/读写分离等场景 预留参数
# pxcDeployPrx="1"
# mysql/ps/pxc
# 数据库 访问端口
dbPort="3306"
# 数据库 管理员用户 不要修改
dbUser="root"
# 数据库 管理员密码 如果使用随机生成的密码 请留空
dbPass=""
# pxc galera 数据复制端口
# wsrepPort="4567"
# pxc Incremental State Transfer 端口
# istPort="4568"
# pxc 全量 State Transfer/XtraBackup 端口
# sstPort="4444"
# prxAdminUser="admin"
# prxAdminPass=""
# xtrabackup 远程备份/恢复端口
pxbPort="4444"
# proxysql # 管理端口
# prxAdminPort="6032"
# proxysql 的 MySQL 客户端访问端口
# prxdbPort="6033"
# 是否自动创建 xtrabackup 复制与备份账号
# createPxbUser="1"
# xtrabackup 专用账号用户
# pxbUser="xtrabackup"
# xtrabackup 专用账号密码 如果使用随机生成的密码 请留空
pxbPass=""
# 是否自动创建 proxysql 后端数据库连接账号
# createPrxUser="1"
# proxysql 专用账号用户
# prxDbUser="prxuser"
# proxysql 专用账号密码 如果使用随机生成的密码 请留空
# prxDbPass=""
# docker 相关设置
# 容器名前缀 容器名称和容器网络 都使用此前缀 脚本会自动添加-进行拼接 结果如: v8-redis | v8-network
containerPrefix="v8"
# 随机密码的密码长度
genPassLen="12"
# 随机密码的密码字典 建议不要包含其他特殊字符 以期避免异常
genPassChars="0-9a-zA-Z-_^#"
# TLS 密钥长度
len="4096"
# TLS 证书有效期 单位为天
days="3650"
# 证书主题信息/证书申请信息
# subj参数
# 字段 字段含义 示例
# C Country 国家 CN
# ST State or Province 省份 GuiZhou
# L Location or City 城市 GuiYang
# O Organization 组织 DevOps
# OU Organization Unit 部门 DevOps
# CN Common Name 域名 seeyon.ren
C="CN"
ST="GuiZhou"
L="GuiYang"
O="example"
OU="example"
CN="example.com"
emailAddress="example@example.com"
# 软件部署完成后是否测试业务可用性 1=是 空值或其他值=否
isTestSrv=""
######################## 按需修改以上配置 ########################
# 调整主机信息
vim cfg/docker/percona.hosts
# 执行安装
bash multi-deploy-percona.sh i
集群部署完成后,可通过访问各个节点地址或vip地址连接数据库。以下sql可查询当前集群状态:
-- 查看 Galera (wsrep) 的运行状态,比如集群大小、复制延迟、同步情况等
SHOW GLOBAL STATUS LIKE 'wsrep%';
-- 查看当前节点的名称 (wsrep_node_name),用于识别自己是哪个节点
SHOW VARIABLES LIKE 'wsrep_node_name';
-- 查看当前节点的地址 (wsrep_node_address),通常是 IP,用于确认自己在哪个主机
SHOW VARIABLES LIKE 'wsrep_node_address';
# 单机部署截图如下
# 集群部署截图如下
# 执行卸载
为了数据安全,务必谨慎操作,提前备份数据。
bash multi-deploy-percona.sh r
编撰人:yangfc
