Docker percona-xtradb-cluster(pxc)+HAProxy+MyCat (一)

一、拉取镜像及镜像改名

#拉取镜像
docker pull percona/percona-xtradb-cluster:5.7.22
docker pull haproxy:1.9.6
#镜像改名
docker tag percona/percona-xtradb-cluster:5.7.22 pxc:5.7.22

二、创建网段

docker network create --subnet=172.18.0.0/24 net1
命令简介
########################################################
#docker创建的网段默认内置是172.17.0.$$
#172.18.0.0/24   24代表子网掩码 255.255.255.0
docker network create --subnet=网段 网络名称
#查看网段信息
docker network inspect 网络名称
#删除网段
docker network rm 网络名称
#查看所有网络
docker network ls
#查看容器网络信息
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

三、创建数据卷及备份数据卷(backup 用于热备份数据)

docker volume create v1 && \
docker volume create v2 && \
docker volume create v3 && \
docker volume create v4 && \
docker volume create v5 && \
docker volume create backup
命令简介
########################################################
#创建数据卷
docker volume create 数据卷名称
#删除数据卷
docker volume rm 数据卷名称
#查看数据卷
docker volume inspect 数据卷名称
#删除无用卷
docker volume prune

四、运行容器

docker run -d -p 3307:3306 --name=node1 -v v1:/var/lib/mysql -v backup:/data -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PACSSWORD=root --privileged  --net=net1 --ip 172.18.0.2 pxc:5.7.22
docker run -d -p 3308:3306 --name=node2 -v v2:/var/lib/mysql -v backup:/data -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e CLUSTER_JOIN=node1 -e XTRABACKUP_PACSSWORD=root --privileged  --net=net1 --ip 172.18.0.3 pxc:5.7.22
docker run -d -p 3309:3306 --name=node3 -v v3:/var/lib/mysql -v backup:/data -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e CLUSTER_JOIN=node1 -e XTRABACKUP_PACSSWORD=root --privileged  --net=net1 --ip 172.18.0.4 pxc:5.7.22
docker run -d -p 3310:3306 --name=node4 -v v4:/var/lib/mysql -v backup:/data -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e CLUSTER_JOIN=node1 -e XTRABACKUP_PACSSWORD=root --privileged  --net=net1 --ip 172.18.0.5 pxc:5.7.22
docker run -d -p 3311:3306 --name=node5 -v v5:/var/lib/mysql -v backup:/data -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e CLUSTER_JOIN=node1 -e XTRABACKUP_PACSSWORD=root --privileged  --net=net1 --ip 172.18.0.6 pxc:5.7.22
命令简介:
########################################################
-d 后台启动
-p 3307:3306 端口映射
-e MYSQL_ROOT_PASSWORD=root  指定数据库密码
-e CLUSTER_NAME=PXC 指定集群名称
-e XTRABACKUP_PASSWORD=root 指定集群之间同步需要的密码
-v v1:/var/lib/mysql 把刚刚创建的数据卷挂载到mysql中
--name=node1 指定容器名称(当前我们把node1作为主节点、后面会创建node2)
--net=net1 指定网段
--ip=172.18.0.2 指定ip 

-e CLUSTER_JOIN=node1  指定与哪个节点进行数据同步

五、注意事项

1、每个MySQL容器创建之后,因为要执行PXC的初始化和加入集群等工作, 耐心等待1分钟左右再用客户端连接MySQL。 另外,必须第1个MySQL节点启动成功, 用MySQL客户端能连接上之后,再去创建其他MySQL节点。

2、如果停掉某一节点( docker stop node1 )再启动时 docker start node1 可能会发现连接不上了。

解决方式:1)docker rm node1 node2 node3 node4 node5
                  2) vi /var/lib/docker/volumes/v1/_data/grastate.dat 
                vi /var/lib/docker/volumes/v2/_data/grastate.dat 
                vi /var/lib/docker/volumes/v3/_data/grastate.dat 
                vi /var/lib/docker/volumes/v4/_data/grastate.dat 
                vi /var/lib/docker/volumes/v5/_data/grastate.dat 
                -- 将safe_to_bootstrap: 0 改为1
                  3)重新安装pxc容器,run node1,node2,node3,node4,node5
                  4)CLUSTER_JOIN 为最后存在的节点(同步节点)

六、效果

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                                   NAMES
1db8cadf6ec6        pxc:5.7.22          "/entrypoint.sh "   About a minute ago   Up About a minute   4567-4568/tcp, 0.0.0.0:3311->3306/tcp   node5
ea143691ed0a        pxc:5.7.22          "/entrypoint.sh "   About a minute ago   Up About a minute   4567-4568/tcp, 0.0.0.0:3310->3306/tcp   node4
fdaabb94cba7        pxc:5.7.22          "/entrypoint.sh "   About a minute ago   Up About a minute   4567-4568/tcp, 0.0.0.0:3309->3306/tcp   node3
106392a16de4        pxc:5.7.22          "/entrypoint.sh "   5 minutes ago        Up 5 minutes        4567-4568/tcp, 0.0.0.0:3308->3306/tcp   node2
bdaebd52805a        pxc:5.7.22          "/entrypoint.sh "   7 minutes ago        Up 7 minutes        4567-4568/tcp, 0.0.0.0:3307->3306/tcp   node1

在navicat中可连每一节点,并且在任意节点都可增删改查

猜你喜欢

转载自blog.csdn.net/m0_37726449/article/details/89203738