PXC是什么
PXC是MySQL的高可用性和扩展性的解决方案,通俗来讲就是MySQL的集群方案;
PXC的集群作用
实现数据库的节点实时同步,可以保证数据的一致性,保证数据同步(强一致性)
PXC集群和Replication集群
PXC集群的特点
PXC实现了同步复制,复制数据是双向的,事物在所有的集群节点要么同时提交,要么不提交;
多主机复制,可以在任何节点上提交数据;
从slave服务器上的并行应用事件达到了真正的并行复制;
当你设置了自增主键,数据并不是按照+1的模式进行的,而是按照节点的数量进行递增;
Replication集群特点
Replication同步数据是单向的;
Replication在主节点写入,Slave分支读取,master无法读取数据,所以说Replication的每一个节点都不能同时读写;
PXC下载
1
| https://hub.docker.com/r/percona/percona-xtradb-cluster/
|
PXC集群搭建
1 2
| # 安装命令 5.7是版本号 docker pull percona/percona-xtradb-cluster:5.7
|
查看是否安装成功
但是你会发现镜像名太长了
1 2 3 4 5 6
| # 那么修改名称,如果不是最新版,那么你执行这些操作记得都给我加版本号 docker tag docker.io/percona/percona-xtradb-cluster:5.7 pxc:5.7 # 然后查看 docker images # 及得删除原来的镜像, 如果你不是最新版本,那么你执行这些操作记得都给我加版本号 docker rmi docker.io/percona/percona-xtradb-cluster:5.7
|
创建docker内部网络,网络的名字叫jiushi,ip地址是172.94.9.4
1
| docker network create --subnet=172.94.9.4/24 jiushi
|
查看网络是否创建完成 docker inspect jiushi
删除网络命令
1 2
| # 这里只是提供删除命令,你要是想跟着教程走,我劝你耗子尾汁 docker network rm jiushi
|
创建docker卷(docker卷可以在宿主机上看得见)
1
| docker volume create --name v1
|
查看docker卷,其实docker卷有点类似windows的磁盘,其实也就是目录的映射
PXC集群启动
经过了上方的步骤,PXC的镜像已经下载完成了,docker的内部网络是jiushi,docker卷是V1,现在我们要做的是启动PXC容器
创建PXC容器
你要创建几个容器,就创建几个docker卷,上面步骤我只创建了一个,剩下的两个请铁子们自己创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 参数解释 # -v 之前步骤里创建的卷 # MYSQL_ROOT_PASSWORD 是MySQL数据库的密码 # CLUSTER_NAME 集群的名称 # XTRABACKUP_PASSWORD 加入集群的密码 # privileged 是设置权限 # name=node1 是启动容器的名称 # net=jiushi 是加入网络的名称,也就是之前创建的内部网络 # ip 指定启动的ip # pxc:5.7 指定启动的镜像 docker run -d -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123 --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc:5.7
|
创建第二个集群
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 这里我用的mysql是5.7 高版本会出现问题,请百度自行解决 # 参数解释 # CLUSTER_JOIN 表示加入主节点为node1的集群 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=jiushi --ip 172.18.0.3 pxc:5.7
|
创建第三个集群
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 这里我用的mysql是5.7 高版本会出现问题,请百度自行解决 # 参数解释 # CLUSTER_JOIN 表示加入主节点为node1的集群 docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=jiushi --ip 172.18.0.4 pxc:5.7
|
Ps: 最后要注意的事项
1 2 3 4 5 6 7 8 9 10 11 12
| # 当你使用Navicat连接数据库会发现连接不上,那就试试在防火墙中添加端口号 3306是你要开放的端口号 firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --zone=public --add-port=3307/tcp --permanent firewall-cmd --zone=public --add-port=3308/tcp --permanent
# 还需要注意如果你使用的MySQL8.0要注意SSL问题,需要给docker卷足够的权限,切换到对应的卷给权限 # -R是递归的意思也就说子文件也会开放最高权限 chmod -R 777
# Navicat连接时,用的ip是你linux系统的ip ip addr # 一般是ens33
|