1. 说明
当我们使用MySQL
主从复制时候,你可能已经意识到数据同步并没有强一致性,是异步执行。那么这样就会可能出现数据的丢失以及查询数据的时候,从库还没有复制成功的情况😭。
正对这样的情况,我采用了PXC
集群,它具有强一致性、无同步延迟。
2. 创建文件目录结构
# 创建文件结构
cd /usr/local/docker
mkdir pxc
cd pxc
mkdir data master follower
# 创建数据卷
cd data
mkdir v1 v2 v3
# 设置权限
chmod 777 v1 v2 v3
3. 创建master节点
cd /usr/local/docker/pxc/master
vim docker-compose.yml
version: '3'
services:
pxc01:
restart: always
image: percona/percona-xtradb-cluster:5.7
container_name: pxc01
privileged: true
ports:
- 13306:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc
volumes:
- ../data/v1:/var/lib/mysql
networks:
default:
external:
name: mysql_network
4. 创建follower节点
cd /usr/local/docker/pxc/follower
vim docker-compose.yml
version: '3'
services:
pxc02:
restart: always
image: percona/percona-xtradb-cluster:5.7
container_name: pxc02
privileged: true
ports:
- 13307:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc
- CLUSTER_JOIN=pxc01
volumes:
- ../data/v2:/var/lib/mysql
pxc03:
restart: always
image: percona/percona-xtradb-cluster:5.7
container_name: pxc03
privileged: true
ports:
- 13308:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc
- CLUSTER_JOIN=pxc01
volumes:
- ../data/v3:/var/lib/mysql
networks:
default:
external:
name: mysql_network
5. 注意事项
- 一定要等到
master
节点起来,在进行启动follower
节点不然会出现各个节点之间不能相互注册。 PXC
节点不能太多,不然会把整体的性能下降。PXC
节点之间的服务器配置一致。PXC
集群只支持innoDB
引擎。PXC
内节点都会参与到读写操作。需要注意的是与Mycat
的schema.xml
配置中balance='2'
。
6. 相关图例
6.1 连接PXC节点
6.2 查看PXC集群是否相互注册成功
show status like 'wsrep_cluster%'