Centos7使用Docker搭建PXC集群(5.7版本)

1 篇文章 0 订阅

创建Docker Swarm虚拟网络

docker swarm init


在运行成功之后有:docker swarm join --token SWMTKN-1-65jot7h7i3qpvyoii12u0oz6djay4k7aifhgicwdigypuvykey-2piyc2vowv25zv9hcziz4wvl5 10.1.6.223:2377
在其他节点运行该命令就可以加入改Swarm

查看Swarm节点下的主机,只能在主机下查看
docker node ls

删除节点下的某一台主机

如果节点处于Active下需要加-f,否则不需要加。

docker node rm -f vhmhgzyfyl710x0ojkbg9yywm(节点ID)
解散Swarm集群

由于Swarm主机不能踢除自己,所以要用下面的这个命令解散

docker swarm leave -f

由于Swarm主机踢出节点之后,节点默认以为自己还在原先的Swarm集群中,所以当需要加入新的Swarm集群,需要执行下面的命令

docker swarm leave
查看Swarm集群网络,只能在Swaram主节点运行
docker network ls

创建虚拟网络
docker network create -d overlay --attachable swarm_mysql(虚拟网络名称自定义)


如果将所有的容器都放在同一个虚拟网络中,IP可能会被分配完,创建多个虚拟网络就可以解决这个问题,比如Mysql集群可以放在一个Mysql的虚拟网络中。

删除虚拟网络
docker network rm swarm_mysql(虚拟网络名称)
创建分布式容器
docker run -it --net=swarm_test(虚拟网络名称)
开放端口

2377:让其他节点加入Swarm集群的端口
7946、4789:Swarm集群中互相通讯的端口,且要打开TCP/UDP

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=7946/udp --permanent
firewall-cmd --zone=public --add-port=4789/tcp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --reload

搭建PXC集群

介绍
  1. Pecona XtraDB Cluster 是业界主流的Mysql集群方案
  2. PXC集群的数据同步具有强一直性(阿里的OceanBase也借鉴了这一点)
  3. PXC集群只支持InnoDB引擎
下载

PXC镜像详细介绍

这里使用5.7版本的,一开始我使用了8.0的会有SSL错误,需要另外单独配置这个。具体8.0的说明参考官方的文档。
PXC8.0官方说明:https://www.percona.com/doc/percona-xtradb-cluster/8.0/howtos/upgrade_guide.html
官网描述:https://www.percona.com/doc/percona-xtradb-cluster/8.0/security/encrypt-traffic.html#ssl-auto-conf

// 拉取PXC
docker pull percona/percona-xtradb-cluster:5.7.21
// 修改镜像名称为PXC
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
// 删除原来的percona/percona-xtradb-cluster镜像
docker rmi percona/percona-xtradb-cluster:5.7.21
PXC主节点容器
  1. 第一个启动的PXC节点就是主节点,它负责初始化PXC集群
  2. PXC启动之后,就没有主节点的角色了
  3. PXC集群中任何节点都是可以读写数据
创建主节点

创建主节点之后,稍微等一会,会初始化一些东西
官方文档

docker run -d -p 9001:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC1 -e XTRABACKUP_PASSWORD=123456 -v pnv1:/var/lib/mysql --privileged --name=pn1 --net=swarm_mysql pxc

-e MYSQL_ROOT_PASSWORD=123456:Mysql的root密码
-e CLUSTER_NAME=PXC1:PXC集群名称
-e XTRABACKUP_PASSWORD=123456:PXC集群之间数据同步的密码
-v pnv1:/var/lib/mysql:数据卷挂载,pnv1为数据卷名称。可以理解为虚拟的磁盘,容器在保存数据的时候往/var/lib/mysql路径保存数据,其实就是把数据包存在数据卷上了。
–privileged:表示有读写权限
–name=pn1:容器名称
–net=swarm_mysql:加入到swram_mysql的虚拟网络
pxc:来自那个镜像创建

数据卷操作
// 查看当前存在的数据卷
docker volume ls
// 创建一个的数据卷,name:数据卷名称
docker volume create ${name}
// 删除某个数据卷,name:数据卷名称
docker volume rm ${name}
// 查看某个数据卷,name:数据卷名称
docker volume inspect ${name}
创建从节点

只有主节点可以访问了,才能创建从节点,否则会闪退。

docker run -d -p 9001:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC1 -e CLUSTER_JOIN=pn1 -e XTRABACKUP_PASSWORD=123456 -v pnv2:/var/lib/mysql --privileged --name=pn2 --net=swarm_mysql pxc

额外增加的运行命令:
CLUSTER_JOIN=pn1:加入的集群名称,要跟主节点的名称保持一直

创建完毕之后可以在这两个数据库创建库进行测试,不管在哪个创建或其他操作,另一个都会进行同步。
默认情况下
创建client表,另一个节点就会自动同步

PS

之前我采用的是8.0的PXC,但是就是报SSL错误。
报错信息是:
New joining cluster node didn’t find needed SSL artifacts

找了很久的资料文档,在官方的文档中找到:是由于8.0默认开启了pxc-encrypt-cluster-traffic,强制使用SSL,后来我在容器的配置中找到mysql的配置,把这个属性改为OFF,重启容器和docker,子节点还是不能加入,也不是很清楚为什么,后来就先用5.7版本跑通。主要就是要主从节点使用同一份SSL证书。
PXC8.0官方说明:https://www.percona.com/doc/percona-xtradb-cluster/8.0/howtos/upgrade_guide.html
官网描述对8.0属性pxc-encrypt-cluster-traffic描述:https://www.percona.com/doc/percona-xtradb-cluster/8.0/security/encrypt-traffic.html#ssl-auto-conf

PXC集群注意事项
从节点启动之后闪退(一)

第一种情况是由于主节点还没有启动,就启动了从节点,那这个时候从节点肯定是闪退的。
所以需要先启动主节点,再启动从节点。

从节点启动之后闪退(二)

第二种情况,是由于PXC在退出的时候会给集群中最后退出的那台打上标记,当集群重新启动的时候需要 先启动最后关闭的那台节点机器
但是docker中容器启动是没有办法更改指令的,所以需要修改数据卷中grastate.data文件,把safe_to_bootstrap参数改为0。PXC中就是讲最后关闭的节点的safe_to_bootstrap标记为1,需要按照主节点启动。

由于PXC的公司再制作Linux的镜像的时候,默认是不会给子节点退出的safe_to_bootstrap配置打上1的,所以真正要修改的是主节点的safe_to_bootstrap,主节点修改为1,才可以真正的启动,启动之后再去启动从节点。
主节点的safe_to_bootstrap

主节点启动之后闪退(一)

可以参考 从节点启动之后闪退(二)中最后一段的说法,就是需要修改主节点的safe_to_bootstrap为1即可。

主节点启动之后闪退(二)

当主节点突然宕机,从节点都正常运行,这时候主节点不能按照主节点启动
这时候需要删除主节点的容器,检查数据卷上的safe_to_bootstrap是否为0,如果不是则改为0。然后以从节点的方式创建容器,加入集群。

可以使用任何PXC节点,然后从节点加入PXC集群。
可以使用任何PXC节点,然后从节点加入PXC集群
如果要重新启动C节点,就要保证B节点可以访问。

PXC集群特点

PXC节点之后,数据同步是双向的,而且是强一直性的。(一般节点控制在15个以下)

数据同步带来的问题

无论在哪个节点写入数据,最终所有节点的数据都是相同的。
为了实现数据切分的效果,我们必须新组建一个PXC集群。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值