基于docker搭建mysql的pxc集群+haproxy+keepalived的高可用(1️⃣)

本文详细介绍了如何使用Docker搭建MySQL Percona XtraDB Cluster(PXC),以解决单节点数据库服务器无法满足高并发读写请求及高可用需求的问题。通过创建内部网络和多个容器节点,实现了数据的实时同步和高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建之前在我们先说说为什么要搭建这样的集群

(1)	那是因为单节点数据库服务器无法满足增长的读写请求;
(2)	单节点数据库服务器没有冗余设计,无法满足高可用特性;	

就拿2018年的双十一说吧,天猫的订单量忒大:2018天猫双11的交易额快速攀升中, 2分05秒交易额突破100亿元,26分03秒2018天猫双11全球狂欢节成交额超500亿元。1小时16分37秒,2018天猫双11全球狂欢节成交额超912亿元。想想都可怕,这么多。
那么问题来了,就凭你一个单节点数据库就能处理好交易额这么多的背后的数据吗?
所以就需要用mysql集群方案来解决了。

常见的mysql集群方案

在这里插入图片描述

Percona XtraDB Cluster 特性
同步复制,事务要么在所有节点提交或不提交
节点自动配置
在从服务器上并行应用事件,真正意义上的并行复制
多主复制,可以在任意节点进行写操作
数据一致性,不再是异步复制
Percona XtraDB Cluster完全兼容MySQL和Percona Server
	PXC的优点:
	①:实现mysql数据库集群架构的高可用性和数据的 强一致性。

	②:完成了真正的多节点读写的集群方案。

	③:改善了传统意义上的主从复制延迟问题,基本上达到了实时同步。

	④:新加入的节点可以自动部署,无须提供手动备份,维护起来很方便。

	⑤:由于是多节点写入,所以数据库故障切换很容易。



	PXC的缺点:

	①:新加入的节点开销大,需要复制完整的数据。采用SST传输开销太大。

	②:任何更新事务都需要全局验证通过,才会在每个节点库上执行。集群性能受限于			性能最差的节点,也就是经常说的短板效应。

	③:因为需要保证数据的一致性,所以在多节点并发写时,锁冲突问题比较严重。

	④:存在写扩大问题,所有的节点上都会发生些操作。

	⑤:只支持innodb存储引擎的表。

	⑥:没有表级别的锁定,执行DDL语句操作会把整个集群锁住,而且也 kill 不了(建议		使用Osc操作,即在线DDL)

	⑦:所有的表必须含有主键,不然操作数据时会报错

我们先搭建pxc集群

1️⃣首先我们先拉取镜像

docker pull percona/percona-xtradb-cluster

2️⃣我们给镜像改个名字他太长了

docker tag percona/percona-xtradb-cluster pxc

3️⃣现在我们创建一个内部网络,这个网段外部是无法直接访问的,可以通过Docker开放的端口供外部访问。

docker network create --subnet=172.18.0.0/16 net1

现在我们可以查看一下网络信息

docker inspect net1

在这里插入图片描述

4️⃣创建容器pxc节点(这里咱创建一个5节点的pxc集群)
(1)首先你得创建数据卷(将来给用户挂载mysql数据)

docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5
docker volume create --name backup 					将来用于热备

(2)查看数据卷创建是否成功

docker inspect volume ls

(3)创建pxc容器

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
-d 后台启动-p 3306:3306 端口映射
-e MYSQL_ROOT_PASSWORD=root 指定数据库密码-e XTRABACKUP_PASSWORD=root 指定集群之间同步需要的密码
-e CLUSTER_NAME=PXC 指定集群名称-v v1:/var/lib/mysql 把刚刚创建的数据卷挂载到mysql中
–name=node1 指定容器名称–net=net1 指定网段

5️⃣然后客户端连接测试连接上node1创建一个数据库test然后再看其余节点有没有同步
在这里插入图片描述

现在测试联通,好我们在node1 中创建test数据库

在这里插入图片描述

然后我们在查看其余节点有没有同步(小伙成败在此一举)

在这里插入图片描述
OK,奈斯!!

基于docker搭建mysql的pxc集群+haproxy+keepalived的高可用(2️⃣)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值