https://hub.docker.com/r/percona/percona-xtradb-cluster
https://www.percona.com/doc/percona-xtradb-cluster/LATEST/install/docker.html
mkdir -p /data/db/percona/percona{00,01,02,03,04}
mkdir -p /data/file/logs/percona/percona{00,01,02,03,04}
chmod -R 777 /data/file/logs/percona/
##node1
docker run -itd --restart always -p 3301:3306 --network galera --name percona00 -h percona00 \
-v /data/file:/data/file/ \
-e MYSQL_ROOT_PASSWORD=wdqdmm@r \
-e MYSQL_ALLOW_EMPTY_PASSWORD=no \
-e CLUSTER_NAME=pxc \
-e XTRABACKUP_PASSWORD=backup \
--privileged --ip 172.33.0.20 \
percona/percona-xtradb-cluster:8.0
##node2
docker run -itd --restart always -p 3302:3306 --network galera --name percona01 -h percona01 \
-v /data/docker/mysql/percona/config:/etc/percona-xtradb-cluster.conf.d \
-v /data/docker/mysql/percona/cert:/cert
-v /data/file:/data/file/ \
-e MYSQL_ROOT_PASSWORD=wdqdmm@r \
-e CLUSTER_NAME=pxc \
-e XTRABACKUP_PASSWORD=backup \
-e CLUSTER_JOIN=percona00 \
--privileged --ip 172.33.0.21 \
percona/percona-xtradb-cluster:8.0
##node3
docker run -itd --restart always -p 3303:3306 --network galera --name percona02 -h percona02 \
-v /data/docker/mysql/percona/config:/etc/percona-xtradb-cluster.conf.d \
-v /data/docker/mysql/percona/cert:/cert
-e MYSQL_ROOT_PASSWORD=wdqdmm@r \
-e CLUSTER_NAME=pxc \
-e XTRABACKUP_PASSWORD=backup \
-e CLUSTER_JOIN=percona00 \
--privileged --ip 172.33.0.22 \
percona/percona-xtradb-cluster:8.0
docker run --name pxc-cert --rm -v /data/docker/mysql/percona/cert:/cert percona/percona-xtradb-cluster:8.0 mysql_ssl_rsa_setup -d /cert
## 部分参数说明
①CLUSTER_JOIN:形成集群关系
②MYSQL_ROOT_PASSWORD:用户root密码
③CLUSTER_NAME:集群名称
④XTRABACKUP_PASSWORD:数据备份密码
⑤privileged:指定最高优先级。标识容器内的root拥有真正的root权限,否则root只是一个普通用户
⑥net:所处网段,pxc-net为创建网段
# 验证集群是否可用
##访问MySQL客户端(任意节点)
docker exec -it node1 /usr/bin/mysql -uroot -p
//输入上述设置的root密码登录MySQL
## 查看wsrep状态变量(部分变量截图)
show status like 'wsrep%';
说明:wsrep_ready:状态监控项,可以知道当前节点的状态是不是可以抚慰,正常情况下为ON,如果变为OFF,则可能是发生了脑裂,或者和其他节点之间的网络连不上,又或者是galera集群没有正常启动等;
一般可以通过命令set global wsrep_provider_options='pc.bootstrap=yes' 来恢复,不过在执行这个命令之后,需要观察整个集群的状态,不然可能会导致这个节点在逻辑上脱离集群。
这个命令的作用就是让当前节点变为primary,如果执行了,则说明确定要使用这个节点来提供服务了。