Docker 搭建MySQL PXC集群(你还不知道吗,快来看看吧)

文章目录

前言

一、获取PXC镜像

二、重命名镜像名称

三、创建网段

四、创建PXC挂载数据卷

五、创建PXC容器

总结



前言

PXC集群是mysql的一种集群搭建方式,相对于replication模式有缺点有优点,读者可自行了解。


 

一、获取PXC镜像

docker pull percona/percona-xtradb-cluster

二、重命名镜像名称

docker tag percona/percona-xtradb-cluster:latest pxc

三、创建网段

-- 创建命令
docker network create --subnet=172.18.0.0/24 net1

-- 删除命令
docker network rm net1

四、创建PXC挂载数据卷

-- 创建数据卷命令
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5

-- 查看数据卷信息
docker inspect v1

查看数据卷得到的path就是当前数据卷挂载的目录

五、创建PXC容器

# 创建5个PXC容器构成集群
# 第一个节点
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql --name=node1 --network=net1 --ip 172.18.0.2 pxc
# 在第一个节点启动后要等待一段时间,等候mysql启动完成。

# 第二个节点
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --name=node2 --net=net1 --ip 172.18.0.3 pxc

# 第三个节点
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --name=node3 --net=net1 --ip 172.18.0.4 pxc

# 第四个节点
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --name=node4 --net=net1 --ip 172.18.0.5 pxc

# 第五个节点
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql --name=node5 --net=net1 --ip 172.18.0.6 pxc

注意点:可能从第二个容器开始就启动不起来,会报以下错误:

error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding

分析:引起该错误的原因是因为次级容器中的ca证书,服务器,客户端的公私钥和主容器中的不匹配导致的。

解决方法:将主容器中的ca证书,服务器和客户端的公私钥复制到次级容器中覆盖原来的,重新启动容器即可。

六、关于服务器突然宕机后无法启动集群的问题

服务器宕机后,重新启动集群,出现以下报错:

[ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one 

问题分析:无法从当前节点实现安全引导。原因是当前节点不是集群中最后离开的节点,也就是说当前节点可能未能包含所有的更新。 

解决方案:需要进入当前节点所挂载的数据卷中,找到grastate.dat文件,将安全引导参数safe_to_bootstrap设置为1

 

 


总结

以上是单台机器内容集群多节点部署,还有 通过docker swarm 实现的多台服务器之间的真正的集群部署。

后面笔者将以新的篇章进行讲解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值