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

http://www.liuhaihua.cn/archives/44038.html

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简称。

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采用的是全同步的通信方式。

PS:如果您想和业内技术大牛交流的话,请加qq群(527933790)或者关注微信公众 号(AskHarries),谢谢!

===============

一、MariaDB Galera Cluster概要:

1.简述:
MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。
2.特性:
(1).同步复制 Synchronous replication
(2).Active-active multi-master 拓扑逻辑
(3).可对集群中任一节点进行数据读写
(4).自动成员控制,故障节点自动从集群中移除
(5).自动节点加入
(6).真正并行的复制,基于行级
(7).直接客户端连接,原生的 MySQL 接口
(8).每个节点都包含完整的数据副本
(9).多台数据库中数据同步由 wsrep 接口实现
3.局限性
(1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的.
(2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.
(3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…
(4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
(5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
(6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
(7).XA事务不支持,由于在提交上可能回滚。
(8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
(9).集群节点建议最少3个。
(10).如果DDL语句有问题将破坏集群。

Galera:多主同步MySQL集群原理解析相关推荐

  1. 分布式一致性协议 Gossip 和 Redis 集群原理解析

    分布式一致性协议 Gossip 和 Redis 集群原理解析 Redis 是一个开源的.高性能的 Key-Value 数据库.基于 Redis 的分布式缓存已经有很多成功的商业应用,其中就包括阿里 A ...

  2. 达梦主备守护集群原理详解

    达梦主备集群顾名思义就是一主一备(也可以一主多备)是一种集成化的高可靠性解决方案,同时满足用户对数据安全性和高可用性的要求.解决由于硬件故障.自然灾害等原因导致的数据库服务长时间中断问题,满足用户不间 ...

  3. 第03课:分布式一致性协议 Gossip 和 Redis 集群原理解析

    Redis 是一个开源的.高性能的 Key-Value 数据库.基于 Redis 的分布式缓存已经有很多成功的商业应用,其中就包括阿里 ApsaraDB,阿里 Tair 中的 RDB 引擎,美团 MO ...

  4. 谷粒商城 集群篇 (六) --------- MySQL 集群

    目录 前言 一.MySQL 集群原理 1. MySQL-MMM 2. MHA 3. InnoDB Cluster 二.Docker 安装模拟 MySQL 主从复制集群 1. 创建 Master 实例 ...

  5. go连接mysql集群_Mysql集群方案-Go语言中文社区

    MySql集群原理 比如有三台mysql,当java使用数据源连接池进行连接的时候,应该连接哪台呢?其实连接哪台都不行,万一你连接的mysql,突然宕机了,那么数据都查询不到了,其实应该连接mycat ...

  6. MySQL集群搭建--多主模式

    MySQL集群搭建--多主模式 本文使用的是Galera搭建的MYSQL集群,实现的是每个MYSQL都是主服务器,不存在主从之分. 环境: 三台mysql5.7服务器. 安装mysql集群: 安装前准 ...

  7. CentOS 7安装MySQL集群-GALERA CLUSTER 4 FOR MYSQL 8 RELEASE

    CentOS 7安装MySQL集群-GALERA CLUSTER 4 FOR MYSQL 8 RELEASE 文章目录 CentOS 7安装MySQL集群-GALERA CLUSTER 4 FOR M ...

  8. MySQL 集群(三):MySQL + Mycat 实现读写分离,主备切换集群

    MySQL 集群(三):MySQL + Mycat 实现读写分离,主从切换集群 下载 Mycat Mycat 主要文件 端口 Mycat 命令 配置文件 server.xml schema.xml 配 ...

  9. MySQL主从集群原理+实战

    目录如下 MySQL主从集群原理+实战 背景 随着公司业务的发展,对数据库的要求越来越高,以前的单机MySQL肯定是玩不转了,亟需升级成MySQL集群,这是一个公司在业务发展时不得不面临的问题 就单机 ...

最新文章

  1. LIC-Fusion 2.0:基于滑动窗口法平面特征跟踪的激光雷达惯性相机里程计
  2. The role of the inter-controller consensus in the placement of distributed SDN controllers
  3. delphi SAP
  4. linux内核网络协议栈--linux网络设备理解(十四)
  5. 如何利用 “集群流控” 保障微服务的稳定性?
  6. 官网3.15课程一起来“打价”,找群内管理员还可以折上折
  7. 在 Ubuntu 环境下实现插入鼠标自动关闭触摸板
  8. ubuntu下面supertux2的玩法
  9. mysql 索引_MySQL之索引
  10. 基于RHEL6.0的mysql服务器复制的主主架构实现
  11. Win10 JAVA安装及环境搭建(windows jdk,windows java环境配置)
  12. Java WebSocket生命周期
  13. 怎么判断网络回路_地暖管漏水怎么办?一打、二看、三确定,及时查出地暖管漏水点!...
  14. 百度地图如何获取国内行政区的边界,同时添加覆盖物并且填充颜色
  15. 2016,云计算行业走向何方?
  16. Debezium报错处理系列之三十六:Task threw an uncaught and unrecoverable exception. Task is being killed and will
  17. V 社秘密开发 Steam 跨系统兼容工具;甲骨文开源 GraphPipe,机器学习模型标准
  18. Android 属性动画使用(二)
  19. mysql varchar字段自动忽略尾部空格
  20. pyecharts1.7.1实现地图可视化(空间数据可视化)

热门文章

  1. 泥石流与滑坡的遥感解译特征
  2. 我身边的中国教育之怪现象 (【小李木耳】2011年7月29日)
  3. windows客户端安装时运行时库版本不匹配的问题
  4. PAT乙级题解1003(超级详细分析,看完就懂)
  5. Win10注册表使用SYSTEM后也无法删除注册表的解决方案
  6. 适用于多类移动场景的融合认证机制设计
  7. C语言通过Windows命令行编译和运行程序
  8. 最万能的登录、注册页。带输入数据的验证。邮箱的正则表达式、正则表达式验证输入的数据
  9. VUE 404页面的实现
  10. centos 6.3下rarlinux 与wireshark的安装