本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
Percona XtraDB Cluster Docker 镜像是 Percona XtraDB Cluster 的容器化版本,镜像地址为 percona/percona-xtradb-cluster。该镜像支持在 Docker 网络(包括覆盖网络 overlay network)中运行,允许在不同主机上部署 Percona XtraDB Cluster 节点,从而构建跨主机的高可用 MySQL 集群。
主要用途:简化 Percona XtraDB Cluster 的部署与管理,提供开箱即用的高可用 MySQL 集群解决方案,适用于需要数据同步复制、故障自动转移的场景。
xtrabackup@localhost 用户,支持 XtraBackup SST(State Snapshot Transfer)数据同步方式,可通过环境变量设置密码。集群节点需在同一 Docker 网络中通信。默认情况下,镜像会尝试创建名为 ${CLUSTER_NAME}_net 的 overlay 网络。若需自定义网络(如 bridge 网络或指定参数),可提前创建:
# 示例:创建 bridge 网络 export CLUSTER_NAME=cluster1 docker network create -d bridge ${CLUSTER_NAME}_net
| 参数名称 | 说明 | 是否必填 |
|---|---|---|
MYSQL_ROOT_PASSWORD | 设置 MySQL root 用户密码 | 三选一 |
MYSQL_ALLOW_EMPTY_PASSWORD | 允许 root 用户使用空密码(不推荐生产环境) | 三选一 |
MYSQL_RANDOM_ROOT_PASSWORD | 自动生成随机 root 密码(密码会输出到容器日志) | 三选一 |
CLUSTER_NAME | 集群名称,用于标识同一集群(需所有节点一致) | 是 |
XTRABACKUP_PASSWORD | xtrabackup 用户密码(用于 XtraBackup SST 认证,可选) | 否 |
DISCOVERY_SERVICE | 发现服务地址(仅支持 etcd,格式 IP:PORT),用于节点自动发现 | 否 |
CLUSTER_JOIN | 集群节点 IP 列表(逗号分隔),用于手动指定待加入的集群节点;为空则创建新集群 | 否 |
前提:已部署 etcd 服务(见 6. 发现服务)。
设置环境变量:
export CLUSTER_NAME=cluster1 export ETCD_HOST=10.20.2.4:2379 # etcd 服务地址 export MYSQL_ROOT_PASSWORD=Theistareyk # root 密码 export NETWORK_NAME=${CLUSTER_NAME}_net
创建 Docker 网络(若未提前创建):
docker network create -d overlay $NETWORK_NAME # overlay 网络支持跨主机通信
启动第一个集群节点(创建新集群):
docker run -d \ --name ${CLUSTER_NAME}_node1 \ --net $NETWORK_NAME \ -e CLUSTER_NAME=$CLUSTER_NAME \ -e DISCOVERY_SERVICE=$ETCD_HOST \ -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ -e XTRABACKUP_PASSWORD=xtrabackup_pass # 可选,xtrabackup 用户密码 percona/percona-xtradb-cluster
启动后续节点(自动加入集群):
docker run -d \ --name ${CLUSTER_NAME}_node2 \ --net $NETWORK_NAME \ -e CLUSTER_NAME=$CLUSTER_NAME \ -e DISCOVERY_SERVICE=$ETCD_HOST \ -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ -e XTRABACKUP_PASSWORD=xtrabackup_pass \ percona/percona-xtradb-cluster
通过 CLUSTER_JOIN 指定现有集群节点 IP 列表,手动加入集群。
设置环境变量:
export CLUSTER_NAME=cluster1 export MYSQL_ROOT_PASSWORD=Theistareyk export NETWORK_NAME=${CLUSTER_NAME}_net
创建 Docker 网络:
docker network create -d bridge $NETWORK_NAME # bridge 网络(单主机)或 overlay(跨主机)
启动第一个节点(创建新集群,CLUSTER_JOIN 为空):
docker run -d \ --name ${CLUSTER_NAME}_node1 \ --net $NETWORK_NAME \ -e CLUSTER_NAME=$CLUSTER_NAME \ -e CLUSTER_JOIN="" \ # 空值表示创建新集群 -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ percona/percona-xtradb-cluster
获取第一个节点的 IP(用于后续节点加入):
NODE1_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${CLUSTER_NAME}_node1)
启动第二个节点(加入现有集群):
docker run -d \ --name ${CLUSTER_NAME}_node2 \ --net $NETWORK_NAME \ -e CLUSTER_NAME=$CLUSTER_NAME \ -e CLUSTER_JOIN=$NODE1_IP \ # 指定第一个节点 IP -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ percona/percona-xtradb-cluster
发现服务(当前仅支持 etcd)用于集群节点注册,新节点或 ProxySQL 可通过发现服务自动发现集群中的运行节点,简化集群扩展和管理。
通过 etcd API 查看集群节点注册状态:
curl [***] | jq
示例输出:
{ "action": "get", "node": { "key": "/pxc-cluster/cluster4", "dir": true, "nodes": [ { "key": "/pxc-cluster/cluster4/10.0.5.2", "dir": true, "nodes": [ { "key": "/pxc-cluster/cluster4/10.0.5.2/ipaddr", "value": "10.0.5.2", "modifiedIndex": 19600, "createdIndex": 19600 }, { "key": "/pxc-cluster/cluster4/10.0.5.2/hostname", "value": "2af0a75ce0cb", "modifiedIndex": 19601, "createdIndex": 19601 } ] } ] } }
etcd 注册信息不会自动清理,可手动删除集群所有注册记录:
curl [***] -XDELETE
etcd 是分布式键值存储,用于集群发现。以下是单节点 etcd 的启动脚本:
ETCD_HOST=${ETCD_HOST:-10.20.2.4:2379} # 默认 etcd 地址 docker run -d \ -v /usr/share/ca-certificates/:/etc/ssl/certs \ -p 4001:4001 -p 2380:2380 -p 2379:2379 \ --name etcd \ quay.io/coreos/etcd \ -name etcd0 \ -advertise-client-urls [***]{ETCD_HOST}:2379,[***]{ETCD_HOST}:4001 \ -listen-client-urls [***] \ -initial-advertise-peer-urls [***]{ETCD_HOST}:2380 \ -listen-peer-urls [***] \ -initial-cluster-token etcd-cluster-1 \ -initial-cluster etcd0=[***]{ETCD_HOST}:2380 \ -initial-cluster-state new
完整 etcd 文档:[***]
ProxySQL 是 MySQL 负载均衡代理,可与 Percona XtraDB Cluster 及 etcd 发现服务集成,实现读写分离和节点故障自动转移。
使用 perconalab/proxysql 镜像启动 ProxySQL,需指定集群名称、etcd 地址及数据库凭证:
docker run -d \ -p 3306:3306 -p 6032:6032 \ # 3306: 客户端端口;6032: 管理端口 --net $NETWORK_NAME \ --name ${CLUSTER_NAME}_proxysql \ -e CLUSTER_NAME=$CLUSTER_NAME \ -e ETCD_HOST=$ETCD_HOST \ -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ # 集群节点 root 密码(用于注册代理用户) -e MYSQL_PROXY_USER=proxyuser \ # 代理用户名称 -e MYSQL_PROXY_PASSWORD=s3cret \ # 代理用户密码 perconalab/proxysql
环境变量说明:
MYSQL_PROXY_USER/MYSQL_PROXY_PASSWORD:ProxySQL 用于连接集群节点的用户,会自动在所有集群节点注册。启动后,执行以下命令将集群节点注册到 ProxySQL:
docker exec -it ${CLUSTER_NAME}_proxysql add_cluster_nodes.sh
Docker overlay 网络支持跨主机容器通信,详细配置步骤可参考:[***]
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429