前期回顾

上节我们简单介绍了Galera Cluster,说到Galera Cluster 中各节点的事务同步是通过基于认证的复制进行的,这节详细说明下

基于认证的复制使用组通信(Group Communication) 和事务排序技术( transaction ordering techniques)来实现数据库的同步复制

1. 基于认证复制的要求

我们并不能在所有MySQL数据库中部署Galera Cluster,他需要如下要求

Transactional Database

数据库必须支持事务,特指可以回滚未提交的变更

Atomic Changes

原子性,被复制的事务必须全部完成或全部不成功

Global Ordering

Galera Cluster中所有节点的事务必须被全局的排序,即以相同的顺序在所有节点执行

2. 基于认证复制工作流程

基于认证的复制的主要思想是,只要没有冲突,事务就会按正常执行,直到达到提交点。这称为乐观执行

1_2.png

首先当一个客户端在一个节点执行commit命令,在实际提交之前,将更改数据库的事务和变更的主键信息结合成写集(write-set),之后数据库将写集发送到其他节点

之后使用主键对写集进行一次确定性的认证测试(deterministic certification test),这个测试在每一个节点中执行,包括生成该写集的节点,该测试将决定节点是否可以y应用写集

如果测试失败,则节点会丢弃该写集并回滚原始的事务,如果测试成功,则事务完成commit并且其他节点也会应用写集

3. 基于认证的复制在Galera中的应用

上面我们说了基于认证的复制的原理,下面来说下其是如何在Galera中工作的

在Galera中基于认证的复制依赖于事务的全局排序(global ordering of transaction)

Galera给集群中每个事务分配一个全局的顺序数,也叫做seqno,类似于Oracle的序列,自增的

当一个事务开始提交,节点会将该事务的seqno和上次成功的事务的seqno做比较

这两个seqno之间的所有事务会进行主键冲突检测,如果有冲突则认证失败

这个过程是确定的而且所有事务按照相同的顺序接收,所有节点达到一致时,原始节点会通知客户端程序该事务是否被提交成功

4. 参考资料

https://galeracluster.com/library/documentation/certification-based-replication.html

上一章

下一章