–与 MySQL 不同的是 PXC 官方提供了 Docker 镜像,所以我们可以很方便的搭建 PXC 集群。
–下载docker mysql镜像
docker pull percona/percona-xtradb-cluster:5.7
–重命名镜像名称
docker tag percona/percona-xtradb-cluster:5.7 pxc:5.7
–删除原始镜像
docker rmi percona/percona-xtradb-cluster:5.7
docker network ls
–创建docker网络,用于pxc集群单独使用
docker network create pxc-network
–创建数据卷用于之后挂载
–pxc容器只支持数据卷挂载,不支持目录挂载
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
–创建第一个节点
docker run -di --name=pn1 --net=pxc-network -p 9000:3306 -v v1:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 pxc:5.7
–查看日志
docker logs pn1
–创建第二个节点
–因为后续节点的添加需要关联到第一个节点
docker run -di --name=pn2 --net=pxc-network -p 9001:3306 -v v2:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pn1 pxc:5.7
–创建第三个节点
–当 PXC 集群存在两个节点以上之后就没有主节点的概念了
docker run -di --name=pn3 --net=pxc-network -p 9002:3306 -v v3:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pn2 pxc:5.7
–进入pn1节点
docker exec -it pn1 /usr/bin/mysql -uroot -p123456
docker exec -it pn2 /usr/bin/mysql -uroot -p123456
docker exec -it pn3 /usr/bin/mysql -uroot -p123456
–查看状态
mysql> show status like ‘wsrep%’;
–查看容器ip地址
docker inspect 容器id
docker ps
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ip
ab7eaad1a09c pxc:5.7 “/entrypoint.sh my…” 5 seconds ago Up 3 seconds 4567-4568/tcp, 0.0.0.0:9002->3306/tcp pn3 172.18.0.4
fa0eec8621a0 pxc:5.7 “/entrypoint.sh my…” 11 seconds ago Up 10 seconds 4567-4568/tcp, 0.0.0.0:9001->3306/tcp pn2 172.18.0.3
dfd733cbb49b pxc:5.7 “/entrypoint.sh my…” About a minute ago Up About a minute 4567-4568/tcp, 0.0.0.0:9000->3306/tcp pn1 172.18.0.2
–新增数据库节点操作
–创建数据卷
docker volume create --name v4
docker volume ls //查看数据卷
–新增容器
–要注意的是,这次 CLUSTER_JOIN 连的是 pn3
docker run -di --name=pn4 --net=pxc-network -p 9003:3306 -v v4:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pn3 pxc:5.7
–进入数据库
–发现数据已经同步过来了
docker exec -it pn4 /usr/bin/mysql -uroot -p123456