基于Docker搭建mysql的PXC集群

一、首先看一下常见的两种集群及特性:

基于Docker搭建mysql的PXC集群_第1张图片

二、环境配置

1.系统:centos7
2.docker: 官方网站下载即可
docker官网
3.PXC镜像:percona/percona-xtradb-cluster:5.7.22

三、拉取镜像

1.这里博主特别说明一下,之前实践PXC的时候直接docker pull 一个最新版本的percona/percona-xtradb-cluster(用于搭建pxc集群的最重要工具),结果搞了一天也没有启动成功容器,所以选择了拉取一个一年以上的版本5.7.22,很好成功了。***基于Docker搭建mysql的PXC集群_第2张图片2.docker pull percona/percona-xtradb-cluster:5.7.22
查看我们拉取的镜像
基于Docker搭建mysql的PXC集群_第3张图片3.为了方便把PXC镜像更改下别名
基于Docker搭建mysql的PXC集群_第4张图片

四、创建容器

要搭建PXC架构至少需要3个mysql实例来组成一个集群,三个实例之间不是主从模式,而是各自为主,所以三者是对等关系,不分从属,这就叫multi-master架构。客户端写入和读取数据时,连接哪个实例都是一样的。读取到的数据时相同的,写入任意一个实例之后,集群自己会将新写入的数据同步到其他实例上,这种架构不共享任何数据,是一种高冗余架构。
1.创建用于容器的一个网络基于Docker搭建mysql的PXC集群_第5张图片
**

2.创建卷*(这里PXC最少基于三个容器,而本章创建5个)**

 docker volume create v1
  docker volume create v2
   docker volume create v3
    docker volume create v4
     docker volume create v5

基于Docker搭建mysql的PXC集群_第6张图片注: 先建卷再建容器。
3.建容器
为了看得清楚我把之前间的一些容器关闭只需要一个命令
docker rm -f $(docker ps -aq)
-f是强制删除,包括正在运行的docker容器;
那么来咯(仔细看好每个创建的命令)

docker run -di -p 3306:3306 \
-v v1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
--privileged=true --name=node1 --net=net1 --ip 172.18.0.2 \
pxc

docker run -di -p 3307:3306 \
-v v2:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node2 --net=net1 --ip 172.18.0.3 \
pxc

docker run -di -p 3308:3306 \
-v v3:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node3 --net=net1 --ip 172.18.0.4 \
pxc

docker run -di -p 3309:3306 \
-v v4:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node4 --net=net1 --ip 172.18.0.5 \
pxc

docker run -di -p 3310:3306 \
-v v5:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node5 --net=net1 --ip 172.18.0.6 \
pxc

注:再建立第一个节点node1后,需要隔1~2分钟再建下一个节点,而且要先进入容器测试一下。基于Docker搭建mysql的PXC集群_第7张图片看到所有容器启动非常开心的。

五、测试(Navicat)

这里提一嘴我是用vagrant创建的虚拟机,所以只要修改vagrantfile配置文件就可以得到一个默认私网192.168.33.10(只要在一个局域网就可被客户端连接)**当然在容器里直接操作也可以的就是个人觉得界面般的比较清晰基于Docker搭建mysql的PXC集群_第8张图片这里我就不再掩饰了,自己动手吧。

六、总结down机的解决办法

1.之前提到的版本问题,最好选择比较旧一点的版本
2.其中一个或者两台机器down了
两个命令

sudo rm -rf /var/lib/docker/volumes/v1/_data/grastate.dat

docker start node1
哪个down删除哪个卷就可以,再重新启动
注:如果是重启失败,也可以这样操作
3.启动第一个节点的时候稍微等一会,并且连接客户端试下
4.注意ip和映射端口没有和其他冲突
5.防火墙和selinux确保是关闭状态

你可能感兴趣的:(docker,PXC,Mysql)