栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker 使用PXC搭建MySQL集群(MySQL:5.7.24)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker 使用PXC搭建MySQL集群(MySQL:5.7.24)

关于MySQL集群,常用的有两种模式:Replication集群架构(主从复制) 和 PXC集群架构

  • PXC集群方案所有节点都是可读可写的,Replication从节点不能写入,因为主从同步是单向的,无法从slave节点向master点同步。
  • PXC同步机制是同步进行的,这也是它能保证数据强一致性的根本原因,Replication同步机制是异步进行的,它如果从节点停止同步,依然可以向主节点插入数据,正确返回,造成数据主从数据的不一致性。
  • PXC是用牺牲性能保证数据的一致性,Replication在性能上是高于PXC的。所以两者用途也不一致。PXC是用于重要信息的存储,例如:订单、用户信息等。Replication用于一般信息的存储,能够容忍数据丢失,例如:购物车,用户行为日志等。

这里记录下搭建PXC集群的过程,其中选择的镜像是 percona/percona-xtradb-cluster:5.7.24,

原文文档见:about Percona XtraDB Cluster

Docker集群环境为:docker-79、docker-80、docker-81 三台机器,其中docker-81为当前集群的Leader节点。

1. 拉取镜像:
docker pull percona/percona-xtradb-cluster:5.7.24

这里可以根据自己需要的MySQL版本,直接修改后面的版本号。不同版本的MySQL,正常应该都可以拉下来。

2. 创建docker Swarm 内部网络
docker network create -d overlay --attachable pxc_network


这里必须要加上–attachable 否则后面运行pxc容器时,会报错:XXX not manually attachable.

docker: Error response from daemon: Could not attach to network pxc-network: rpc error: code = PermissionDenied desc = network pxc-network not manually attachable.

如果在单台服务器上则需要根据宿主机的网卡,创建子网段 :docker network create --subnet=172.18.0.0/24 net1 后面用的时候,指定172.18.0.0到172.18.0.24 范围内的IP 作为每个pxc节点的IP

我这里是三台服务器,就直接创建了一个overlay 类型的 network

3. 创建数据卷volume

在每台机器上一次执行创建数据卷 volume_81 和备份数据卷 backup:

docker volume create volume_81
docker volume create backup

接着可以看下新建的数据卷,在宿主机上的位置:docker inspect 数据卷名

其中:/var/lib/docker/volumes/volume_81/_data 即为 volume_81卷所在位置。其实这里不手动创建也是可以的,在运行时,如果数据卷不存在,docker 会自动帮我们新建。

在 docker-81 机器上,启动 pxc_81 节点:

docker run --privileged=true 
    --restart=always 
    --name node_81 
    -d -p 3306:3306 
    -v volume_81:/var/lib/mysql 
    -v backup:/data 
    -e MYSQL_ROOT_PASSWORD=abc123456
    -e CLUSTER_NAME=PXC_CLUSTER 
    -e XTRABACKUP_PASSWORD=abc123456
    --net=pxc_network 
    percona/percona-xtradb-cluster:5.7.24


节点正常运行后,就可以使用 Navicat 数据库链接工具访问试下:


另外可以在宿主机上看到MySQL容器的文件:

上面一定要使用Navicat连接成功后,再从节点上安装,否则从节点即使正常运行,也不一定能连上。

接着在其他两台服务器上运行容器。
docker-80 机器

docker run --privileged=true 
    --restart=always 
    --name node_80 
    -d -p 3306:3306 
    -v volume_80:/var/lib/mysql 
    -v backup:/data 
    -e MYSQL_ROOT_PASSWORD=huauN2021 
    -e CLUSTER_NAME=PXC_CLUSTER 
    -e CLUSTER_JOIN=node_81 
    -e XTRABACKUP_PASSWORD=huauN2021 
    --net=pxc_network 
    percona/percona-xtradb-cluster:5.7.24

docker-79 机器

docker run --privileged=true 
    --restart=always 
    --name node_79 
    -d -p 3306:3306 
    -v volume_79:/var/lib/mysql 
    -v backup:/data 
    -e MYSQL_ROOT_PASSWORD=huauN2021 
    -e CLUSTER_NAME=PXC_CLUSTER 
    -e CLUSTER_JOIN=node_81 
    -e XTRABACKUP_PASSWORD=huauN2021 
    --net=pxc_network 
    percona/percona-xtradb-cluster:5.7.24

然后可以尝试在任意节点上新建数据库,其他节点会自动同步该数据库或者数据。

然后可以看下之前创建的network的使用情况:

docker network inspect pxc_network


可以看到三台节点的IP。

这里虽然我们第一个创建的是node81节点,并且看上去它作为主节点了,其他节点是按照它的名字加入了集群,这里可以尝试停掉 docker-81 机器上的MySQL容器,然后验证,docker-79 和 docker-80 上面的MySQL仍然可以保持同步。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512901.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号