Docker部署PXC搭建MySQL集群

背景

在企业项目开发中,高可用是一个非常重要的指标,其中高可用(MHA)的数据库是不可或缺的部分,我们今天就来看看如何使用PXC搭建高可用的MySQL数据库集群

Docker部署PXC搭建MySQL集群_第1张图片

Docker部署PXC搭建MySQL集群_第2张图片

Docker部署PXC搭建MySQL集群_第3张图片

Docker部署PXC搭建MySQL集群_第4张图片

Docker部署PXC搭建MySQL集群_第5张图片

Docker部署PXC搭建MySQL集群_第6张图片

Docker部署PXC搭建MySQL集群_第7张图片

Docker部署PXC搭建MySQL集群_第8张图片

部署环境

腾讯云轻量应用服务器,CentOS7.6

Docker部署PXC搭建MySQL集群_第9张图片

关闭Linux安全验证

Linux的安全验证时美国国家安全局设计的系统安全工具,我们用不到,可以关掉

#临时关闭
setenforce 0

卸载Docker

#停止所有运行的容器
docker stop $(docker ps -a -q)
#删除所有容器
docker rm $(docker ps -aq)
#删除所有镜像
docker rmi -f $(docker images -qa)
#移除安装的Docker
sudo yum remove docker \
				docker-client \
				docker-client-latest \
				docker-common \
				docker-latest \
				docker-latest-logrotate \
				docker-logrotate \
				docker-engine
				

安装Docker

#更新yum
#yum -y update
#安装Docker
yum install docker -y
#配置Docker镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
#启动docker
systemctl start docker
#查看docker运行状态
systemctl status docker

Docker部署PXC搭建MySQL集群_第10张图片

开放服务器端口

下面来一步步看看如何安装PXC集群,注意PXC使用了宿主机的3306,4444,4567,4568端口,需要在云服务器上开发这些端口。此外,还需要开放3307,3308宿主机端口用于MySQL集群容器端口的映射

在这里插入图片描述

安装PXC

需要指定版本5.7,基于我的环境,试了不带版本的会报错


docker pull percona/percona-xtradb-cluster:5.7

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

docker rmi percona/percona-xtradb-cluster:5.7

docker images

Docker部署PXC搭建MySQL集群_第11张图片

为了安全起见,配置容器内部虚拟网络


docker network create --subnet=172.20.0.0/16  net1

docker network ls

docker inspect net1

docker network rm net1

Docker部署PXC搭建MySQL集群_第12张图片

创建MySQL容器卷

主要目的是将容器内容挂载到宿主机的卷中,方便管理容器


docker volume create --name v1

docker volume create v2

docker volume create v3

docker inspect v1

docker volume rm v1

Docker部署PXC搭建MySQL集群_第13张图片

利用PXC镜像创建初始节点的容器


#1

docker run -d -p 3306:3306 \
-v v1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=root \
--privileged \
--name=node1 \
--net=net1 \
--ip 172.20.0.2 pxc

Docker部署PXC搭建MySQL集群_第14张图片

注意

创建节点后,因为容器节点需要进行集群以及数据库相关的初始化操作,需要等待1分钟左右,通过下面的命令查看容器是否初始化完成

#show status like 'wsrep_cluster%'

docker logs node1 

Docker部署PXC搭建MySQL集群_第15张图片

通过Navicat连接数据库DB1

Docker部署PXC搭建MySQL集群_第16张图片

创建其他集群节点

每个节点的创建都需要等待一分钟左右,以方便容器完成一些初始化操作


#2

docker run -di -p 3307:3306 \
-v v2:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_JOIN=node1 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=root \
--privileged \
--name=node2 \
--net=net1 \
--ip 172.20.0.3 pxc


#3

docker run -d -p 3308:3306 \
-v v3:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_JOIN=node1 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=root \
--privileged \
--name=node3 \
--net=net1 \
--ip 172.20.0.4 pxc

参数说明

-d:后台运行
-p 3306:3306:宿主机端口:容器内端口
--privileged:容器权限
--name:容器节点名
--net:网段
--ip:网段内IP
pxc:镜像名,通过镜像创建容器

Docker部署PXC搭建MySQL集群_第17张图片

通过下面的指令可以查看集群的运行状况

docker ps

在这里插入图片描述

DB2

Docker部署PXC搭建MySQL集群_第18张图片

DB3

Docker部署PXC搭建MySQL集群_第19张图片

测试

在DB3中新建一个test库并在test库里新建一个user表,添加一条数据,看是否同步到了DB1,DB2

Docker部署PXC搭建MySQL集群_第20张图片

添加一条数据

Docker部署PXC搭建MySQL集群_第21张图片

刷新DB1,DB2查看数据是否同步

Docker部署PXC搭建MySQL集群_第22张图片

全部脚本

基于纯净的CentOS7.6版本

#关闭安全认证

setenforce 0


#安装Docker

docker stop $(docker ps -a -q)

docker rm $(docker ps -aq)

docker rmi -f $(docker images -qa)

sudo yum remove docker \
						   docker-client \
						   docker-client-latest \
						   docker-common \
						   docker-latest \
						   docker-latest-logrotate \
						   docker-logrotate \
						   docker-engine



yum install docker -y

#配置Docker镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF

service docker start

systemctl status docker


#拉取pxc镜像

docker pull percona/percona-xtradb-cluster:5.7

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

docker rmi percona/percona-xtradb-cluster:5.7


#安全考虑,创建Docker内网

docker network create --subnet=172.20.0.0/16  net1

docker network ls

docker inspect net1

docker network rm net1


#目录映射,创建volume

docker volume create --name v1

docker volume create v2

docker volume create v3

docker inspect v1

docker volume rm v1


#创建pxc容器
#1

docker run -d -p 3306:3306 \
-v v1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=root \
--privileged \
--name=node1 \
--net=net1 \
--ip 172.20.0.2 pxc

show status like 'wsrep_cluster%'

docker logs node1 

#2

docker run -di -p 3307:3306 \
-v v2:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_JOIN=node1 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=root \
--privileged \
--name=node2 \
--net=net1 \
--ip 172.20.0.3 pxc

#3

docker run -d -p 3308:3306 \
-v v3:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_JOIN=node1 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=root \
--privileged \
--name=node3 \
--net=net1 \
--ip 172.20.0.4 pxc

你可能感兴趣的:(MySQL,mysql,docker,数据库)