Galera:多主同步MySQL集群原理解析

标签: JVM实现探究 | 发表时间:2015-03-24 21:15 | 作者:远影
出处:http://www.majin163.com

引言

Galera Cluster是基于MySQL/innodb二次开发而成的一个支持“多主同步”的数据库主从集群。强调主从集群意味着Galera Cluster的每个节点充当一个数据冗余,而没有在节点间做分库分表的水平扩展。Galaer官网中为Galera Cluster洋洋洒洒罗列了10大优势,其实总结下来无非上文用引号注明的两点:

多主
Galera Cluster没有MySQL主从集群只有一个主能提供写服务的限制,集群中每个节点都可读可写,无需读写分离。在一个Galera Cluster前直接部署HAProxy或LVS做读写负责均衡是比较常用的做法。

同步
Galera replication具有实时性,能够保障不同节点的数据视图在较小的时间范围内是一致的。MySQL原生replication方案slave中的SQL线程和IO线程是分离的,即便使用半同步甚至同步复制,也可能因为SQL线程的速度跟不上IO线程而导致slave数据落后很多,当然5.7引入并行复制后会好很多,而Galera中除了具有并行复制的功能外,还具有flow control的功能来控制节点间数据同步的速度。

Galera Cluster相较于MySQL 来说的核心贡献是基于Galera replication plugin实现实现了多主和同步两大特性,本文将详细剖析Galera在解决多主和同步两大问题上的想法和思路。

架构简述

Galera Cluster节点间通过wsapi进行数据通信和同步,如图1和图2所示,wsapi通过hook的方式侵入Innodb中事务的commit流程,获取事务内所有数据行的更改,构造一个write set并将其同步到Cluster其他节点,wsapi即write set api简称。

图1. Galera Overview

图2. Galera library

Galera provider目前是wsapi的唯一实现。Galera provider内部实现又划分为多个层次,其中最为核心的是认证层(certification)和复制层(replication)。认证层负责检测本机事务,以及从其他节点同步来的事务是否可以提交,Galera的基于认证的事务乐观并发控制会在多主实现一节中介绍。复制层的工作包含两方面:

  • 组通信,与其他节点同步writeset,并为事务分配全局唯一的GTID
  • 并行复制,结合Galera事务乐观并发控制原理的并行复制

复制层通过组通信(Group communication)完成writeset的同步和GTID的分配,GTID的分配是Galera基于认证的事务并发控制和并行复制的前提和基础。

GTID与组通信

GTID是global transaction id的缩写,在MySQL社区中,GTID的概念并不新鲜,MySQL中的GTID是由Master生成,用于标志事务唯一性并通过ID定位binlog位置的一种手段,从而有效解决了级联复制等场景中的各种问题。

对于Galera Cluster来说,replication通过Galera replication中间件来保障,不基于binlog,因此Galera的GTID虽然也标志事务的唯一性,但是它的设计初衷完全不同,在介绍它的设计目的之前,先来看下Galera的GTID格式:

45eec521-2f34-11e0-0800-2a36050b826b:94530586304

如上图所示,GTID包含两部分:

  • UUID,标志事务的唯一性ID
  • 一个顺序ID,标志这个事务在Galera Cluster所有节点事务中的顺序

而且实现方式也要复杂的多,因为Galera Cluster中所有节点都可做master,因此不能由一个节点随意去分配。理论上需要所有节点对一个事务的ID达成一致才能确定,但是这里引入Paxos一类的分布式一致性算法显然会严重拖慢commit速度,因为Paxos采用的是全同步的通信方式。

–未完待续

相关 [galera 同步 mysql] 推荐:

Galera:多主同步MySQL集群原理解析

- - 进击的程序猿
Galera Cluster是基于MySQL/innodb二次开发而成的一个支持“多主同步”的数据库主从集群. 强调主从集群意味着Galera Cluster的每个节点充当一个数据冗余,而没有在节点间做分库分表的水平扩展. Galaer官网中为Galera Cluster洋洋洒洒罗列了10大优势,其实总结下来无非上文用引号注明的两点:.

又有一家大的 MySQL distribution 支援 Galera Cluster…

- - Gea-Suan Lin's BLOG
Galera Cluster 是 Codership 所提供的 MySQL master-master 方案,與其他 master-master 方案比起來,最大的好處就在於比較不需要擔心資料同步的問題…. 剛剛看到,除了 Percona 外,又有一家 MySQL distribution 支援 Galera Cluster:「 MariaDB Galera cluster released」.

小试 MariaDB Galera Cluster

- - raynix 筆記
前些时, 难得老板关注新技术, 哈哈, 我于是有机会尝试一下数据库服务器集群. 什么是 Galera Cluster. 简单的说就是3个或以上的 MariaDB 服务器相互作为镜像. 我按照 Digital Ocean 的指点, 用 AWS 上 3 个虚拟机做了个最小的集群, 下面是我的一些心得(针对 MariaDB 10.0.17):.

同步mysql数据到hive

- - ITeye博客
地址为:http://archive.cloudera.com/cdh/3/下载相应版本,如sqoop-1.2.0-CDH3B4.tar.gz. 地址为:http://archive.cloudera.com/cdh/3/,版本可以为hadoop-0.20.2-CDH3B4.tar.gz. 3.解压 sqoop-1.2.0-CDH3B4.tar.gz ,hadoop-0.20.2-CDH3B4.tar.gz 到某目录如/home/hadoop/,解压后的目录为.

MariaDB Galera Cluster 10.0.11 发布

- - 开源中国社区最新新闻
MariaDB Galera Cluster 是一个用于同步 MariaDB 数据库的多 master 集群的工具. 在数据方面完全兼容 MariaDB 和 MySQL. MariaDB Galera Cluster 10.0.11 发布,这是一个 Beta 版本,相关链接:.

MySQL半同步复制(Semisynchronous Replication)

- - IT技术博客大学习
MySQL5.5引入了半同步复制(Semi-synchronous Replication),以下是对于半同步复制的认知和理解:. 半同步启动需要主从两端都需要加载安装各自对应的semi模块,从库端支持半同步功能的数量至少一台;主库端当一个事务成功提交后,并不及时反馈给前端用户,该线程会被临时block,等待由从库端返回确认该条事务也同时成功写入到relay log中的receipt(回执确认),这时主库线程才返回给当前session告知操作完成,半同步复制并不关心在从库一端该事务是否都被执行并被提交完成.

MySQL数据库设置主从同步

- - CSDN博客架构设计推荐文章
MYSQL主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够有效缓解数据库读写的压力. 1、可以作为一种备份机制,相当于热备份. 2、可以用来做读写分离,均衡数据库负载. 1、主从数据库版本一致,建议版本5.5以上. # 日志文件名 log-bin = mysql-bin # 日志格式,建议mixed binlog_format = mixed # 主数据库端ID号 server-id = 1.

Databus for MySQL 同步 · linkedin/databus Wiki · GitHub

- -
A frequently asked question on the Databus open source mailing list is about the possibility of capturing changes in MySQL through Databus. $ (cd bin && ./create_person.sh): The script assumes that MySQL is started on port 33066; please change it appropriately for your setup.

MySQL中的半同步复制

- - 学习日志
MySQL当前存在的三种复制模式有:异步模式、半同步模式和组复制模式. 注意:MySQL复制模式没有“同步复制”这一项的,文章中只是为了读者方便理解半同步复制的概念才介绍了同步复制概念 https://dev.mysql.com/doc/refman/8.0/en/replication-semisync.html.

Galera Load Balancer 0.9.0 正式版发布

- - 开源中国社区最新新闻
Galera Load Balancer 0.9.0 发布了,主要是引入 libglb.so ,可为你的 Linux 应用增加负载均衡能力,只需重载 libc 的 connect() 调用即可;同时提供可客户端到服务器端的直连,无处重新编译;增加了 round-robin 均衡策略. GLB (Galera Load Balancer) 是一个与 Pen 类似的 TCP 负载均衡器,它功能没有 Pen 那么强大,其主要的目的是做一个非常快速的 TCP 协议代理.