MySQL集群

发布时间 2023-12-19 10:21:40作者: 梅丹隆

一、MySQL集群方案

1、常见MySQL集群方案

1.1、Replication

特点

  • 速度快
  • 弱一致性

适用于低价值数据:

  • 日志
  • 新闻
  • 帖子

1.2、PXC

特点

  • 速度慢
  • 强一致性

适用于高价值数据:

  • 订单
  • 账户
  • 财务

1.2.1、PXC原理

全称(Percona XtraDB Cluster)
image.png
任何数据库节点都是可读可写的
建议PXC使用PerconaServer(MySQL改进版,性能提升很大)

1.2.2、PXC方案与Replication方案的对比

image.png
image.png

1.2.3、PSC的数据强一致性

PSC同步复制,失误再所有集群节点要么同时提交,要么不提交
image.png
Replication采用异步复制,无法保证数据的一致性
image.png

二、搭建PXC集群

1、拉取镜像

# 拉取镜像
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

# 本地安装
docker load < /home/soft/pxc.tar.gz

2、创建内部网段

出于安全考虑,需要给PXC集群实例创建Docker内部网络

# 创建网段
docker network create net1

# 规定具体网段,子网掩码24位
docker network create --subnet=172.18.0.0/24 net1

# 查看网段信息
docker network inspect net1

# 删除网段
docker network rm net1

3、创建Docker卷

将数据映射到宿主机的目录上
容器中的PXC节点映射数据目录的解决办法

# 创建数据卷
docker volume create --name v1

# 查看卷信息
docker (volume) inspect v1

# 删除卷
docker volume rm v1

image.png

4、创建PXC容器

docker run -d -p 3306:3306 \
-v v1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=adc123456 \
-e CLUSTER_NAME=PXC \
# 数据库节点同步密码
-e XTRABACKUP_PASSWORD=abc123456 \
# -e CLUSTER_JOIN=node1
# 最高权限
--privileged \
--name node1 \
--net net1 \
--ip 172.18.0.2 \
pxc

第二个节点及以后的节点需要更改的配置:

  1. 端口号
  2. 集群加入节点
  3. 名称
  4. IP

必须主节点能连接上,再去创建其他节点

  • 因为主节点创建之后,它需要初始化PXC集群环境,生成各种配置文件,所以消耗的时间比较长,你等待一分钟左右的时间,然后用客户端连接主节点,如果能连接上,说明主节点已经创建成功。这时候再去创建其他PXC节点。
  • 如果你刚创建完主节点,就去创建其他节点。因为主节点还不能正常访问,其他从节点连接不上主节点,无法加入PXC集群,所以你创建的所有从节点都处在闪退的状态。正确的做法是每创建一个节点,能用客户端访问了,再去创建下一个节点。

三、数据库负载均衡