一、MySQL集群方案
1、常见MySQL集群方案
1.1、Replication
特点:
- 速度快
- 弱一致性
适用于低价值
数据:
1.2、PXC
特点:
- 速度慢
- 强一致性
适用于高价值
数据:
1.2.1、PXC原理
全称(Percona XtraDB Cluster)
任何数据库节点都是可读可写的
建议PXC使用PerconaServer(MySQL改进版,性能提升很大)
1.2.2、PXC方案与Replication方案的对比
1.2.3、PSC的数据强一致性
PSC同步复制,失误再所有集群节点要么同时提交,要么不提交
Replication采用异步复制,无法保证数据的一致性
二、搭建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
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
第二个节点及以后的节点
需要更改的配置:
必须主节点能连接上,再去创建其他节点
- 因为主节点创建之后,它需要初始化PXC集群环境,生成各种配置文件,所以消耗的时间比较长,你等待一分钟左右的时间,然后用客户端连接主节点,如果能连接上,说明主节点已经创建成功。这时候再去创建其他PXC节点。
- 如果你刚创建完主节点,就去创建其他节点。因为主节点还不能正常访问,其他从节点连接不上主节点,无法加入PXC集群,所以你创建的所有从节点都处在闪退的状态。正确的做法是每创建一个节点,能用客户端访问了,再去创建下一个节点。