前言
干货又来了,全程无废话,可先看目录了解。
MySQL搭建集群最常见的是binlog方式,但还有一种方式是强一致性的,能保证集群节点的数据一定能够同步成功,这种方式就是pxc,本篇就使用图文方式一步步展示具体的搭建步骤及最终效果。
搭建
本次搭建集群环境以5节点MySQL为例
1、安装pxc镜像
拉取pxc镜像
dockerpullpercona/percona-xtradb-cluster
镜像名称太长,修改一下:
dockertagpercona/percona-xtradb-clusterpxc
删除之前的:
dockerrmipercona/percona-xtradb-cluster
2、创建内部网络
创建内部网段,24位,名称net1:
dockernetworkcreate--subnet=.18.0.0/24net1
查看net1网段:
dockerinspectnet1
删除net1:(这里不执行,留作参考。)
dockernetworkrmnet1
3、创建docker数据卷
因为pxc不支持映射目录,所以采用映射数据卷的方式。
创建数据卷叫v1,这里5个节点,所以创建5个数据卷:
dockervolumecreatev1dockervolumecreatev2dockervolumecreatev3dockervolumecreatev4dockervolumecreatev5
查看v1数据卷在宿主机的位置:
dockerinspectv1
删除数据卷v1:(这里不执行,留作参考。)
dockervolumermv1
4、创建pxc容器
这里最好先把备份数据的数据卷创建出来,然后也映射到宿主机,这样以后做热备份的时候就不用删掉容器节点重新再创建容器并映射备份目录了。
做备份数据的数据卷:
dockervolumecreatebackup1dockervolumecreatebackup2dockervolumecreatebackup3dockervolumecreatebackup4dockervolumecreatebackup5
开始创建5个MySQL节点
命令参数说明:端口,密码,集群名称PXC,同步数据密码,映射数据目录到宿主机的v1数据卷,给予最高权限,名称叫node1,网段为net1,ip指定为.18.0.2,运行的镜像是pxc。
1)、创建第1个MySQL节点
这里要注意:一定要等到第一个节点创建并通过客户端连接成功,才能继续创建其它的节点,否则因为找不到node1同步库,其它节点创建时会闪退!dockerrun-d-p:-eMYSQL_ROOT_PASSWORD=-eCLUSTER_NAME=PXC-eXTRABACKUP_PASSWORD=-vv1:/var/lib/mysql-vbackup1:/data--privileged--name=node1--net=net1--ip.18.0.2pxc
2)、创建第2个MySQL节点
dockerrun-d-p:-eMYSQL_ROOT_PASSWORD=-eCLUSTER_NAME=PXC-eXTRABACKUP_PASSWORD=-eCLUSTER_JOIN=node1-vv2:/var/lib/mysql-vbackup2:/data--privileged--name=node2--net=net1--ip.18.0.3pxc
3)、创建第3个MySQL节点
dockerrun-d-p:-eMYSQL_ROOT_PASSWORD=-eCLUSTER_NAME=PXC-eXTRABACKUP_PASSWORD=-eCLUSTER_JOIN=node1-vv3:/var/lib/mysql-vbackup3:/data--privileged--name=node3--net=net1--ip.18.0.4pxc
4)、创建第4个MySQL节点
dockerrun-d-p:-eMYSQL_ROOT_PASSWORD=-eCLUSTER_NAME=PXC-eXTRABACKUP_PASSWORD=-eCLUSTER_JOIN=node1-vv4:/var/lib/mysql-vbackup4:/data--privileged--name=node4--net=net1--ip.18.0.5pxc
5)、创建第5个MySQL节点
dockerrun-d-p:-eMYSQL_ROOT_PASSWORD=-eCLUSTER_NAME=PXC-eXTRABACKUP_PASSWORD=-eCLUSTER_JOIN=node1-vv5:/var/lib/mysql-vbackup5:/data--privileged--name=node5--net=net1--ip.18.0.6pxc
5、验证PXC集群
连接5个数据库节点:
在DB1中新建一个数据库test,新建一张表tb_student,新建两条数据。
提交后,看其它四个节点是否同步:
发现全部同步成功!
6、拉取Haproxy镜像
dockerpullhaproxy
7、编写Haproxy配置文件
在宿主机上编写:
vim/data/software/haproxy/haproxy.cfg
配置文件如下:(拷贝到Linux中去的时候一定要记得把换行符删掉,否则报错。)
global#工作目录chroot/usr/local/etc/haproxy#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级infolog.0.0.1local5info#守护进程运行daemondefaultslogglobalmode