MySQL-Galera-Cluster集群详细介绍
目录
- 一、什么是Mysql集群?
- 1.单节点mysql存在的常见问题
- 2.mysql集群介绍
- 3.Mysql集群的优点和风险
- 二、Mysql集群的一些疑问
- 1.mysql的AB复制和Galera Cluster有什么区别?
- 2.什么情况下适用AB复制,什么情况下使用Galera cluster?
- 3.可以在AB复制的基础上做Galera集群么?
- 4.Myslq的AB复制是属于mysql集群中的一种么?
- 5.为什么做了AB复制,还要做mysql galera集群呢?
- 6.总结
- 三、Mysql-Galera-Cluster集群概念
- 1.galera-cluster 的介绍
- 2.Galera-cluster集群的优缺点
- 3.Galera-Cluster的工作流程
一、什么是Mysql集群?
1.单节点mysql存在的常见问题
- 当数据量和并发量上去后,单节点数据库无法满足大并发时性能上的要求。
- 单节点的MySQL无法满足高可用,数据库宕机或者意外中断等故障后,业务服务被迫中断。
- 当数据量和并发量上去后,单节点 MySQL无法承载巨大的业务量,数据库负载巨大。
2.mysql集群介绍
- MySQL集群是指多台服务器共同处理数据库请求,并具有高可用性和可伸缩性的MySQL数据库系统。由多个节点组成,每个节点都运行着MySQL的实例,并且共享数据,相互之间通过网络互联。当其中一个节点失败时,其他节点可以自动接管它的工作,确保系统的连续可用性。
- MySQL群集需要有一组计算机,每台计算机的角色可能是不一样的。
- MySQL群集中有三种节点:管理节点、数据节点和SQL节点。群集中的某计算机可能是某一种节点,也可能是两种或三种节点的集合。这三种节点只是在逻辑上的划分,所以它们不一定和物理计算机是一一对应的关系。
- 管理节点(也可以称管理服务器)主要负责管理数据节点和SQL节点,还有群集配置文件和群集日志文件。它监控其他节点的工作状态,能够启动、关闭或重启某个节点。其他节点从管理节点检索配置数据,当数据节点有新事件时就把事件信息发送给管理节点并写入群集日志。
- 数据节点用于存储数据,使用内存存放数据,保存进数据节点的数据都会自动复制并存储到其他数据节点。
- SQL节点跟一般的MySQL服务器是一样的,我们可以通过它进行SQL操作。也叫数据库节点,和我们平时使用的mysql相同,作为数据库使用。被数据节点访问。
3.Mysql集群的优点和风险
针对上面单节点mysql存在的常见问题对应,mysql集群有以下几点好处:
- 高可用性:通过在多个节点上复制数据,MySQL集群可以在某个节点发生故障时自动切换到其他节点,确保数据的不间断访问。
- 可扩展性:MySQL集群可以通过添加更多的节点来扩展系统的容量,以满足不断增长的业务需求。
- 高性能:MySQL集群可以通过并行处理和分布式计算来提高数据处理速度,从而提供更好的性能。
- 负载均衡:当数据量和并发量上去后,分摊原先只访问单个节点的数据库压力,分担压力到多个节点上。
- 当然谈到集群,就不得不提集群普遍存在的风险之一,脑裂,因为半数机制,所以还是尽可能的使用奇数个节点。
集群要考虑的风险
- 网络分裂:群集还可能由于网络故障而拆分为多个部分,每部分内的节点相互连接,但各部分之间的节点失去连接。
- 脑裂:导致数据库节点彼此独立运行的集群故障称为“脑裂”。这种情况可能导致数据不一致,并且无法修复,例如当两个数据库节点独立更新同一表上的同一行时。
二、Mysql集群的一些疑问
1.mysql的AB复制和Galera Cluster有什么区别?
- MySQL的AB复制和Galera Cluster是两种不同的复制和集群技术
- AB复制:AB复制(Asynchronous Binary Replication)是MySQL的一种异步复制技术。在AB复制中,一个MySQL服务器作为主服务器(A),接收写操作并将其记录在二进制日志中。另一个MySQL服务器作为从服务器(B),通过读取主服务器的二进制日志来复制数据。AB复制是MySQL的传统主从复制方式,主服务器和从服务器之间的复制是异步的。
- Galera Cluster:Galera Cluster是一种同步多主复制技术,它通过在多个MySQL节点之间保持数据一致性来实现高可用性和水平扩展。Galera Cluster使用了全球事务标识符(GTID)来跟踪和保证事务的一致性。Galera Cluster中的所有节点都是对等的,可以接收写操作,并且数据的复制是同步进行的,确保所有节点上的数据保持一致。
2.什么情况下适用AB复制,什么情况下使用Galera cluster?
AB复制适用于以下情况:
- 数据备份和恢复:AB复制可以通过复制主服务器的二进制日志来实现数据备份和恢复。
- 读写分离:通过将读操作分发到从服务器,可以分担主服务器的负载。
- 数据分析:通过在从服务器上进行数据分析,可以减轻主服务器的压力。
Galera Cluster适用于以下情况:
- 高可用性:Galera Cluster提供了多个节点间的同步复制,当一个节点发生故障时,其他节点可以继续提供服务,实现高可用性。
- 水平扩展:Galera Cluster可以通过增加节点来实现水平扩展,提供更好的性能和容量。
- 数据强一致性:Galera Cluster通过同步复制确保所有节点上的数据一致性,适用于对数据一致性要求较高的应用场景。
3.可以在AB复制的基础上做Galera集群么?
- 可以在AB复制的基础上构建Galera Cluster,但它们是两种不同的复制和集群技术,并不建议这么操作。
- AB复制是异步复制,而Galera Cluster是同步复制。
- 如果你想将AB复制迁移到Galera Cluster,需要进行一些额外的步骤和配置,例如将现有的AB复制节点转换为Galera Cluster的节点,并确保数据的一致性和正确性。
- 这通常需要进行数据同步和一致性检查,并确保所有节点都满足Galera Cluster的要求。
- 建议在进行此类迁移之前进行充分的规划和测试,以确保数据的安全和可靠性。
4.Myslq的AB复制是属于mysql集群中的一种么?
MySQL的AB复制(主从复制)并不属于严格意义上的数据库集群技术,主要原因如下:
- AB复制采用的是异步单向复制,存在数据不一致的问题,不满足集群对数据强一致性的要求。
- AB复制是一主多从的结构,只有主节点可以进行写操作,从节点为只读,这不符合集群的所有节点地位对等的特征。
- 当主节点发生故障时,AB复制需要人工进行故障切换和恢复,不能实现集群的自动故障转移。
- 从节点发生故障并不会影响主节点,而集群要求节点之间紧密协作,如果存在节点故障则整个集群不可用。
- AB复制也无法轻松实现在线扩容等集群的特性。
- 没有实现读写分离、负载均衡等集群功能。
5.为什么做了AB复制,还要做mysql galera集群呢?
- AB复制是单向异步复制,存在数据不一致,而Galera是多主同步复制,可以保证强一致性。
- AB复制需要手动故障切换,Galera支持自动故障检测和切换。
- AB复制只有主节点可写,从节点只读,不支持读写分离。Galera所有节点都可读写,支持灵活的读写分离。
- AB复制扩容需要手动添加新从节点。Galera可以在线动态添加新节点实现自动扩容。
- AB复制不提供负载均衡能力。Galera可以根据查询路由实现负载均衡。
- AB复制节点间没有数据校验,从节点数据不一致时不影响主节点。而Galera节点之间有数据校验,不一致时整个集群不可用。
- AB复制不支持自动节点提拔恢复,需要人工维护。Galera节点故障可以自动恢复。
6.总结
- AB复制是MySQL的异步复制机制,用于数据备份和故障恢复,不提供自动的读写分离和负载均衡功能。
- Galera Cluster 是基于同步复制的集群方案,利用 Galera 技术实现多主同步复制,它提供了高可用性、数据一致性、读写分离和负载均衡等功能。
三、Mysql-Galera-Cluster集群概念
1.galera-cluster 的介绍
- Galera Cluster:集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有三个版本,分别是Percona Xtradb Cluster、Mysql Galera Cluster及MariaDB Galera Cluster
- Galera本身是具有多主特性的,即采用multi-master的集群架构,是一个既稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案
- 当有客户端要写入或者读取数据时,连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不像其他集群共享任何自己数据,是一种高冗余架构
- Galera Cluster需要至少三个节点
- 如下图所示:三个节点组成了一个集群,与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,称为multi-master架构

2.Galera-cluster集群的优缺点
优点
- 多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的。
- 同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失。
- 并发复制:从节点APPLY数据时,支持并行执行,更好的性能
- 故障切换:在出现数据库故障时,因支持多点写入,切换容易
- 热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在节点故障期间,节点本身对集群的影响非常小
- 自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变为一致
- 对应用透明:集群的维护,对应用程序是透明的
缺点:
- 每个节点独立、异步执行会导致节点不一致性(每个节点其实是维护一个队列),为了保证各个节点的最终一致性,必须使用类tcp的滑动窗口来进行限制,实现原理如下:
整个galera cluster中,同时只有一个节点可以广播消息(数据),每个节点都会获得广播消息的机会(获得机会后也可以不广播),当慢节点的待执行队列超过一定长度后,它会广播一个FC_PAUSE消息,所以节点收到消息后都会暂缓广播消息,直到该慢节点的待执行队列长度减小到一定长度后,galera cluster数据同步又开始恢复
3.Galera-Cluster的工作流程
- 依靠一个全局的事务id,整个集群环境,每个事务的事务id都是唯一的。
- 客户端连接到一台主服务器上做更改,提交请求后会在当前连接的主服务器上做检查,如果失败,直接返回更新失败;如果成功,会把修改操作发给其他主节点;如果发生冲突,那么操作就会取消,返回失败信息。这样确保所有的服务器都会执行正确的指令,不会出现冲突
- 因此,所有节点都要做检查就会造成效率问题,延迟问题。
- 因此,galera cluster的集群有数量限制,主节点过多容易造成效率过低

- 当client端执行DML数据库操作语言时,将操作发给server,server将数据库所做的更改收集到一个写集中发给cluster,cluster中每个动作对应一个GTID
- 其它server接收到并通过验证(合并数据)后,执行appyl_cb动作和commit_cb动作,若验证没通过,则会退出处理当前server节点验证通过后,执行commit_cb,并返回,若没通过,执行rollback_cb。
- 只要当前节点执行了commit_cb和其它节点验证通过后就可返回。
- commit_cb和rollback_cb是什么?
- commit_cb(Commit Callback):commit_cb 是在【事务提交】时执行的回调函数。当集群中的所有节点都接收并验证了写集中的更改后,如果验证通过,则会执行 commit_cb。在 commit_cb 中,可以进行一些后续的处理操作,例如更新数据库的状态、清理临时数据等。执行 commit_cb 表示事务已成功提交并在所有节点上生效。
- rollback_cb(Rollback Callback):rollback_cb 是在【事务回滚】时执行的回调函数。如果在集群中的任何一个节点验证失败或发生错误,则会执行 rollback_cb。在 rollback_cb 中,可以进行一些回滚操作,例如撤销已应用的更改、恢复之前的状态等。执行 rollback_cb 表示事务未能成功提交,并需要回滚到事务开始前的状态。
相关文章:
MySQL-Galera-Cluster集群详细介绍
目录 一、什么是Mysql集群?1.单节点mysql存在的常见问题2.mysql集群介绍3.Mysql集群的优点和风险 二、Mysql集群的一些疑问1.mysql的AB复制和Galera Cluster有什么区别?2.什么情况下适用AB复制,什么情况下使用Galera cluster?3.可…...
JavaScript从入门到精通系列第二十六篇:详解JavaScript中的Math对象
大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥连接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻J…...
u盘直接拔出文件丢失怎么找回?u盘文件恢复办法分享!
u盘作为一种便捷的数据存储设备,被广泛地使用。通过u盘,我们可以在不同设备之间轻松传输文件,然而有时候,我们可能因为匆忙或疏忽并未安全弹出u盘,而是直接将u盘拔出,进而导致重要文件丢失,u盘直…...
rust学习-LinkedList
介绍 A doubly-linked list with owned nodes. 自有节点的双向链表 pub struct LinkedList<T, A = Global> whereA: Allocator, {/* private fields */ }使用 Vec 或 VecDeque 几乎总是更好,因为基于数组的容器通常更快、内存效率更高,并且可以更好地利用 CPU 缓存 …...
搭上直播快车,文旅迎来了更大爆发期?
“直播累计观看人数1083万人次,同期在线峰值10万人,抖音平台销售额800万元,荣登食遍天下榜第一名”。 10月28日,“东方甄选看世界”无锡专场直播落幕,又创造了新成绩,“文旅直播”这一新带货模式的发展可行…...
【智能座舱系列】- 深度解密小米Hyper OS,华为HarmonyOS区别
上一篇文章《小米的澎湃OS到底牛不牛?与鸿蒙系统之间差距有多大》,从多个方面比较了小米Hyper OS 与 华为HarmonyOS的区别,本篇文章继续从架构层面深度解读两者本质的区别。 小米澎湃OS是“以人为中心,打造人车家全生态操作系统”,该系统基于深度进化的Android以及自研的V…...
kafka-consumer-groups.sh
通过 kafka-consumer-groups.sh 脚本查看或变更消费组的信息。 查看消费者组信息 ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list 查看指定消费者组的消费位移 ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group g…...
数据仓库-拉链表
在数据仓库中制作拉链表,可以按照以下步骤进行: 确定需求:首先明确需要使用拉链表的场景和需求。例如,可能需要记录历史数据的变化,以便进行时间序列分析等。设计表结构:在数据仓库中,拉链表通…...
【Docker】一些可以直接用的Docker环境
这里罗列一些打包的镜像,方便直接使用。 cu11.6ubuntu18.04 docker push kevinchina/deeplearning:cu11.6ubuntu18.04 FROM nvidia/cuda:11.6.2-cudnn8-devel-ubuntu18.04 RUN apt-get update && apt-get install -y wget git vim curl RUN wget http://…...
Unity2D中瓦片地图的创建与绘制教程
Unity2D中瓦片地图的创建与绘制 素材切割创建地图创建瓦片绘制地图瓦片调色板画笔拓展素材资源链接 素材切割 选中以下素材,以Tiles为例(素材链接在文章最下方) 修改素材属性。 将Sprite Mode属性改为Multiple多张(不然切割不了&…...
现代的简洁,诠释轻奢的精致!福州中宅装饰,福州装修
轻奢风是一种生活新时尚 优雅、低调、舒适、简单,不断地推陈出新 站在时尚的前沿,引领潮流 中宅装饰集团轻奢风格产品 追求高品质生活细节 以设计精致的空间构造营造出 一种优雅、时尚生活氛围 将低调奢华之美注入现代家居设计中 客厅|The Sitt…...
运用ChatGPT辅助新手学习躺赢者PRO飞控二次开发示例(2023年10月28日)
运用ChatGPT辅助新手学习躺赢者PRO飞控二次开发示例(2023年10月28日) 1、以飞控预设的飞行任务demo中void flight_subtask_1(void)代码为例分析一下变量flight_subtask_cnt的作用? //逆时针转动90度,完成后降落 void flight_sub…...
【Java】HashCode方法重写注意事项
HashCode方法 HashCode方法是属于Object父类提供的方法,HashCode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable提供的哈希表HashCode的常规协定是:在Java应用程序执行期间,在…...
039-第三代软件开发-PDF阅读器
第三代软件开发-PDF阅读器 文章目录 第三代软件开发-PDF阅读器项目介绍PDF阅读器1 初始化PDF view2 qml 中使用3 创建模块 关键字: Qt、 Qml、 pdf、 LTDev、 本地 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Met…...
计算机毕业设计选题推荐-跑腿平台微信小程序/安卓APP-项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
RocketMQ生产者消息发送出去了,消费者一直接收不到怎么办?(Rocket MQ订阅关系一致性)
问题: 使用RocketMQ消息队列,生产者将数据发送出去了,但是生产者一致没接收到(或者是间隔好几分钟,突然接收到一条数据)怎么办?并且通过rocket web控制台查看消息的状态为NOT_ONELINE或者NOT_CONSUME&#…...
使用Golang开发硬件驱动
1. 介绍 Golang是一种简洁、高效的编程语言,它的强大并发性能和丰富的标准库使得它成为了开发硬件驱动的理想选择。在本文中,我们将探讨如何使用Golang开发硬件驱动程序,并提供一个实例来帮助你入门。 2. 准备工作 在开始之前,…...
设计模式(19)命令模式
一、介绍: 1、定义:命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可以使用不同的请求对客户端进行参数化。命令模式还支持请求的排队、记录日志、撤销操作等功能。 2、组…...
QModelIndex 与QStandardItem相互转换
目录 1、 QModelIndex 转换成QStandardItem 2 、QStandardItem 转换成 QModelIndex 3、示例 4、总结 1、 QModelIndex 转换成QStandardItem QStandardItem * itemQStandardItemModel::itemFromIndex(const QModelIndex & index) const 借助QStandardItemModel来完成…...
Linux - 进程地址空间
前言 首先,我们先要对 内存当中存储 各个数据之间的 结构要有一个 大概的了解: 各个区当中存储的数据使用类型不同,所以,这些数据在使用方式上是有差别的。比如下面这个例子: 在C 语言当中我们不能直接对 上述的 str…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
