mysql 集群_4:Docker搭建MYSQL集群实战(PXC模式)

# MYSQL集群PXC 特性

在实际的部署中,MYSQL集群的部署方式有很多种,比如 主从啊 双双组合啊等等,大家可以 自行去百度,找到自己合适的集群部署模式来应对你的业务,我这里选择PXC集群模式;以下是PXC的特性:

  • 速度慢,但能保证强一致性,适用于保存价值较高的数据,比如订单、客户、支付等。
  • 数据同步是双向的,在任一节点写入数据,都会同步到其他所有节点,在任何节点上都能同时读写。
  • 采用同步复制,向任一节点写入数据,只有所有节点都同步成功后,才会向客户端返回成功。事务在所有节点要么同时提交,要么不提交;

# PXC 安装

在Docker中安装PXC集群,使用Docker仓库中的PXC官方镜像:https://hub.docker.com/r/percona/percona-xtradb-cluster

  1. 从docker下载PXC镜像:
docker pull percona/percona-xtradb-cluster

注意这里是下载最新版本的PXC 最新的是8.0以上的,经过我采坑,8.0以上启动集群的时候:节点通信报了一个SSL的错误,搞了半天没有解决好,故这里选择 5.7.21的版本

docker pull percona/percona-xtradb-cluster:5.7.21

安装完成:

default tag: latestTrying to pull repository docker.io/percona/percona-xtradb-cluster ... latest: Pulling from docker.io/percona/percona-xtradb-cluster:5.7.21ff144d3c0ab1: Pull complete eafdff1524b5: Pull complete c281665399a2: Pull complete c27d896755b2: Pull complete c43c51f1cccf: Pull complete 6eb96f41c54d: Pull complete 4966940ec632: Pull complete 2bafadcea292: Pull complete 3c2c0e21b695: Pull complete 52a8c2e9228e: Pull complete f3f28eb1ce04: Pull complete d301ece75f56: Pull complete 3d24904bec3c: Pull complete 1053c2982c37: Pull complete Digest: sha256:17c64dacbb9b62bd0904b4ff80dd5973b2d2d931ede2474170cbd642601383bdStatus: Downloaded newer image for docker.io/percona/percona-xtradb-cluster:5.7.21

外送2个额外的命令在实际的部署中自行灵活使用:

// 修改镜像名称为PXCdocker tag percona/percona-xtradb-cluster:5.7.21 pxc// 删除原来的percona/percona-xtradb-cluster镜像docker rmi percona/percona-xtradb-cluster:5.7.21

查询镜像:命令 docker images

[root@172-10-22-104 /]# docker imagesREPOSITORY                   TAG                 IMAGE ID            CREATED             SIZEpxc                          latest              f1439de62087        2 years ago         413MB

# 出于安全考虑,给PXC集群创建Docker内部网络

# 创建网段docker network create --subnet=172.18.0.0/24 net1

以下2个命令灵活使用:

# 查看网段docker network inspect net1# 删除网段# docker network rm net1

# 创建Docker卷

使用Docker时,业务数据应保存在宿主机中,采用目录映射,这样可以使数据与容器独立。但是容器中的PXC无法直接使用映射目录,解决办法是采用Docker卷来映射

# 创建名称为v1的数据卷,--name可以省略docker volume create --name v1

查看

docker inspect v1
[root@localhost ~]# docker inspect v1[    {        "Driver": "local",        "Labels": {},        "Mountpoint": "/var/lib/docker/volumes/v1/_data",#这里是在宿主机的保存位置        "Name": "v1",        "Options": {},        "Scope": "local"    }]

删除

docker volume rm v1

我们启用5个节点,去创建5个数据卷

# 创建5个数据卷docker volume create --name v1docker volume create --name v2docker volume create --name v3docker volume create --name v4docker volume create --name v5

# 创建5个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

查看:

[root@localhost ~]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                                   NAMESf4708ce32209        pxc                 "/entrypoint.sh "   About a minute ago   Up About a minute   4567-4568/tcp, 0.0.0.0:3309->3306/tcp   node4bf612f9586bc        pxc                 "/entrypoint.sh "   17 minutes ago       Up 17 minutes       4567-4568/tcp, 0.0.0.0:3310->3306/tcp   node59fdde5e6becd        pxc                 "/entrypoint.sh "   17 minutes ago       Up 17 minutes       4567-4568/tcp, 0.0.0.0:3308->3306/tcp   node3edd5794175b6        pxc                 "/entrypoint.sh "   18 minutes ago       Up 18 minutes       4567-4568/tcp, 0.0.0.0:3307->3306/tcp   node233d842de7f42        pxc                 "/entrypoint.sh "   21 minutes ago       Up 21 minutes       0.0.0.0:3306->3306/tcp, 4567-4568/tcp   node1

安装到此完成;

# 验证

使用MYSQL 连接工具进行连接 IP 天宿主的IP ,端口填写你启动映射的端口;账号root,密码是你启动的时候的设置我这里是abc123456;

然后创建表,创建数据,看是否在各节点同步数据,如果有,那证明成功;

# 下一章:数据库负载均衡的必要性(haproxy)

9acfc3ac5b58ecaf927343f66b973981.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值