## 前期回顾

这期的专题我们来介绍MySQL Galera Clusters 相关的内容


上个专题我们说了MySQL组复制相关的内容,这节我们说MySQL Galera Clusters ,这个和MGR在某些方面类似,都是实现MySQL高可用的

建议大家在看之前先了解下MGR

[http://www.zhaibibei.cn/mysql/mgr/](http://www.zhaibibei.cn/mysql/mgr/)


这节内容先简单介绍下Galera Cluster


## 1. Galera Cluster介绍

Galera Cluster是一个用于innodb的同步多主复制插件,它不同于传统的MySQL复制,同时也解决了很多多主写入时的冲突问题,用户不需要知道其在哪台服务器上写入以及在哪台服务器上读取


一个应用程序可以在集群中的每个节点写入,事务(基于行的)在一个节点提交也会同步复制到其他节点,通过基于认证(certification-based)的复制来实现实时同步


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

一个Galera集群至少需要3个节点,同时推荐采用奇数个几点,原因为集群内需要大多数节点达到一致,参考MGR的相关内容


## 2. Galera Cluster 类型

Galera Cluster插件是一个开源的,由Codership公司开发的标准MySQL数据库补丁 

它有三个分支

- MySQL Galera Cluster by Codership
- Percona XtraDB Cluster by Percona
- MariaDB Galera Cluster (5.5 and 10.0) by MariaDB

从MariaDB Server 10.1开始 Galera已经集成在标准的数据库软件中了,不需要单独的下载


## 3. Galera和普通复制的区别


[image:745 size:orig]



### 3.1 MySQL复制实现


普通MySQL每个主从连接使用3个线程来进行复制,一个在master上,两个位于slave上

**Binlog dump thread**

当从库连接主库时主库会建立该线程来发送二进制文件到从库,我们可以在主库上通过show 
PROCESSLIST命令看到该线程


**Slave IO thread**

从库创建该线程来连接主库要求主库发送二进制文件,然后写入到从库的relay log中


**Slave SQL thread**

从库创建该线程来读取Slave IO thread 写入的relay log,然后在从从库中执行他们

MySQL复制是标准MySQL的一部分,原生是异步的,我们可以通过半同步来实现实时同步功能

MySQL复制也可以实现多主复制,不过期维护非常复杂并且容易出错,并不推荐



### 3.2 Galera Cluster实现


Galera Cluster 通过四个组件来实现

**Database Management System**

这就是在各个节点的数据库服务了,支持MySQL Server, Percona Server for MySQL and MariaDB Server

**wsrep API**

该接口是一个复制的提供者,他为写集复制提供与数据库服务器引擎的集成。

wsrep全称为WriteSet Replication

Galera中事务通过一些处理变为writesets后发送到各个节点,这个在后面章节做介绍​

**Galera Plugin**

该插件使得写集复制可以正常工作

**Group Communication plugins**

提供Galera Cluste可用的各种组通信系统



数据库厂商需要将WriteSet Replication (wsrep) API 补丁集成到数据库产品中,这将允许Galera plugin作为wsrep  API 的提供者,允许其通过group communication协议来和事务进行通信并且复制事务至其他节点

这些使得innoDB可以做到同步的多主复制,事务会同步的提交到所有节点


当一个节点失效时,集群可以继续运作并保持同步,失效节点重新加入集群时,其会自动的从其他节点同步数据,他使用如下两种技术

-  State Snapshot Transfer (SST) 
-  Incremental State Transfer (IST) 






## 4. 参考资料

[https://severalnines.com/resources/tutorials/galera-cluster-mysql-tutorial](https://severalnines.com/resources/tutorials/galera-cluster-mysql-tutorial)



[下一章](http://www.zhaibibei.cn/mysql/galera/tutorial2)