持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
PXC简介
PXC是Percona XtraDB Cluster的缩写,是一个主流的MySQL高可用分布式集群方案,在生产上有很多应用。
它是基于codership公司开发的Galera library提供的write set replication (wsrep) API实现,wsrep以插件的形式加入程序中,供存储引擎层调用。
PXC的特点包括:
- 虚拟同步复制,多节点的数据强一致性
- 支持多主写,多节点无延迟读
- 完全兼容MySQL和Percona Server 等等。
理解PXC的两个最重要的工作原理
1. 基于认证的写集复制(Certification-Based Replication)
一个数据库事务会被galera插件包装成一个写集(write-set),写集包括keys和data两部分,keys由事务修改的所有表记录的database+table+rowid组成,data是事务的binlog集。
写集认证是为了解决多个pxc节点同时写入一行数据可能的冲突问题,写集复制将写集同步到其他节点
一个数据库客户端连接PXC某个节点,并发起一个数据库事务,事务先按照Mysql原生节点流程处理,在提交(commit)阶段进行写集认证和复制,认证通过,则该节点返回客户端提交成功(commit ok),其他节点则该写集加入队列并应用(apply)。
以下是两种写集冲突处理的情况解析,有助于加深理解写集认证流程:
- 认证通过的事务杀死尚未提交的事务,wsrep status wsrep_local_bf_aborts计数增加
MySQL [(none)]> show status like 'wsrep_local_bf_aborts';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| wsrep_local_bf_aborts | 6 |
+-----------------------+-------+
- 事务提交后,写集认证时发现冲突,认证失败,wsrep status wsrep_local_cert_failures计数增加
MySQL [(none)]> show status like 'wsrep_local_cert_failures';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| wsrep_local_cert_failures | 11 |
+---------------------------+-------+
两种情况,jdbc应用日志一般都是打印"WSREP detected deadlock/conflict and aborted the transaction"错误。
下篇讲述PXC的高可用机制及使用注意事项。
备注:本文档主要参考percona和galera官网,转载请注明出处。