1. PXC简介
Percona XtraDB Cluster(下文简称PXC)是一个开源的MySQL高可用的解决方案,它集成了Percona服务器和Percona XtraBackup和Galera库共同运用的同步多主复制,也就是说PXC是基于Galere协议的高可用方案,Galera是Codership提供的多主数据同步复制机制,可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据一致性。基于Galera的高可用方案主要有MariaDB Galera Cluster和Percona XtraDB Cluster,目前PXC用的会比较多一些,
- PXC是由节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上;
- 每个节点都是普通的MySQL/Percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器;
- 每个节点都包含完整的数据副本;
- MariaDB的集群原理跟PXC一样,maridb-cluster其实就是PXC,两者原理是一样的。
2. PXC特性
- 同步复制,事务要么在节点中都提交要么不提交;
- 多主复制,可以在任意节点进行Write-Read操作;
- 在从服务器上并行应用事件,真正意义上的并行复制;
- 节点自动配置,数据一致性,不再是异步复制;
- PXC最大的优势:强一致性、无同步延迟
3. PXC优缺点
- 优点:
- 服务高可用;
- 数据同步复制(并发复制),几乎无延迟;
- 多个节点支持同时读写,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的库或者表,避免让galera解决数据冲突;
- 新节点可以自动部署,部署操作简单;
- 数据严格一致性,尤其适合电商类应用(订单,金额等敏感数据);
- 完全兼容MySQL。
- 缺点:
- 只支持InnoDB引擎;低版本(5.6.20)的复制只支持InnoDB引擎,其他存储引擎的更改不复制。然而,DDL(Data Definition Language) 语句在statement级别被复制,并且,对mysql.*表的更改会基于此被复制。例如CREATE USER…语句会被复制,但是 INSERT INTO mysql.user…语句则不会;
- PXC集群一致性控制机制,事有可能被终止,原因如下:集群允许在两个节点上同时执行操作同一行的两个事务,但是只有一个能执行成功,另一个会被终止,集群会给被终止的。客户端返回死锁错误(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK));
- 写入效率取决于节点中最弱的一台,因为PXC集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功;
- 所有表都需要有主键;
- 集群吞吐量/性能取决于短板;
- 新加入节点采用SST时代价高;
- 锁冲突、死锁问题相对更多。
4. PXC常识
-
端口号
3306:数据库对外服务的端口号;
4444:请求SST SST: 指数据一个镜像传输 xtrabackup , rsync ,mysqldump;
4567: 组成员之间进行沟通的一个端口号;
4568: 传输IST用的。相对于SST来说的一个增量。
-
名词介绍
WS:write set 写数据集
IST: Incremental State Transfer 增量同步
SST:State Snapshot Transfer 全量同步
-
状态机变化阶段
OPEN: 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群;
PRIMARY: 节点处于集群PC中,尝试从集群中选取donor进行数据同步;
JOINER: 节点处于等待接收/接收数据文件状态,数据传输完成后在本地加载数据;
JOINED: 节点完成数据同步工作,尝试保持和集群进度一致;
SYNCED:节点正常提供服务:数据的读写,集群数据的同步,新加入节点的sst请求;
DONOR(贡献数据者):节点处于为新节点准备或传输集群全量数据状态,对客户端不可用。
-
状态机变化因素
新节点加入集群;
节点故障恢复;
节点同步失败。
-
传输SST的方法
mysqldump、xtrabackup、rsync
-
配置文件各项配置意义
wsrep_provider:指定Galera库的路径wsrep_cluster_name:Galera集群的名称
wsrep_cluster_address:Galera集群中各节点地址。地址使用组通信协议gcomm://(group communication)
wsrep_node_name:本节点在Galera集群中的名称
wsrep_node_address:本节点在Galera集群中的通信地址
wsrep_sst_method:state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),xtrabackup则不需要(它使用percona自己提供的backup lock)。强烈建议采用xtrabackup
wsrep_sst_auth:在SST传输时需要用到的认证凭据,格式为:“用户:密码”
pxc_strict_mode:是否限制PXC启用正在试用阶段的功能,ENFORCING是默认值,表示不启用
binlog_format:二进制日志的格式。Galera只支持row格式的二进制日志
default_storage_engine:指定默认存储引擎。Galera的复制功能只支持InnoDB
innodb_autoinc_lock_mode:只能设置为2,设置为0或1时会无法正确处理死锁问题
5. PXC集群搭建
5.1 环境描述
本文档所涉及IP均为虚假IP。
Name | IP |
---|---|
master | 192.168.5.139 |
test1 |