Percona XtraDB Cluster(PXC):Percona XtraDB Server +WSREP API(write set replication patches) + Galera(galera library)
转自:http://blog.chinaunix.net/uid-25206403-id-3912291.html
同类基于验证复制的集群结构:
codership 开源产品:Galera Cluster for MySQL
mariadb 基于galera集群:maria galera cluster
pxc是基于验证的数据强一致性数据复制的mysql集群,特性分析:
优点:
1.高可用性,节点不可用不影响集群正常运行。
2.强一致性,可以将读扩展到多个节点上。
3. 节点的增加数据同步自动化(IST,SST)。
4. 可实现多点读写,但写压力仍要同步到所有节点。
缺点:
1.由于ddl需全局验证通过,则集群性能由集群中最差性能节点决定。
2.为保证一致性,galera 总是优先保证数据一致性,在多点并发写时,锁冲突问题严重
3.新节点加入或延后较大的节点重新加入需全量拷贝数据(sst),作为donor的节点在同步过程中无法提供读写
4.数据冗余度为节点数
名词:
WS:write set 写数据集
IST: Incremental State Transfer 增量同步
SST:State Snapshot Transfer 全量同步
UUID:节点状态改变及顺序的唯一标识。
GTID:Global Transaction ID ,由UUID和偏移量组成。wsrep api 中定义的集群内全局事务id。
PXC工作原理:
节点接收sql 请求后,对于ddl 操作,在commit之前,由wsrep API 调用galera 库进行集群内广播,所有其他节点验证成功后事务在集群所有节点进行提交,反之roll back。pxc 保证整个集群所有数据的强一致性,满足CAP理论中满足:Consistency 和 Availability。
WSREP API:
在DBMS和wsrep provider 之间提供接口。
GTID:Global Transaction ID. 由UUID 和 sequence number组成,用于标示集群中发生状态改变的唯一标示以及队列中的偏移量。
Galera wsrep provider:
- 完成事务在集群内的广播:本地事务发送给其他节点验证,接收其他节点事件本地验证并返回结果
- 应用从其他节点接收并全局验证通过的事件到本地。
- 集群内通信,节点存活的检测,pc的选举等
- 脑裂,为避免节点失效导致pc选举失败整个集群不可用,建议节点数至少为3
- 多点写入时的锁冲突检测机制
- 等待队列中事务的并发提交
复制模块:
galera的group communication 层实现统一全局数据同步策略和集群内所有事务的排序,便于生成GTID。
对于每一个节点有2方面工作:
- 完成数据同步。
- 完成与其他节点的通信。
galera 的replication 层完成数据同步,由slave queue 和applier 组成,在事务的同步过程中,事务在队列中以及应用线程中时于节点本地产生锁冲突处理方式。replication 模块的效率直接影响整个集群的写入性能。
同步过程中,本地事务和等待队列中的锁冲突:
innodb内部使用悲观锁,保证事务的成功进行和提交。pxc中使用乐观锁,以避免在每个节点获取锁以及网路开销,在写入节点上,事务在提交之前与单点的innodb一样,到达提交点时,向集群其他节点广播(galera 库完成 并发)事物并等待各节点验证结果,如果所有节点都返回成功,则提交,反之,回滚。
pxc 中先提交的事物成功,其他事务(本地或其他节点同步)将回滚或报死锁错误。
相关状态值:
- wsrep_local_cert_failures 同步过程中节点认证失败计数,冲突来自本地提交的事务和同步队列中事务存在锁冲突,则本地验证失败(保证全局数据一致性)
- wsrep_local_bf_aborts 强制放弃,本地事务和同步队列中正在执行的事务存在锁冲突时,将强制保证先提交的事务成功,后者回滚活报错
验证模块:
验证过程中,节点在接收到其他节点writeset后,在本地做冲突验证并返回验证结果
节点状态机:
Regular Transitions:
状态机变化阶段:
1.OPEN: 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群
2.PRIMARY: 节点处于集群PC中,尝试从集群中选取donor进行数据同步
3.JOINER: 节点处于等待接收/接收数据文件状态,数据传输完成后在本地加载数据
4.JOINED: 节点完成数据同步工作,尝试保持和集群进度一致
5.SYNCED:节点正常提供服务:数据的读写,集群数据的同步,新加入节点的sst请求
6.DONOR:节点处于为新节点准备或传输集群全量数据状态,对客户端不可用。
状态机变化因素:
1.新节点加入集群
2.节点故障恢复
3.节点同步实效