docker搭建pxc集群

前言

随着mysql存储的数据量越来越大,mysql查询单表时的响应速度也会随之变慢,尤其是当单节点承载的数据量超出一定的范围后,比如单表超过2000万之后,查询响应速度会下降的很快,因此,一方面可以考虑mysql集群,另一方面可以考虑读写分离,这两种方案的出发点不同,集群更多是从单节点可容纳的并发连接数考虑,比如单节点的mysql服务器支持的最大连接数是有限的;而读写分离可以提升mysql服务总体的读写性能,避免读请求和写请求都打到同一个节点上,分摊压力

总结来说,可以归纳为单节点的mysql服务始终是有瓶颈的,因此需要考虑集群化的解决方案,业界比较成熟的方案包括PXC集群和replication集群

pxc集群

PXC介绍

  • Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法
  • 集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上,生产环境建议不要超过15个,否则整体性能下降的很快
  • 每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器
  • 每个节点都包含完整的数据副本
  • PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(使用了Galera library,一个通用的用于事务型应用的同步、多主复制插件)

PXC特性

  • 同步复制,事务要么在所有节点提交或不提交。
  • 多主复制,可以在任意节点进行写操作。
  • 在从服务器上并行应用事件,真正意义上的并行复制。
  • 节点自动配置,数据一致性,不再是异步复制。
  • PXC最大的优势:强一致性、无同步延迟

PXC优势

  • 服务高可用
  • 数据同步复制(并发复制),几乎无延迟
  • 多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让galera解决数据冲突
  • 新节点可以自动部署,部署操作简单
  • 数据严格一致性,尤其适合电商类应用
  • 完全兼容MySQL

pxc集群搭建

下面演示如何使用docker快速搭建一个2个节点的pxc集群

1、环境准备

两台安装了docker的虚拟机或者阿里云,基于centos7.X

机器IP

节点属性

192.168.145.128

docker1 - master

192.168.145.129

docker2 - worker

2、开放如下防火墙端口

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=7946/udp --permanent
firewall-cmd --zone=public --add-port=4789/tcp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --zone=public --add-port=9001/tcp --permanent
firewall-cmd --reload

3、下载PXC镜像

docker pull percona/percona-xtradb-cluster:5.7.21
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
docker rmi percona/percona-xtradb-cluster:5.7.21

注意在每个节点上都要执行

4、创建并初始化集群

  1. 第一个启动的PXC节点是主节点,它要初始化PXC集群
  2. PXC启动之后,就没有主节点的角色了
  3. PXC集群中任何节点都是可以读写数据

在机器1上执行:

docker swarm init

执行完毕,产生如下的一行命令,将这行命令分别拷贝到其他的节点进行执行,表示其他节点都加入到这个集群中来

将这段命令拷贝到docker2执行

docker swarm join --token SWMTKN-1-5b0lg8fdyovq4nrlrzxg5wfaqxeuhucms481zeefphm2m8phql-dzz5r37e33sv7o9jt92tw0s60 192.168.145.128:2377

可以看到,docker2节点作为一个worker节点

swarm集群维护常用命令

docker node ls [查看集群节点]
docker node rm 节点 【强制移除运行中的节点】
docker swarm leave -f  [强制解散当前的swarm集群]

通过上面这些命令,可以用来管理swarm集群,比如移除【下线】集群中的某个节点,解散某个集群,需要说明的一个问题是,当我们从主节点强制解散某个节点的时候,下一次在重新创建一个再把其他节点加入进来的时候,一定要在其他节点上面执行leave的命令,否则会报加入失败

5、创建docker网络

试想在真实的应用中,当需要创建很多个PXC集群的时候,集群中不同的节点进行网络通讯时,都使用宿主机网络就很不好维护和管理,因此可以使用dockek创建网络,然后让各自的PXC集群使用这个网络,这样就可以将不同的PXC集群进行网络区分,便于运维管理

创建一个docker网络给下面的PXC集群使用

docker network create -d overlay --attachable swarm_mysql

创建成功后,可以通过命令进行查看

docker network ls

也可以删除自建的docker网络

docker network rm swarm_mysql [移除虚拟网络]

6、创建PXC主节点

通过下面的命令创建集群的主节点

docker run -d -p 9001:3306 \

-e MYSQL_ROOT_PASSWORD=123456 \

-e CLUSTER_NAME=PXC1 \

-e XTRABACKUP_PASSWORD=123456 \

-v pnv1:/var/lib/mysql --privileged \

--name=pn1 --net=swarm_mysql \

pxc

简单解释下命令:

1. *docker run -d -p 9001:3306 *

将docker容器的mysql的3306端口映射到宿主机的9001端口

.2.*-e MYSQL_ROOT_PASSWORD=123456 *

设置mysql客户端连接密码

3.*-e CLUSTER_NAME=PXC1 *

给PXC集群起一个名字,这里叫做PXC1

4.*-v pnv1:/var/lib/mysql --privileged *

5.宿主机的pnv1数据卷目录挂载容器1的mysql目录

*–name=pn1 --net=swarm_mysql *

使用上面创建的虚拟网络

这里需要解释下,采用docker搭建PXC集群时,不支持文件目录的挂载方式,而只支持数据卷的挂载方式,因此上面的pnv1为宿主机的数据卷,可以提前创建,如果不存在,执行上面的命令时会自动在宿主机进行创建

将上面的创建PXC主节点命令执行一下

执行成功后,稍等1~2分钟可以使用navicat客户端进行连接使用了

同时我们可以通过上面的数据卷命令查看挂载的详情

7、创建PXC从节点

执行如下命令

docker run -d -p 9001:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC1 \
-e XTRABACKUP_PASSWORD=123456 \ 
-e CLUSTER_JOIN=pn1 \
-v pnv2:/var/lib/mysql --privileged \ 
--name=pn2 --net=swarm_mysql \
pxc

上面的命令和创建主节点的基本相同,额外新增的是下面这行命令

-e CLUSTER_JOIN=pn1 \
1

想必大家可以猜到,这是加入集群名为pn1的意思,正是如此,等待1~2分钟docker进程起来之后,我们使用navicat进行连接,也能正常连接了

8、PXC集群测试

在本文的开篇我们说,PXC集群属于同步复制类型的集群,即在某个几点上操作DB之后,其他节点同步会去复制数据,比如我们在节点1上面创建一个test的数据库,很快你会发现在第二个节点的库中也创建了

同时,我们再在2库上面创建一张表,第一个节点的库中也立即产生了,这个时间差,对于使用者来讲,几乎感觉不到

如果想扩展更多的节点,只需要拷贝上面的命令稍加修改即可,本篇的讲解到此结束,最后感谢观看!

原文链接:https://blog.csdn.net/zhangcongyi420/article/details/106035115

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CentOS7.9 下 MySQL 之 PXC 集群部署【Docker+多机多节点】

    泥豆芽儿 MT
  • MySQL集群搭建方案(PXC)

    技术层面上,传统的单节点数据库,万一宕机了,就凉凉了。容灾性能差、抗并发能力有限,数据量大的时候查询有瓶颈。学习层面上,作为一个技术人了解一些技术相关的知识那也...

    江涛同志
  • 用 Docker 搭建高可用 MySQL 集群玩玩儿!

    4、创建五个数据卷(pxc无法直接存取宿组机的数据,所以创建五个docker数据卷)

    dys
  • 「实战篇」开源项目docker化运维部署-借助dockerSwarm搭建集群部署(九)

    为了让学习的知识融汇贯通,目前是把所有的集群都放在了一个虚拟机上,如果这个虚拟机宕机了怎么办?俗话说鸡蛋不要都放在一个篮子里面,把各种集群的节点拆分部署,应该把...

    IT架构圈
  • 单机上快速搭建pxc测试集群

    https://www.percona.com/blog/2019/10/15/how-to-start-a-3-node-percona-xtradb-clu...

    二狗不要跑
  • 「实战篇」开源项目docker化运维部署-mysql 热备份数据(五)

    PS:数据库的热备份,冷还原也讲完了,真心感觉也不是那么复杂。其实就是这样,但是在云平台越来越盛行的今天,基本上买个rdrs数据库这些功能都有了。了解下Xtra...

    IT架构圈
  • 「实战篇」开源项目docker化运维部署-搭建mysql集群(四)

    PS:如果通过docker的方式直接拉取haproxy和keepalived镜像,比直接在镜像里面安装应用方便很多,建议各位老铁尽量避免在容器内安装应用,这样真...

    IT架构圈
  • CentOS7 下 MySQL 数据库 PXC 集群部署操作指导

    泥豆芽儿 MT
  • docker学习系列13 实现 基于pxc 的mysql 多节点主主同步

    MySQL本身是开源的,有些公司或社区基于MySQL发布了新的分支,如有名的MariaDB。 在介绍 Percona 之前,首要要介绍的是XtraDB存储引擎...

    mafeifan
  • 在CentOS8下搭建PXC集群

    PXC是Percona XtraDB Cluster的缩写,是 Percona 公司出品的免费MySQL集群产品。PXC的作用是通过mysql自带的Galera...

    端碗吹水
  • 容器化RDS|计算存储分离 or 本地存储

    随着交流机会的增多(集中在金融行业, 规模都在各自领域数一数二), 发现大家对 Docker + Kubernetes 的接受程度超乎想象, 并极有兴趣将这套架...

    沃趣科技
  • 浅谈数据库集群方案

    数据库往往是系统中的性能瓶颈,所以通常在系统设计中会引入各种各样的缓存机制,以避免频繁访问数据库。另外,数据库由于其重要性,高可用要求也是避免不了的,因为一旦数...

    端碗吹水
  • MySQL高可用之PXC

    PXC简介 PXC(Percona XtraDB Cluster)是一个开源的MySQL高可用解决方案。他将Percona Server和XtraBackup与...

    小手冰凉
  • 容器化RDS|计算存储分离 or 本地存储?

    随着交流机会的增多(集中在金融行业,规模都在各自领域数一数二),发现大家对 Docker + Kubernetes 的接受程度超乎想象, 并极有兴趣将这套架构应...

    wubx
  • ProxySQL Cluster +PXC 高可用集群的搭建

    https://blog.51cto.com/lee90/2299815 # 开启web监控页面

    二狗不要跑
  • 使用docker 基于pxc镜像搭建mysql高可用集群 原

    docker pull percona/percona-xtradb-cluster:5.7.21

    海涛
  • docker--搭建docker swarm集群

    Swarm这个项目名称特别贴切。在Wiki的解释中,Swarm behavior是指动物的群集行 为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swa...

    eadela
  • 为PXC集群引入Mycat并构建完整的高可用集群架构

    在CentOS8下搭建PXC集群一文中,演示了如何从零开始搭建一个三节点的PXC集群。但是光搭建了PXC集群还不够,因为在实际的企业应用中,可能会存在多个PXC...

    端碗吹水
  • docker搭建redis集群

    运行redis镜像 首先使用docker启动3个redis容器服务,分别使用到6379、6380、6381端口 docker run --name redis-...

    似水的流年

扫码关注云+社区

领取腾讯云代金券