开启防火墙

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


创建实例

主节点

  1. docker run -d -p 9000:3306 \
  2. -e MYSQL_ROOT_PASSWORD=root \
  3. -e CLUSTER_NAME=PXC1 \
  4. -e XTRABACKUP_PASSWORD=root \
  5. -v pv1:/var/lib/mysql \
  6. --privileged \
  7. --name pn1 \
  8. --net=<虚拟网络> pxc
  • XTRABACKUP_PASSWORD 是数据同步密码
  • pv1 ~~

附属节点创建

  1. docker run -d -p 9001:3306 \
  2. -e MYSQL_ROOT_PASSWORD=root \
  3. -e CLUSTER_NAME=PXC1 \
  4. -e XTRABACKUP_PASSWORD=root \
  5. -e CLUSTER_JOIN=<主节点名称> \
  6. -v pnv2:/var/lib/mysql \
  7. --privileged \
  8. --name pn2 \
  9. --net=<和主节点同一个虚拟网络> pxc
  • 修改了 docker数据卷 为 pnv2 不过这个随意
  • 修改了名称为 pn2
  • 增加一处指令 -e CLUSTER_JOIN=pn1 说明当前实例的主节点是 pn1

注意

闪退原因

  • 等待 pxc 集群的首个节点创建完毕后,外部(navicat)可以连接,再进行其他节点的创建

pxc 节点下线

一些背景

  1. 正常 pxc 的最后一个节点下线,它的 grastate.dat 里面的 safe_to_bootstrap 是会变成 1 的
    1. 但是 pxc docker 中,percona 公司设置了,如果最后一个退出的是非首节点启动的容器,那么不会设置 safe_to_bootstrap 为 1
  2. 容器启动的时候,使用了 -e CLUSTER_JOIN 指定了当前容器依赖哪个容器来加入集群,所以要保证前面的容器已经启动

集群集体下线

  • 找到原来的首节点启动的容器,设置 safe_to_bootstrap 为 1,再 docker start <id> 启动
  • 其他附属节点也依次启动

主节点单独下线

  • pxc 集群还在运行,宕机的主节点不能按照主节点启动
    • 删除容器,原有的数据卷还是会保留
    • 检查 safe_to_bootstrap,设置为 0
    • 按照附属节点的方式创建容器,挂载原来的数据卷