Galera Cluster是基于MySQL/innodb二次开发而成的一个支持"多主同步"的数据库主从集群,Proton RDS MariaDB采用了MariaDB Galera Cluster同步技术。下面给大家带来MariaDB集群模式的详细介绍。
一、技术优势
一、同步复制,节点间数据是同步的,而Master/Slave模式是异步的,因此具有较高的性能和可靠性;
二、multi-master,集群中每个节点都可读可写;
三、自动的节点成员控制,自动剔除故障节点;
四、 新节点加入数据自动复制;
五、 真正的并行复制,基于行级;
六、用户可以直接连接集群,使用感受上与MySQL完全一致。
Galera replication具有实时性,能够保障不同节点的数据视图在较小的时间范围内是一致的。MySQL原生replication方案slave中的SQL线程和IO线程是分离的,即便使用半同步甚至同步复制,也可能因为SQL线程的速度跟不上IO线程而导致slave数据落后很多,当然5.7引入并行复制后会好很多,而Galera中除了具有并行复制的功能外,还具有flow control的功能来控制节点间数据同步的速度。
二、内部逻辑

etcd容器:存储数据库seqno信息。数据库启动时需要决定引导节点,通过向etcd注册seqno值,选取最大的节点作为引导节点启动;
DB容器:数据库容器。数据库与数据库之间组成Galera集群实现数据同步;
MGMT容器:API容器,对外提供数据库/数据库账户管理功能;
exporter容器:数据库监控数据获取http服务,供Proton Watch组件采集metrics数据。
三、复制架构
数据同步使用同步复制(Eager Replication),集群中的节点经过更新单个事务来与集群中的节点进行同步,这意味着当事务进行提交时,全部节点都具备相同的值。
主要有如下几个组件组成:
DBMS:Database Management System,即咱们常见的数据库,Galera Cluster支持MySQL、MariaDB和Percona XtraDB。
wsrep API:写集复制功能组件,负责提供关系型数据库管理、复制服务,提供接口。
Galera Replication Plugin:启用写集复制功能的插件。
Group Communication plugins:Galera Clsuter集群中各类群组通讯系统,例如gcomm和Spread。
四、复制原理
Galera集群的复制功能是基于认证的复制,其流程如下:

Process过程:本地节点收到客户端请求后执行请求,提交事务前所有对数据库的更改都会被写集收集起来,并且将写集发送到其它节点;
Certification过程:写集将在每个节点上使用搜索到的主键进行确认性认证测试,测试结果决定着节点是否应用写集更改数据。如果认证测试失败,节点将丢弃写集 ;如果认证测试成功,则事务提交。

当客户端发出commit命令时,在实际提交之前,对数据库所做的更改都将被收集到一个写集中,写集中包含事务信息和所更改行的主键。然后,数据库将此写集发送到所有其它节点。节点用写集中的主键与当前节点中未完成事务的所有写集(不仅包括当前节点其它事务产生的写集,还包括其它节点传送过来的写集)的主键相比较,确定节点是否可以提交事务。同时满足以下三个条件则验证失败(存在冲突):
- 两个事务来源于不同节点。
- 两个事务包含相同的主键。
- 老事务对新事务不可见,即老事务未提交完成。新老事务的划定依赖于全局事务总序,即GTID。
验证失败后,节点将删除写集,集群将回滚原始事务。对于所有的节点都是如此,每个节点单独进行验证。因为所有节点都以相同的顺序接收事务,它们对事务的结果都会做出相同的决定,要么全成功,要么都失败。成功后自然就提交了,所有的节点又会重新达到数据一致的状态。节点之间不交换“是否冲突”的信息,各个节点独立异步处理事务。由此可见,Galera本身的数据也不是严格同步的,很明显在每个节点上的验证是异步的。最后,启动事务的节点可以通知客户端应用程序是否提交了事务。
五、数据复制方式
将集群中的数据复制到某个节点上实现备份,或者节点新加入集群须要同步数据。
Galera Cluster有两种数据复制方式:
- State Snapshot Transfers (SST):全量同步
- Incremental State Transfers (IST):增量同步
简单来说。SST就是同步整个数据库,IST是同步一个库与另外一个库相差的部分事务。

新加入的节点叫做Joiner,给Joiner提供复制的节点叫Donor。在该过程中首先会检查本地grastate.dat文件的seqno事务号是否在远端donor节点galera.cache文件里,如果存在,那么进行增量同步复制,将剩余的事务发送过去;如果不存在那么进行全量同步复制。
六、原理对比
最后,将Galera复制的原理与实现与MySQL组复制进行类比,如下表所示:
