开启防火墙
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 - 按照附属节点的方式创建容器,挂载原来的数据卷