MySQL系列-Docker搭建Percona XtraDB Cluster(图文)

网友投稿 624 2023-05-28

MySQL系列-Docker搭建Percona XtraDB Cluster(图文)

MySQL系列-Docker搭建Percona XtraDB Cluster(图文)

一、部署环境说明

本文中使用本地VM虚机部署测试。

OS:CentOS Linux release 7.6.1810 (Core) 3.10.0-957.el7.x86_64

IP:192.168.168.100

Docker Version:v20.10.6

虚机配置:2核CPU、4G内存

注:①系统为最小化安装,部署前已完成系统初始化、内核及安全优化;

②Docker已安装。

二、Docker部署PXC

Docker镜像仓库地址:

Docker部署官方说明文档:

1.拉取镜像

docker pull percona/percona-xtradb-cluster:5.7.33

## 使用 tag 给他打个标签,方便使用

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

## 删除之前的镜像

docker rmi -f percona/percona-xtradb-cluster:5.7.33

2.设置网络

## 创建一个网络专门给 pxc 进行使用

docker network create --subnet=10.8.0.0/24 pxc-net

## 查看创建好的网络信息

docker network ls

3.持久化存储

## 创建三个 volume 给容器使用

docker volume create --name data1 docker volume create --name data2 docker volume create --name data3

## 查看已创建的存储卷信息

docker volume ls

## 查看存储卷详情

docker volume inspect data1

4.构建容器并形成集群关系

##node1 docker run -d --restart always -p 3301:3306 \  -v data1:/var/lib/mysql \  -e MYSQL_ROOT_PASSWORD=test20210425 \  -e CLUSTER_NAME=pxc \  -e XTRABACKUP_PASSWORD=test20210425 \  --net=pxc-net --privileged \  --ip 10.8.0.2 --name node1 pxc:5.7.33  ##node2 docker run -d --restart always -p 3302:3306 \  -v data2:/var/lib/mysql \  -e MYSQL_ROOT_PASSWORD=test20210425 \  -e CLUSTER_NAME=pxc \   -e XTRABACKUP_PASSWORD=test20210425 \  -e CLUSTER_JOIN=node1 \  --net=pxc-net --privileged \  --ip 10.8.0.3 --name node2 pxc:5.7.33  ##node3 docker run -d --restart always -p 3303:3306 \  -v data3:/var/lib/mysql \  -e MYSQL_ROOT_PASSWORD=test20210425 \  -e CLUSTER_NAME=pxc \  -e XTRABACKUP_PASSWORD=test20210425 \  -e CLUSTER_JOIN=node1 \  --net=pxc-net --privileged \  --ip 10.8.0.4 --name node3 pxc:5.7.33

## 部分参数说明

①CLUSTER_JOIN:形成集群关系  ②MYSQL_ROOT_PASSWORD:用户root密码  ③CLUSTER_NAME:集群名称  ④XTRABACKUP_PASSWORD:数据备份密码  ⑤privileged:指定最高优先级。标识容器内的root拥有真正的root权限,否则root只是一个普通用户  ⑥net:所处网段,pxc-net为创建网段

## 查看容器

docker ps -a

5.验证

①验证集群是否可用

##访问MySQL客户端(任意节点)

docker exec -it node1 /usr/bin/mysql -uroot -p  //输入上述设置的root密码登录MySQL

## 查看wsrep状态变量(部分变量截图)

show status like 'wsrep%';

说明:wsrep_ready:状态监控项,可以知道当前节点的状态是不是可以抚慰,正常情况下为ON,如果变为OFF,则可能是发生了脑裂,或者和其他节点之间的网络连不上,又或者是galera集群没有正常启动等;一般可以通过命令set global wsrep_provider_options='pc.bootstrap=yes' 来恢复,不过在执行这个命令之后,需要观察整个集群的状态,不然可能会导致这个节点在逻辑上脱离集群。这个命令的作用就是让当前节点变为primary,如果执行了,则说明确定要使用这个节点来提供服务了。

②使用Naticat工具连接进行验证

注:构建容器时映射的端口防火墙默认已放开。

## 在 node1 中创建一个 test 库

## 查看 node2 和 node3

可看到数据进行了同步,至此 pxc 的搭建就完成了。

三、Docker部署HaProxy

搭建好了 pxc 之后,每次访问的是哪个数据库,可以通过 haproxy 进行路由,类似 nginx,如果 node1 资源不是很多了,可以将请求分发到 node2 或者 node3 当中。

Docker镜像仓库地址:

1.拉取镜像

docker pull haproxy

2.创建配置文件

## 创建haproxy的配置文件,映射到容器中

mkdir -p /data/haproxy vi /data/haproxy/haproxy.cfg

## 在配置文件中输入以下内容

3.构建容器

docker run -d --restart always \  -p 3306:3306 -p 8888:8888 \  -v /data/haproxy:/usr/local/etc/haproxy \  --name haproxy01 \  --net=pxc-net --privileged haproxy

4.查看容器

docker ps -a |grep haproxy

5.验证

①查看监控页面

浏览器访问

## 登录之后可以发现 MYSQL 几个节点都是DOWN状态的,这需要在容器内部启动haproxy服务。

②启动haproxy服务

## 进入haproxy容器内启动服务

docker exec -it haproxy01 /bin/bash  haproxy -f /usr/local/etc/haproxy/haproxy.cfg &

③创建haproxy用户并授权

## 进入任一数据库容器内操作(或在Naticat工具端操作)

docker exec -it node1 /bin/bash  mysql -uroot -p  //输入密码登录

use mysql; CREATE USER 'haproxy'@'%' IDENTIFIED BY '';    //空密码 flush privileges;

④刷新监控页面

## 刷新页面后,3个节点都是 up 状态

## 同时可以使用3306端口在 navicat 进行连接了

## 连接成功如下图所示,即可在Navicat工具上进行创建\删除用户、数据库等其他操作,无需进入容器操作。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SQL优化之不“画蛇添足”
下一篇:深度|数据湖分析算力隔离技术剖析
相关文章