PXC 模式,没有主从之分,每个数据库都可以进行读写,数据可以保持强一致性,执行时间较慢,由于
一般是强一致性,所以一般用于存储重要的信息,例如金融、电信、军工。至少需要三个实例,agent不能相互注册,只能注册到master
- PXC的优点
①实现mysql数据库集群架构的高可用性和数据的 强一致性
②完成了真正的多节点读写的集群方案。
③改善了传统意义上的主从复制延迟问题,基本上达到了实时同步。
④新加入的节点可以自动部署,无须提供手动备份,维护起来很方便。
⑤由于是多节点写入,所以数据库故障切换很容易。 - PXC的缺点
①新加入的节点开销大,需要复制完整的数据。采用SST传输开销太大。
②任何更新事务都需要全局验证通过,才会在每个节点库上执行。集群性能受限于性能最差的节点,
也就是经常说的短板效应。
③因为需要保证数据的一致性,所以在多节点并发写时,锁冲突问题比较严重。
④存在写扩大问题,所有的节点上都会发生些操作。
⑤只支持innodb存储引擎的表。
⑥没有表级别的锁定,执行DDL语句操作会把整个集群锁住,而且也 kill 不了(建议使用Osc操作,即
在线DDL)
⑦所有的表必须含有主键,不然操作数据时会报错。
一、下载pxc mysql docker 镜像
docker pull percona/percona-xtradb-cluster:5.7.30
二、创建单独网络
docker network create --subnet=172.18.0.0/24 pxc-net
三、准备三个数据卷。注意要给目录授权。开发环境777
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
四、创建第一个节点
docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=yang --privileged --name=node1 --net=pxc-net --ip 172.18.0.2 percona/percona-xtradb-cluster:5.7.30
五、等待节点一完全启动后,创建另外两个节点
#创建第二个节点
docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=yang -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=pxc-net --ip 172.18.0.3 percona/percona-xtradb-cluster:5.7.30
#创建第三个节点
docker run -d -p 3303:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=yang -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=pxc-net --ip 172.18.0.4 percona/percona-xtradb-cluster:5.7.30