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

标签: JVM实现探究 | 发表时间:2015-03-24 13: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.

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 协议代理.

MySQL 数据同步 主主设置(互为主备)

- - CSDN博客推荐文章
MySQL 数据同步 主主设置(互为主备). 两台MySQL主机做为服务器:. 这一步在每一台(主)服务器上创建一个用户,并为之授权,使它们可以互相访问彼此的数据库. 创建一个充许master-2来访问的用户rep,密码为rep. 创建一个充许master-1来访问的用户rep密码为rep. 备注:为了操作方便,我们在两台服务器上,指定的访问权限时,设定的用户名和密码,一摸一样 .

巧用Percona Toolkit解决MySQL主从不同步问题

- - 极客521 | 极客521
由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类. 2:执行non-deterministic query. 3:回滚掺杂事务表和非事务表的事务. 4:binlog或者relay log数据损坏. 数据不同步给应用带来的危害是致命的,当出现主从数据不一致的情况,常见的应对方法是先把从库下线,然后找个半夜三更的时间把应用停掉,重新执行同步,如果数据库的体积十分庞大,那工作量可想而知,会让人崩溃.