MySQL Galera Clusters全解析 Part 1 Galera Cluster 简介
上节我们简单介绍了Galera Cluster,说到Galera Cluster 中各节点的事务同步是通过基于认证的复制进行的,这节详细说明下
基于认证的复制使用组通信(Group Communication) 和事务排序技术( transaction ordering techniques)来实现数据库的同步复制
我们并不能在所有MySQL数据库中部署Galera Cluster,他需要如下要求
Transactional Database
数据库必须支持事务,特指可以回滚未提交的变更
Atomic Changes
原子性,被复制的事务必须全部完成或全部不成功
Global Ordering
Galera Cluster中所有节点的事务必须被全局的排序,即以相同的顺序在所有节点执行
基于认证的复制的主要思想是,只要没有冲突,事务就会按正常执行,直到达到提交点。这称为乐观执行
首先当一个客户端在一个节点执行commit命令,在实际提交之前,将更改数据库的事务和变更的主键信息结合成写集(write-set),之后数据库将写集发送到其他节点
之后使用主键对写集进行一次确定性的认证测试(deterministic certification test),这个测试在每一个节点中执行,包括生成该写集的节点,该测试将决定节点是否可以应用写集
如果测试失败,则节点会丢弃该写集并回滚原始的事务,如果测试成功,则事务完成commit并且其他节点也会应用写集
上面我们说了基于认证的复制的原理,下面来说下其是如何在Galera中工作的
在Galera中基于认证的复制依赖于事务的全局排序(global ordering of transaction)
Galera给集群中每个事务分配一个全局的顺序数,也叫做seqno,类似于Oracle的序列,自增的
当一个事务开始提交,节点会将该事务的seqno和上次成功的事务的seqno做比较
这两个seqno之间的所有事务会进行主键冲突检测,如果有冲突则认证失败
这个过程是确定的而且所有事务按照相同的顺序接收,所有节点达到一致时,原始节点会通知客户端程序该事务是否被提交成功
https://galeracluster.com/library/documentation/certification-based-replication.html
觉得文章不错的欢迎转发,收藏~