前期回顾

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

上个专题我们说了MySQL组复制相关的内容,这节我们说MySQL Galera Clusters ,这个和MGR在某些方面类似,都是实现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.png

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

下一章