【MySQL】galera集群原理简介

 

  1. 特性

    基于行复制的完全并行同步复制
    实时多主架构,任意节点可读写
    无延迟复制,事务零丢失,可靠健壮的读写体验。
    自动化节点关系控制:节点故障自动摘除,节点加入自动协调
    接近原生的MySQL数据库连接的体验

    2.应用

    percona分支的PXC集群,
    Maria分支的MariaDB Cluster集群

    3.原理简析

    当一个事务在当前写入的节点提交后,通过wsrep API(write set replication API)将这个事务变成
    写集(write set)广播到同集群的其他节点中,其他节点收到写集事务后,对这个事务进行可行性检查,
    并返回结果给wsrep API。
    若大多数节点都预估自己可以成功执行这个事务,则wsrep API会做出仲裁,通知所有可以成功执行这
    个事务的节点提交这个事务,并将事务成功提交的消息返回给客户端,同时根据需要剔除没有成功执行
    事务的节点

    4.galera共享库

    galera本身是作为一个插件式的共享库文件,MySQL通过调用galera写集复制API挂钩,获得galera集群
    特性。
    4.1 galera共享库组成部分
    galera库是一个提供准备,复制,应用写集事务功能的协议栈,其重要组成部分为:
    wsrep API:写集复制功能组件,负责提供关系型数据库管理与复制服务,定义接口
    wsrep hooks:在数据库引擎中的集成写集组件
    Gelera Provider:将共享库转化为wsrep API
    Certification Layer:保护写集并完整性,验证写集完整性
    replication:管理复制协议,提供完整的指令系统
    GCS framwork:为集群组通信提供插件架构

    5.优势

    与异步复制相比:
    数据一致性强,传统异步复制并不能保证主从数据一致性,这是由于一般情况下,主库多线程并发执行
    事务,但从库却只有一个线程重做事务,在高压力情况下必然会导致主从延迟。
    与使用半同步复制或分布式锁实现的同步复制相比:
    性能高,扩展性好,半同步复制在高负载甚至从库性能较差的情况下,难以保证其性能。即使自动的
    从半同步复制切换到异步复制,也会牺牲其最大的优点:一致性。其扩展友好度也较差
    galera集群的独特优势:
    1.集群中的每个节点都保存着一份完整的数据副本,数据备份安全性高
    2.集群扩展性强,可以自适应的增加或者下线节点:
    新节点上线时,可以空库状态直接从集群中获取全量数据传输(SST),也可以选择从恢复最新备份状
    态加入集群,获取差量数据传输(IST)
    下线维护其中一个节点时,直接关闭实例,集群就会自动踢出这个节点。维护完毕上线后,会根据自身
    数据与集群数据的落后程度决定通过SST或者IST传输数据。
    3.高效的同步效率,提供了高性能的读写状态(相对于同步复制)。由于同步机制的原因,甚至可以
    通过增加slave线程的办法更进一步提高节点同步效率
    4.更加友好的软硬件兼容性:MySQL官方的NDB,虽然也可以实现同样功能,但因对软硬件要求较高,
    导致其使用量与galera集群不在一个数量级,其增加节点容易,但无法不停机移除节点

    6.缺点:

    DDL操作会严重阻塞同步线程,线上大动作DDL会导致有可能导致节点堵塞无响应,更进一步会导致
    部分节点下线。实际使用中需要搭配pt-osc或者gh-osc等在线DDL工具来进行操作DDL。

附:无延迟复制是指写集同一时间提交,但实际环境中可能因为部分原因导致节点间执行速度有差异,但从理念上已经比半同步复制更先进了一些
本文部分内容参考了galera官方网站的内容,与其《Minimizing downtime and maximizing elasticity with Galera Cluster for MySQL》白皮书

gelera集群详解的更多相关文章

  1. Hadoop(四)HDFS集群详解

    前言 前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群.接下来这篇我详细的分享一下HDFS. HDFS前言: 设计思想:(分而治之)将大文件.大 ...

  2. adoop(四)HDFS集群详解

    阅读目录(Content) 一.HDFS概述 1.1.HDFS概述 1.2.HDFS的概念和特性 1.3.HDFS的局限性 1.4.HDFS保证可靠性的措施 二.HDFS基本概念 2.1.HDFS主从 ...

  3. 使用acs-engine在Azure中国区部署kubernetes集群详解

    转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7649642.html 1. acs-engine简介 ACS是微软在2015年12月推出的一项基于容器 ...

  4. windows下安装redis3.2.100单机和集群详解

    下载redis 下载地址:https://github.com/MicrosoftArchive/redis/releases 我下载的是3.2.100版本的Redis-x64-3.2.100.zip ...

  5. redis主从架构,分片集群详解

    写在前面:这篇笔记有点长,如果你认真看完,收获会不少,如果你只是忘记了相关命令,请翻到末尾. redis的简单介绍: 一个提供多种数据类类型储存,整个系统都在内存中运行的, 定期通过异步的方式把数据刷 ...

  6. 【转载】高可用的MongoDB集群详解

    1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l  面向集合的存储:适合存储对象及JSON形式的数据. l ...

  7. Spark学习笔记--Linux安装Spark集群详解

    本文主要讲解如何在Linux环境下安装Spark集群,安装之前我们需要Linux已经安装了JDK和Scala,因为Spark集群依赖这些.下面就如何安装Spark进行讲解说明. 一.安装环境 操作系统 ...

  8. java架构之路-(MQ专题)RocketMQ从入坑到集群详解

    这次我们来说说我们的RocketMQ的安装和参数配置,先来看一下我们RocketMQ的提出和应用场景吧. 早在2009年,阿里巴巴的淘宝第一次提出了双11购物狂欢节,但是在2009年,服务器无法承受到 ...

  9. 负载均衡LVS集群详解

     一.LB--负载均衡 在负载均衡集群中需要一个分发器,我们将其称之为Director,它位于多台服务器的上面的中间层,根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来进行响应请求,而其 ...

随机推荐

  1. SPOJ QTREE - Query on a tree 【树链剖分模板】

    题目链接 引用到的大佬博客 代码来自:http://blog.csdn.net/jinglinxiao/article/details/72940746 具体算法讲解来自:http://blog.si ...

  2. 阿里云推出SRT+杜比全景声直播方案,低成本打造高质量直播观感体验

    超过200个国家和地区共5144万人观看:浙江卫视.东方卫视55城总收视达2.39,稳居同时段市场第一:优酷直播间63%观看晚会的用户参与了互动:微博68.2亿的主话题阅读量:2019天猫双11狂欢夜 ...

  3. php array_key_exists()函数 语法

    php array_key_exists()函数 语法 作用:检查某个数组中是否存在指定的键名.大理石平板价格 语法:array_key_exists(key,array) 参数: 参数 描述 key ...

  4. BZOJ 1596: [Usaco2008 Jan]电话网络 树形DP

    挺经典的,细节需要特别注意一下 Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s& ...

  5. Android多线程方案

    为主线程减轻负的多线程方案有哪些呢?这些方案分别适合在什么场景下使用? Android系统为我们提供了若干组工具类来帮助解决这个问题. AsyncTask: 为UI线程与工作线程之间进行快速的切换提供 ...

  6. 浅谈关于SQL优化的思路

    零.为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 一.观察 MySQL优 ...

  7. 提高Service优先级

    在onStartCommand()方法中开启一个通知,提高进程的优先级.注意:从Android 8.0(API级别26)开始,所有通知必须要分配一个渠道,对于每个渠道,可以单独设置视觉和听觉行为.然后 ...

  8. 用redlock实现redis的分布式锁

    本文是一个demo,利用多进程,来模拟使用redis分布式锁的使用场景.本机需要安装redis,python3.7下运行代码.分布式锁用redlock这个包实现,实现步骤分三步: 实例化锁:rlock ...

  9. 用PHP实现一些常见的排序算法

    1.冒泡排序: 两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小. function maopaoSort ($list) { $len = count($list) ...

  10. EZOJ #361地理

    分析 就是分别维护l和r的个数 然后对于询问区间[L,R] 之后l树状数组中小于等于R的个数减掉r树状数组中小于L的即可 代码 #include<bits/stdc++.h> using ...