这里直接采用的是5.7.24版本的MySQL
初始化docker swarm :docker swarm init
正常会显示当前服务器作为leader,然后打印出来加入此docker swarm的token。我这里执行过了,使用docker node ls 可以看到当前集群的节点列表,当前仅有一个Leader。
创建 network
这里创建一个overlay的网络,用于集群间的相互通信: docker network create -d overlay --attachable sharednet
拉取命令:
docker pull percona/percona-xtradb-cluster:5.7.24
修改镜像名称:docker tag
docker tag percona/percona-xtradb-cluster:5.7.24 pxc:5.7.24
新增了一个镜像,Image ID 同原来的一样,这时可以删除掉原来的镜像了。
创建数据卷
docker volume create v1
docker volume create backup
在另一台机器上执行下面命令,加入docker 集群:
docker swarm join --token SWMTKN-1-15334ml6i4lmmedpc3c65o133pfqc2vycok6x5b8xtsnog497e-5w1h8hrrc0lee1l8uqnp7ds86 192.168.104.61:2377
上面的token值,可以在manager机器上查询,也就是docker swarm 的Leader机器上查: docker swarm join-token worker
执行成功后,可在集群的主节点上查看节点情况:docker node ls
可以看到 MANAGER STATUS 列,有一个为Leader,即为当前集群的主节点。
无需在从节点上创建同名network,可直接使用。
在主节点上创建mysql容器:
docker run --restart=always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=abc123456 \
-v v1:/var/lib/mysql \
-v backup:/data \
--privileged=true \
--name=node1 \
--net=sharednet \
-d pxc:5.7.24
这时可以使用Navicat 连接主节点上的mysql数据库了。右键连接名称,打开命令列界面,看下MySQL版本:select version();
在从节点上执行:
docker run --restart=always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=abc123456 \
-e CLUSTER_JOIN=node1 \
-v v1:/var/lib/mysql \
-v backup:/data \
--privileged=true \
--name=node2 \
--net=sharednet \
-d pxc:5.7.24
测试Navicat 连接从节点MySQL:
在主节点上创建数据库 test-mysql:
这时,刷新从节点MySQL,即可看到从节点也自动创建了改数据库:
如果刷新从节点,数据库没有显示的话,可以先关闭连接,再重新连接。