galera集群初探

最近公司要求做galera的调研,研究后做了点总结,记录之:

主节点与备主节点间使用Galera进行同步复制。GaleraMySQL innodb引擎的同步复制技术。它以插件的形式与innodb引擎直接交互。它确保集群中任何一个提交成功的事务都已经应用到了集群中所有的节点。

为了确保复制的同步,Galera使用基于Group communication”Certification based replication”

galera集群初探


如上图所示,一个事务的处理流程如下:

  • 首先在本地执行

  • 当要提交时Galera会将该事务的变更打包成一个或若干个writeset,并将变更广播到全Group节点。

  • 每个节点获取该事务一个全局唯一且排序的事务ID trx ID

  • 每个节点根据trx ID writeset 对该事务进行certification

  • 如果都认证通过了就在每个节点提交这个事务

  • 否则rollback或丢弃这个事务

 

Certification的过程是基于事务的trx Id和相应的writeset进行的。每一个事务都有一个全局排序的事务ID,所以Galera集群中的事务天然有序。假设该事务开始前已提交的最后一个事务IDlast ID,那么last IDtrx Id之间的已提交的事务就是有可能与当前事务冲突的事务。每个事务的WriteSet中包含了该事务修改的行以及对于的主键列表。Certification的过程就是比较当前事务writeset中的主键列表与可能冲突的已提交事务的主键列表,如果有冲突,那么就认证失败。

为了提高复制性能Galera使用writeset来封装事务变更,进行批量处理。一个单节点的Galera集群大约比MySQL单机降低不到10%的性能,2节点的Galera集群大约比MySQL单机降低约15%的性能,3个点的Galera集群大约比MySQL单机降低约30%的性能。

Galera中联通的所有节点构成一个节点组,每个节点组都有一个状态编号state id,该编号在节点组内个节点一致,该id会随在节点组数据状态的变更(数据修改)而递增。正常工作的集群只有一个节点组。

当集群中的某个节点脱离集群(节点故障或网络断开),那它就成了一个独立的节点组,Galera会自动判定该节点组的节点数较少,停止该节点组的对外服务以确保数据的一致性。

当故障节点加入集群或新节点加入集群时,Galera会比较加入节点的state id与集群节点组的state id。如果不一致,Galera会选定一个集群节点组中的节点向新加入集群的节点进行数据同步。同步过程中新加入的节点无法对外提供服务,直到同步完成。

数据同步过程中新加入节点故障或提供数据同步的节点故障都不影响数据一致性。同步过程中新加入节点的state id随数据同步而更新,如果同步中断,下一次同步时会接着上一次同步到的state id继续同步。


转载请注明转自高孝鑫的博客

你可能感兴趣的:(工作学习)