arm环境基于docker部署pxc-mysql集群
前言
24年之前部署过了,但过去几百天了需要更新过程吧,之前是使用amd构建部署的,这次是arm环境下进行部署,也是参考以前部署笔记,地址https://199604.com/2966
部署过程
环境
10.202.17.47 host47
10.202.17.48 host48
10.202.17.12 host12
安装docker和安装docker-compose
省略,具体参考一键部署脚本。
PXC集群安装
创建证书
percona集群要求必须安装证书,集群实现加密通讯,参考:https://docs.percona.com/percona-xtradb-cluster/8.0/docker.html
mkdir -m 777 -p /AppHome/docker/mysql-cluster/config
mkdir -m 777 -p /AppHome/docker/mysql-cluster/cert
mkdir -m 777 -p /AppHome/docker/mysql-cluster/logs
mkdir -m 777 -p /AppHome/docker/mysql-cluster/data
mkdir -m 777 -p /AppHome/docker/mysql-cluster/socket
#创建custom.cnf文件到config
cd /AppHome/docker/mysql-cluster/config
vim custom.cnf
# Percona XtraDB Cluster 自定义配置
# 文件位置: /AppHome/docker/mysql-cluster/config/custom.cnf
[mysqld]
# 禁用 DNS 反向解析,避免 IP 地址解析告警,提升连接性能
skip-name-resolve
# SSL/TLS 配置 - 用于加密客户端连接
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem
[client]
# 客户端 SSL 配置
ssl-ca = /cert/ca.pem
ssl-cert = /cert/client-cert.pem
ssl-key = /cert/client-key.pem
[sst]
# SST (State Snapshot Transfer) 加密配置 - 用于节点间数据同步
encrypt = 4
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem
集群内所有机器必须有此配置
生成证书
# 其中一台机器执行
docker run --name pxc-cert --rm -v /AppHome/docker/mysql-cluster/cert:/cert \
reg-hub.gzeport.com/library/percona/percona-xtradb-cluster:8.0.45 mysql_ssl_rsa_setup -d /cert
# 设置证书对应权限
chown -R 1001:1001 /AppHome/docker/mysql-cluster/cert
# 拷贝到其他节点机器
scp /AppHome/docker/mysql-cluster/cert/* host47:/AppHome/docker/mysql-cluster/cert/
scp /AppHome/docker/mysql-cluster/cert/* host47:/AppHome/docker/mysql-cluster/cert/
证书必须所有节点都一致!在一台机器生成后拷贝到其他机器。!必须存在
custom.cnf文件!
搭建pxc集群
启动一个节点后再启动后面的!节点1开始先注释
CLUSTER_JOIN,故障重启在放开注释
version: '3.8'
services:
# Percona XtraDB Cluster 节点 - Host47
mysql-host47:
image: reg-hub.gzeport.com/library/percona/percona-xtradb-cluster:8.0.45
container_name: mysql-host47
privileged: true
restart: always
network_mode: host
environment:
# 时区设置
- TZ=Asia/Shanghai
# 集群名称 - 必须设置,同一集群的所有节点必须使用相同的名称
- CLUSTER_NAME=pxc-mysql
# 集群加入配置 - Host47 节点加入其他两个节点(排除自己)
# - CLUSTER_JOIN=10.202.17.48,10.202.17.12
# MySQL root 用户密码 - 必须设置(三选一: MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD, MYSQL_RANDOM_ROOT_PASSWORD)
- MYSQL_ROOT_PASSWORD=pwd
- XTRABACKUP_PASSWORD=pwd
- EXTRABACKUP_PASSWROD=pwd
- MYSQL_INITDB_SKIP_TZINFO=1
volumes:
# 数据目录 - 持久化数据库数据
- /AppHome/docker/mysql-cluster/data:/var/lib/mysql
# 日志目录 - 持久化日志文件
- /AppHome/docker/mysql-cluster/logs:/var/log/mysql
# SSL 证书目录(可选) - 用于加密节点间通信
- /AppHome/docker/mysql-cluster/cert:/cert
# 自定义配置目录 - 可以放置自定义的 MySQL 配置文件
- /AppHome/docker/mysql-cluster/config:/etc/percona-xtradb-cluster.conf.d
# 健康检查配置
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppwd"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
# ulimit 配置 - 提高文件描述符限制
ulimits:
nofile:
soft: 65536
hard: 65536
nproc:
soft: 65536
hard: 65536
---
version: '3.8'
services:
# Percona XtraDB Cluster 节点 - Host48
mysql-host48:
image: reg-hub.gzeport.com/library/percona/percona-xtradb-cluster:8.0.45
container_name: mysql-host48
privileged: true
restart: always
network_mode: host
environment:
- TZ=Asia/Shanghai
- CLUSTER_NAME=pxc-mysql
- CLUSTER_JOIN=10.202.17.47,10.202.17.12
- MYSQL_ROOT_PASSWORD=pwd
- XTRABACKUP_PASSWORD=pwd
- EXTRABACKUP_PASSWROD=pwd
- MYSQL_INITDB_SKIP_TZINFO=1
volumes:
- /AppHome/docker/mysql-cluster/data:/var/lib/mysql
- /AppHome/docker/mysql-cluster/logs:/var/log/mysql
- /AppHome/docker/mysql-cluster/cert:/cert
- /AppHome/docker/mysql-cluster/config:/etc/percona-xtradb-cluster.conf.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppwd"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
# ulimit 配置 - 提高文件描述符限制
ulimits:
nofile:
soft: 65536
hard: 65536
nproc:
soft: 65536
hard: 65536
---
version: '3.8'
services:
# Percona XtraDB Cluster 节点 - Host12
mysql-host12:
image: reg-hub.gzeport.com/library/percona/percona-xtradb-cluster:8.0.45
container_name: mysql-host12
privileged: true
restart: always
network_mode: host
environment:
- TZ=Asia/Shanghai
- CLUSTER_NAME=pxc-mysql
- CLUSTER_JOIN=10.202.17.47,10.202.17.48
- MYSQL_ROOT_PASSWORD=pwd
- XTRABACKUP_PASSWORD=pwd
- EXTRABACKUP_PASSWROD=pwd
- MYSQL_INITDB_SKIP_TZINFO=1
volumes:
- /AppHome/docker/mysql-cluster/data:/var/lib/mysql
- /AppHome/docker/mysql-cluster/logs:/var/log/mysql
- /AppHome/docker/mysql-cluster/cert:/cert
- /AppHome/docker/mysql-cluster/config:/etc/percona-xtradb-cluster.conf.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppwd"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
# ulimit 配置 - 提高文件描述符限制
ulimits:
nofile:
soft: 65536
hard: 65536
nproc:
soft: 65536
hard: 65536

sql查看当前加入节点
show status like 'wsrep%';
show status like '%wsrep_cluster%';
select * from performance_schema.pxc_cluster_view;

完成,后面可以让nacos与grafana进行连接使用!
