MySQL高可用方案之PXC(Percona XtraDB Cluster)
MySQL高可用方案之PXC(Percona XtraDB Cluster)
- 1、PXC(Percona XtraDB Cluster)是什么?
- 1.1、PXC优缺点(对比mysql主从集群)
- 1.2、PXC注意点
- 2、docker安装PXC高可用
- 2.1 安装环境准备
- 2.2 初始化第一个pxc节点
- 2.3 初始化第二(多)个pxc节点
- 2.4 pxc集群安装注意
1、PXC(Percona XtraDB Cluster)是什么?
PXC(Percona XtraDB Cluster)是一个开源的MySQL高可用解决方案,它将Percona server和XtraBackup与galera库集成,实现mysql的高可用,并且完全兼容mysql。。。
说白了,pxc就是一个代码mysql主从集群的产品。
1.1、PXC优缺点(对比mysql主从集群)
1)PXC通过Galera Cluster技术实现数据的同步复制,确保事务在所有节点上要么全部提交,要么全部不提交,从而保证了数据的一致性。而MySQL主从复制是异步的,存在数据延迟的风险。
2)PXC支持多主模式和自动故障转移功能,能够在节点故障时快速进行故障切换,确保服务的连续性。MySQL主从复制虽然可以通过设置从库为只读模式来分担读负载,但在主库故障时需要手动切换,恢复时间较长。
3)PXC支持真正的多节点读写,可以在任意节点上进行写操作,提高了写操作的扩展性。MySQL主从复制虽然可以实现读写分离,但在写操作上存在单点瓶颈,且写操作只能在主库进行。
4)PXC基本上可以实现实时同步,减少了数据复制的延迟。而MySQL主从复制存在复制延迟,尤其是在高负载情况下。
5)PXC支持新节点的自动部署,无需手动备份数据,简化了集群的扩展和维护。MySQL主从复制在新节点加入时需要手动同步数据,操作较为复杂。
6)PXC由于其高一致性和实时同步的特点,特别适合对数据一致性要求高的场景,如电商应用。而MySQL主从复制适用于需要数据备份、负载均衡和读写分离的场景。
1.2、PXC注意点
1)加入新节点,开销大。需要复制完整的数据。
2)写操作会在所有节点之间同步,可能会有性能损失。
3)所有表都要有主键。
4)只支持innodb存储引擎。
5) pxc最少要安装三个节点,才能访问。。。
6)如果集群中有一半的机器挂了,整个集群就挂了,比如此次配置连接了3个节点,如果关闭2个,这个集群就挂了,必须同时在线一半以上。建议集群个数为基数个。
2、docker安装PXC高可用
注意pxc中端口作用:
3306: mysql 端口
4567: PXC 集群相互通讯的端口
4444: 用于 SST(State Snapshot Transfer): 全量传输
4568: 用于 IST(Incremental state Transfer):增量传输传送
2.1 安装环境准备
安装环境准备需要在所有节点执行。
1、关闭selinux
2、关闭防火墙
3、安装docker
这三步可以参考我在安装k8s的环境准备,都有做过。
拉取PXC镜像,并修改镜像名字为pxc
docker pull percona/percona-xtradb-cluster:8.0.36
docker tag percona/percona-xtradb-cluster:8.0.36 pxc
创建docker网络
docker network create --subnet=172.18.0.0/16 pxc-net
创建docker数据卷
docker volume create mysql-data
docker volume create mysql-conf
docker inspect mysql-data
docker inspect mysql-conf
2.2 初始化第一个pxc节点
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -v mysql-data:/var/lib/mysql -v mysql-conf:/etc/mysql --privileged --name=node1 --net=pxc-net pxc
参数解读:
-v mysql-data:/var/lib/mysql 挂载mysql数据卷
-v mysql-conf:/etc/mysql 挂载mysql配置卷
-e CLUSTER_NAME=PXC 创建的集群名字
-e MYSQL_ROOT_PASSWORD=root mysql的root用户的密码
-e EXTRABACKUP_PASSWROD=root PXC 集群之间数据同步的密码
--privileged 创建的容器有读写的权限
--name=node1 创建的容器名称
--net=pxc-net docker网络
2.3 初始化第二(多)个pxc节点
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=第一个pxc节点IP地址 -v mysql-data:/var/lib/mysql -v mysql-conf:/etc/mysql --privileged --name=node2 --net=pxc-net pxc
参数解读:
CLUSTER_JOIN 表示加入第一个节点
2.4 pxc集群安装注意
1、pxc最少要安装三个节点,才能访问。。。
2、无论初始化第几个节点,CLUSTER_JOIN 都写第一个节点的IP。。。
3、如果集群中有一半的机器挂了,整个集群就挂了,比如此次配置连接了3个节点,如果关闭2个,这个集群就挂了,必须同时在线一半以上。建议集群个数为基数个。