当前位置: 首页 > news >正文

基于腾讯云Docker部署PXC搭建MySQL集群

背景

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

部署环境

腾讯云轻量应用服务器,CentOS7.6,纯净系统

在这里插入图片描述

关闭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

在这里插入图片描述

开放服务器端口

下面来一步步看看如何安装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 network create --subnet=172.20.0.0/16  net1

docker network ls

docker inspect net1

docker network rm net1

在这里插入图片描述

创建MySQL容器卷

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


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

在这里插入图片描述

注意

创建节点后,因为容器节点需要进行集群以及数据库相关的初始化操作,需要等待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

相关文章:

  • 探索Java世界中的七大排序算法(上)
  • React参数传递问题
  • 从零开始学习Linux(3)----权限
  • 初识LangChain的快速入门指南
  • 一个不同长度元素排序找行和列的需求
  • 基于springboot+vue+Mysql的社区维修平台
  • 【C++】树形关联式容器set、multiset、map和multimap的介绍与使用
  • 无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解
  • KaiwuDB 拿下“物联之星”双项殊荣
  • Android 打包和安装命令二合一的好用脚本
  • C#单向链表实现:Append,Move,Delete,InsertAscending, InsertUnAscending,Clear
  • 什么是Java的双亲委派模型? Java中的volatile关键字有什么作用?
  • Node.js:模块化
  • java面试-GC垃圾回收机制
  • 没有谷歌翻译,我该怎么办?
  • Java Web Spring核心之AOP的解析及实战(AOP的实现、切入点、Aspect Spring的持久化 Hibernate)
  • kali中实用的小工具
  • C++ 算法竞赛中的排序算法
  • 斯坦福大学吴恩达教授最新来信:AI, GPU和芯片的未来
  • 高薪程序员面试题精讲系列155之项目介绍,说说你最熟悉的项目,遇到了哪些困难?
  • “数据中台、读写分离、表分区”解决MySQL 单表数据量、并放量双高的效率瓶颈
  • 调用百度云语音转文本
  • SDWAN的功能和场景应用
  • JS 第三课(JS的变量类型和数据类型)
  • Matlab论文插图绘制模板第56期—曲面图(Surf)
  • 全志 Tina Linux 存储介质切换:eMMC,SPI NAND,SPI NOR,SD Card,SD NAND
  • FPGA—从加法运算理解流水线的作用
  • C++从入门到精通 C++98.11.14.17
  • 基于单片机的16×16点阵的滚动显示屏设计
  • LeetCode 940. 不同的子序列 II
  • 【VUE基础】webpack
  • 【漏洞复现-discuz-wooyun-命令执行】vulfocus/discuz-wooyun_2010_080723