在企业项目开发中,高可用是一个非常重要的指标,其中高可用(MHA)的数据库是不可或缺的部分,我们今天就来看看如何使用PXC搭建高可用的MySQL数据库集群
腾讯云轻量应用服务器,CentOS7.6
Linux的安全验证时美国国家安全局设计的系统安全工具,我们用不到,可以关掉
#临时关闭
setenforce 0
#停止所有运行的容器
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
#更新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
下面来一步步看看如何安装PXC集群,注意PXC使用了宿主机的3306,4444,4567,4568
端口,需要在云服务器上开发这些端口。此外,还需要开放3307,3308
宿主机端口用于MySQL集群容器端口的映射
需要指定
版本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 network create --subnet=172.20.0.0/16 net1
docker network ls
docker inspect net1
docker network rm net1
主要目的是将容器内容挂载到宿主机的卷中,方便管理容器
docker volume create --name v1
docker volume create v2
docker volume create v3
docker inspect v1
docker volume rm v1
#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
创建节点后,因为容器节点需要进行集群以及数据库相关的初始化操作,需要等待1分钟左右,通过下面的命令查看容器是否初始化完成
#show status like 'wsrep_cluster%'
docker logs node1
通过Navicat连接数据库DB1
每个节点的创建都需要等待一分钟左右,以方便容器完成一些初始化操作
#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 ps
DB2
DB3
在DB3中新建一个test库并在test库里新建一个user表,添加一条数据,看是否同步到了DB1,DB2
添加一条数据
刷新DB1,DB2查看数据是否同步
基于纯净的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