开启防火墙
firewall-cmd —zone=public —permanent —add-port=9000/tcp # 用来提供外部连接 firewall-cmd —zone=public —permanent —add-port=2377/tcp firewall-cmd —zone=public —permanent —add-port=7946/tcp firewall-cmd —zone=public —permanent —add-port=7946/udp firewall-cmd —zone=public —permanent —add-port=4789/tcp firewall-cmd —zone=public —permanent —add-port=4789/udp firewall-cmd —reload
安装
docker pull docker.io/percona/percona-xtradb-cluster:5.7.21
- 修改下镜像名,然后删掉原来的镜像
docker tag docker.io/percona/percona-xtradb-cluster:5.7.21 pxc
创建实例
主节点
docker run -d -p 9000:3306 \-e MYSQL_ROOT_PASSWORD=root \-e CLUSTER_NAME=PXC1 \-e XTRABACKUP_PASSWORD=root \-v pv1:/var/lib/mysql \--privileged \--name pn1 \--net=<虚拟网络> pxc
XTRABACKUP_PASSWORD是数据同步密码pv1~~
附属节点创建
docker run -d -p 9001:3306 \-e MYSQL_ROOT_PASSWORD=root \-e CLUSTER_NAME=PXC1 \-e XTRABACKUP_PASSWORD=root \-e CLUSTER_JOIN=<主节点名称> \-v pnv2:/var/lib/mysql \--privileged \--name pn2 \--net=<和主节点同一个虚拟网络> pxc
- 修改了 docker数据卷 为
pnv2不过这个随意 - 修改了名称为 pn2
- 增加一处指令
-e CLUSTER_JOIN=pn1说明当前实例的主节点是 pn1
注意
闪退原因
- 等待 pxc 集群的首个节点创建完毕后,外部(navicat)可以连接,再进行其他节点的创建
pxc 节点下线
一些背景
- 正常 pxc 的最后一个节点下线,它的
grastate.dat里面的safe_to_bootstrap是会变成 1 的- 但是 pxc docker 中,percona 公司设置了,如果最后一个退出的是非首节点启动的容器,那么不会设置
safe_to_bootstrap为 1
- 但是 pxc docker 中,percona 公司设置了,如果最后一个退出的是非首节点启动的容器,那么不会设置
- 容器启动的时候,使用了
-e CLUSTER_JOIN指定了当前容器依赖哪个容器来加入集群,所以要保证前面的容器已经启动
集群集体下线
- 找到原来的首节点启动的容器,设置
safe_to_bootstrap为 1,再docker start <id>启动 - 其他附属节点也依次启动
主节点单独下线
- pxc 集群还在运行,宕机的主节点不能按照主节点启动
- 删除容器,原有的数据卷还是会保留
- 检查
safe_to_bootstrap,设置为 0 - 按照附属节点的方式创建容器,挂载原来的数据卷
