主要内容:
PXC概述、部署PXC(自动故障恢复测试)、存储引擎、读锁/写锁、表锁/行锁、常用的存储引擎介绍
一、PXC概述
PXC(Percona XtraDB Cluster,简称PXC集群),是基于Galera的MySQL高可用集群解决方案,提供了多主复制、自动故障转移和数据一致性等特性。Galera Cluster是Codership公司开发的一套免费开源的高可用方案(MySQL发行版),PXC集群主要由两部分组成:Percona Server with XtraDB 和 Write Set Replication patches(使用了Galera library,一个通用的用于事务型应用的同步、多主复制插件);可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据一致性;PXC与mariadb的集群maridb-cluster原理是一样的。
官网地址:Galera Cluster for MySQL | The world's most advanced open-source database cluster.
1、PXC主要特性
1)多主复制:
- PXC支持多主复制,这意味着每个节点都可以同时读写,没有单点故障。
- 所有节点都是对等的,任何节点都可以接受写操作。
2)数据一致性:
- PXC使用Galera Cluster的同步复制技术,确保所有节点上的数据一致性。
- 事务在所有节点上同时提交,避免了数据不一致的问题。
3)自动故障转移:
- 当某个节点发生故障时,其他节点会自动接管,确保服务的连续性。
- 无需手动干预,系统会自动检测并处理故障。
4)高可用性:
- PXC通过多节点部署和自动故障转移,提供了高可用性。
- 即使某个节点发生故障,集群仍然可以正常运行。
5)扩展性:
- PXC支持水平扩展,可以通过增加节点来提高集群的处理能力。
- 每个节点都可以处理读写请求,提高了系统的整体性能。
6)低延迟复制:
- PXC的复制是同步的,确保了低延迟的数据复制。
- 数据在所有节点上几乎同时更新,避免了数据延迟的问题。
2、PXC架构
基于Galera Cluster,主要由以下组件组成:
节点(Node):
每个节点都是一个独立的MySQL实例,运行在不同的服务器上。节点之间通过Galera复制协议进行通信,确保数据一致性。
Galera复制插件:
Galera复制插件是PXC的核心组件,负责管理节点之间的数据复制。它确保所有节点上的数据一致性,并处理故障转移和节点加入/退出等操作。
wsrep API:
wsrep API是Galera Cluster的接口,用于与MySQL集成。它提供了事务处理、数据复制和节点管理等功能。
3、端口介绍
① 3306:数据库对外服务的端口号
说明:这是MySQL的标准端口,用于客户端连接到数据库服务器。PXC节点通过这个端口提供数据库服务,客户端可以通过这个端口进行读写操作。
② 4444:SST端口(State Snapshot Transfer)
说明:SST用于全量同步,当一个新的节点加入集群时,它需要从现有节点获取完整的数据副本。PXC支持多种SST方法,如xtrabackup、rsync和mysqldump。4444端口用于请求和传输这些全量数据。
③ 4567:集群通信端口
说明:SST用于全量同步,当一个新的节点加入集群时,它需要从现有节点获取完整的数据副本。PXC支持多种SST方法,如xtrabackup、rsync和mysqldump。4444端口用于请求和传输这些全量数据。
④ 4568:IST端口(Incremental State Transfer)
说明:IST用于增量同步,相对于SST来说,IST只传输自上次同步以来的增量数据。当一个节点加入集群时,如果已经有部分数据,可以通过IST端口获取增量数据,而不是全量数据。
4、名词介绍
SST(State Snapshot Transfer):
- 全量同步:当一个新的节点加入集群时,它需要从现有节点获取完整的数据副本。SST通过4444端口进行全量数据的传输。
IST(Incremental State Transfer):
- 增量同步:相对于SST来说,IST只传输自上次同步以来的增量数据。当一个节点加入集群时,如果已经有部分数据,可以通过IST端口获取增量数据,而不是全量数据。
WS(write set):
- 写数据集:在PXC中,每个写操作(事务)都会生成一个写数据集(write set),这个写数据集包含了所有需要更新的数据和元数据。写数据集通过4567端口在节点之间进行复制,确保数据一致性。
部署PXC示例:
网络实验拓扑:
- 服务器角色:mysql1、mysql2、mysql3(三台相互独立的mysql服务器)
- Mysql1:IP为192.168.2.11、安装Percona-XtraDB-Cluster
- Mysql2:IP为192.168.2.12、安装Percona-XtraDB-Cluster
- Mysql3:IP为192.168.2.13、安装Percona-XtraDB-Cluster
提示:提前关闭防火墙和SELinux
步骤1:初始化环境准备(主机名解析、安装软件包)
① 配置服务器的名称解析
[root@mysql1 ~]# for i in {1..3}
> do
> echo -e "192.168.2.1$i\tmysql$i" >> /etc/hosts
> done
[root@mysql1 ~]# cat /etc/hosts
192.168.2.11 mysql1
192.168.2.12 mysql2
192.168.2.13 mysql3
[root@mysql2 ~]# for i in {1..3}
> do
> echo -e "192.168.2.1$i\tmysql$i" >> /etc/hosts
> done
[root@mysql1 ~]# cat /etc/hosts
192.168.2.11 mysql1
192.168.2.12 mysql2
192.168.2.13 mysql3
[root@mysql3 ~]# for i in {1..3}
> do
> echo -e "192.168.2.1$i\tmysql$i" >> /etc/hosts
> done
[root@mysql1 ~]# cat /etc/hosts
192.168.2.11 mysql1
192.168.2.12 mysql2
192.168.2.13 mysql3
② 准备yum源(参考:/linux-soft/4/pxc/Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar)
[root@localhost ~]# cd pxc/
[root@ localhost pxc]# tar -xf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar
[root@ localhost pxc]# ls
[root@ localhost pxc]# cp *.rpm /var/www/html/mysql/ //复制解压的RPM包到/var/www/html/mysql/
[root@ localhost pxc]# cd /var/www/html/mysql/
[root@ localhost mysql]# createrepo -v .
[root@localhost ~]# scp /etc/yum.repos.d/mysql.repo root@192.168.2.11:/etc/yum.repos.d/
[root@localhost ~]# scp /etc/yum.repos.d/mysql.repo root@192.168.2.12:/etc/yum.repos.d/
[root@localhost ~]# scp /etc/yum.repos.d/mysql.repo root@192.168.2.13:/etc/yum.repos.d/
③