Docker搭建PXC集群
Posted eikixu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker搭建PXC集群相关的知识,希望对你有一定的参考价值。
如何创建mysql的PXC集群
下载PXC集群镜像文件
下载
docker pull percona/percona-xtradb-cluster
重命名
[[email protected] ~]# docker tag docker.io/percona/percona-xtradb-cluster pxc
创建内部网络
处于安全考虑,需要给PXC集群实例创建Docker内部网络
创建网段:
-
[[email protected] ~]# docker network create --subnet=172.18.0.0/24 net1
-
ad5c096baebe656f530576344ecde9a3674b907134aced66df27a8d72feefc63
查看网段
-
[
-
[
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
},
-
"Internal": false,
-
"Attachable": false,
-
"Containers": {},
-
"Options": {},
-
"Labels": {}
-
}
-
]
删除网段
[[email protected] ~]# docker network rm net1
创建Docker卷
Docker容器使用原则:一旦创建出容器,尽量不要在容器中保存数据。一般通过目录映射将数据保存在宿主机里面(我们把宿主机的一个目录映射到容器内,然后容器的数据都保存到映射目录,这样就保存到了宿主机,即使容器损坏,宿主机也有数据保存)。但是,PXC技术在使用Docker的时候无法直接使用映射目录,需要另外一种映射技术—Docker卷。
容器中的PXC节点映射数据目录的解决办法
-
创建Docker卷:[[email protected] ~]# docker volume create --name v1
-
--name:设置卷名 可以不写
我们创建的Docker卷是在宿主机上可以看到的具体映射真实目录
-
[
-
[
-
{
-
-
-
-
-
-
-
}
-
]
-
我们看到Docker卷v1映射到了/var/lib/docker/volumes/v1/_data
删除Docker卷
[[email protected] ~]# docker volume rm v1
创建PXC容器
只需要向PXC镜像传入运行参数就能创建出PXC容器
-
[[email protected] ~]# docker run -d -p 3307:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
-
1da51c2b8817f414ad825ba48f69a46c176f0b5ba7539e3b31e9ac54de056877
-
-
参数解释:
-
-d:表示后台运行
-
-v:映射Docker卷到容器的mysql数据目录
-
MYSQL_ROOT_PASSWORD:表示创建的数据库密码
-
CLUSTER_NAME: 表示创建出的集群名字
-
XTRABACKUP_PASSWORD:表示集群通信密码
-
--privileged:表示分配最高权限
-
--net:指定网段
-
--ip:指定IP
-
-
[[email protected] ~]# docker ps -a
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
1da51c2b8817 pxc "/entrypoint.sh " 7 seconds ago Up 5 seconds 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node1
这样我们就创建了第一个PXC节点
下面依次创建剩余四个节点
创建Docker卷
-
[[email protected] ~]# docker volume create --name v2
-
v2
-
[[email protected] ~]# docker volume create --name v3
-
v3
-
[[email protected] ~]# docker volume create --name v4
-
v4
-
[[email protected] ~]# docker volume create --name v5
-
v5
创建容器
-
创建node2:
-
[[email protected] ~]# docker run -d -p 3308:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
-
-
创建node3:
-
[[email protected] ~]# docker run -d -p 3309:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
-
-
创建node4:
-
[[email protected] ~]# docker run -d -p 3310:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
-
-
创建node5:
-
[[email protected] ~]# docker run -d -p 3311:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
-
-
查看当前有哪些运行容器:
-
[[email protected] ~]# docker ps -a
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
f7638daaa09b pxc "/entrypoint.sh " 7 seconds ago Up 4 seconds 4567-4568/tcp, 0.0.0.0:3311->3306/tcp node5
-
909261673fac pxc "/entrypoint.sh " 25 seconds ago Up 24 seconds 4567-4568/tcp, 0.0.0.0:3310->3306/tcp node4
-
763dca13edcd pxc "/entrypoint.sh " 43 seconds ago Up 42 seconds 4567-4568/tcp, 0.0.0.0:3309->3306/tcp node3
-
9a3f92074ad0 pxc "/entrypoint.sh " About a minute ago Up About a minute 4567-4568/tcp, 0.0.0.0:3308->3306/tcp node2
-
1da51c2b8817 pxc "/entrypoint.sh " 15 minutes ago Up 15 minutes 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node1
在创建剩余容器的时候需要注意的是网络和端口的映射不同,以及多了-e CLUSTER_JOIN=node1
表示加入node1节点。
注意:第一个节点创建时间较长,必须等待两分钟左右再创建剩余节点。
创建好之后我们就可以使用客户端连接数据库
转自:https://zhaobugs.com/2018/06/06/Docker搭建PXC集群
以上是关于Docker搭建PXC集群的主要内容,如果未能解决你的问题,请参考以下文章