Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法。PXC集群以节点组成(推荐至少3节点,也就是节点数是奇数),每个节点都是基于常规的MySQL/Percona Server,意味着你可以从集群中分离出某节点单独使用。集群中每个节点都包含完整的数据库数据。
pxc与其他的MySQL集群相比,优势明显,不像mha,mycat 这样的需要中间件来组织集群,部署以及后期维护难度比较大,并且是强一致高可用,也就是CAP。(是实时同步,不是异步同步哦)
吹了这么半天的PXC,无疑的,docker部署是最为快速的一个方式,下面介绍实验目的,实验环境,实验步骤,实验验证。
通过编写docker-compose 文件,实现一键启动PXC集群,在任意的集群节点上,操作数据库,比如新增数据库,在其余的节点上都可以立刻看到。
vm虚拟机内,编写compose文件,docker环境可正常使用了,docker的版本为19.03.9,docker-compose的版本为1.25.1,操作系统为centos7,防火墙和Selinux为关闭状态。
需要pull镜像 ,命令为:docker pull percona/percona-xtradb-cluster:5.7 。
编写文件一: vim pxc-master.yaml
version: '3'
services:
pxc1:
image: percona/percona-xtradb-cluster:5.7
restart: always
container_name: node1_master
privileged: true
ports:
- 13306:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc_cluster
volumes:
- /var/lib/mysql
networks:
default:
ipv4_address: 172.18.0.2
networks:
default:
external:
name: net1
编写文件二: vim pxc-follow.yaml
version: '3.3'
services:
pxc2:
image: percona/percona-xtradb-cluster:5.7
restart: always
container_name: node2
privileged: true
ports:
- 13307:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc_cluster
- CLUSTER_JOIN=172.18.0.2
volumes:
- /var/lib/mysql
networks:
default:
ipv4_address: 172.18.0.12
pxc3:
image: percona/percona-xtradb-cluster:5.7
restart: always
container_name: node3
privileged: true
ports:
- 13308:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc_cluster
- CLUSTER_JOIN=172.18.0.2
volumes:
- /var/lib/mysql
networks:
default:
ipv4_address: 172.18.0.13
pxc4:
image: percona/percona-xtradb-cluster:5.7
restart: always
container_name: node4
privileged: true
ports:
- 13309:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc_cluster
- CLUSTER_JOIN=172.18.0.2
volumes:
- /var/lib/mysql
networks:
default:
ipv4_address: 172.18.0.14
pxc5:
image: percona/percona-xtradb-cluster:5.7
restart: always
container_name: node5
privileged: true
ports:
- 13310:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- CLUSTER_NAME=pxc_cluster
- CLUSTER_JOIN=172.18.0.2
volumes:
- /var/lib/mysql
networks:
default:
ipv4_address: 172.18.0.15
networks:
default:
external:
name: net1
新建docker网络,上述文件使用的networks是需要手动建立的,命令如下:
docker network create --subnet 172.18.0.1/24 net1
启动主节点:
docker-compose -f ~/pxc-master.yaml up -d
#这里需要注意,主节点可能会比较慢才完全启动,因此等待1 2分钟再启动剩余节点。
启动集群剩余节点:
docker-compose -f ~/pxc-follow.yaml up -d