PXC技术要点解析(1/2)

797 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

PXC简介

PXC是Percona XtraDB Cluster的缩写,是一个主流的MySQL高可用分布式集群方案,在生产上有很多应用。

它是基于codership公司开发的Galera library提供的write set replication (wsrep) API实现,wsrep以插件的形式加入程序中,供存储引擎层调用。

PXC的特点包括:

  1. 虚拟同步复制,多节点的数据强一致性
  2. 支持多主写,多节点无延迟读
  3. 完全兼容MySQL和Percona Server 等等。

image.png

理解PXC的两个最重要的工作原理

1. 基于认证的写集复制(Certification-Based Replication)

一个数据库事务会被galera插件包装成一个写集(write-set),写集包括keys和data两部分,keys由事务修改的所有表记录的database+table+rowid组成,data是事务的binlog集。

写集认证是为了解决多个pxc节点同时写入一行数据可能的冲突问题,写集复制将写集同步到其他节点

一个数据库客户端连接PXC某个节点,并发起一个数据库事务,事务先按照Mysql原生节点流程处理,在提交(commit)阶段进行写集认证和复制,认证通过,则该节点返回客户端提交成功(commit ok),其他节点则该写集加入队列并应用(apply)。

image.png

以下是两种写集冲突处理的情况解析,有助于加深理解写集认证流程:

  1. 认证通过的事务杀死尚未提交的事务,wsrep status wsrep_local_bf_aborts计数增加 image.png
MySQL [(none)]> show status like 'wsrep_local_bf_aborts';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| wsrep_local_bf_aborts | 6     |
+-----------------------+-------+
  1. 事务提交后,写集认证时发现冲突,认证失败,wsrep status wsrep_local_cert_failures计数增加 image.png
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官网,转载请注明出处。