coldsmog开发笔记
JS 事件笔记
Ckeditor 上传WPS图片失败问题
Springboot
SpringBoot 统一异常处理
Springboot 引入外部jar包
Springboot 打成war包
Springboot 多环境配置
SpringBoot @Scope注解学习
Springboot 快速生成项目API文档
SpringCache 缓存
Spring jetcache 二级缓存
Springboot 按条件装配类
FastJson的JsonPath语法
正则表达式语法
Spring 路径匹配
Feign 基础数据操作
监控Feign调用metrics
Springboot feign的性能优化
Jackson 设置序列化属性
SpringBoot 集成 Spring Data Mongodb 操作 MongoDB
MongoDB 的一些注意事项
MongoDB 指令对比
Jackson 解析XML
Springboot Redis注册
SpringBoot RedisTemplate批量插入
Springboot 指标监控Micrometer
springboot validation 注解校验
springboot 引入配置
Springboot 静态文件处理
Springboot 导出csv文件
Springboot 事件驱动(发布/订阅模式)
Springboot 启动过程和扩展点
Springboot 优化停机上下线
Spring自动装配 - 干饭角度学习
Springboot ShardingJDBC
Springboot的重试
springboot 动态修改端口
Oracle
Oracle 中实现自增ID
Oracle 定时任务
Oracle 解锁临时表
Oracle 检查连接数
Oracle 表空间
Oracle 解释执行SQL
markdown作图(适用typora)
服务器压测
业务对象层和数据层
并发限流处理
中间件
Yarn的使用
Dubbo学习笔记-RPC扩展和本地Mock
Dubbo学习笔记-泛化实现进行mock
Redis缓存穿透,缓存击穿,缓存雪崩
Galera 集群说明
Pip 镜像
pip 使用
MySQL命令行
数据库缓存双写方案
Git相关操作
Redis 操作时间复杂度一览
nacos 杂记
mybatis 散记
shardingjdbc
一次线上事故排查发现的Caffeine缓存死锁问题
设计模式
重新讲讲单例模式和几种实现
更优雅地实现策略模式
Http-headers
Prometheus 杂散笔记
JAVA 散记
CompletableFuture
Gson、FastJson、Jackson、json-lib对比总结
jackson 时间的序列化踩坑
JVM
自定义注解
mysql类型和java类型 转换一览表
枚举维护一个Map<value, Enum>的映射
Java中String +、concat、StringBuilder、StringBuffer 性能对比
TraceId 使用
MySQL 多数据源处理
Mybatis-plus 流式查询
JAVA发送win 桌面通知
idea 启动项目失败非代码问题杂记
Lambda 简述
Arthas 使用笔记
一种链式更新数据的数据模式
Skywalking 新增中间件插件
Redission 使用
数据导出为图片
IDEA 的热重启
Netty 工具类
maven 插件
本文档使用 MrDoc 发布
-
+
首页
Galera 集群说明
## 什么是Galera集群? Galera集群是一个真正的基于同步复制的多主集群。它是一种易拓展、易使用、高可用的解决方案 它目前已成为MariaDB的自带组件和推荐集群方案。同时,因为MySQL和MariaDB的渊源,官方也提供了Galera Cluster For MySQL的解决方案。需要注意的是该解决方案不能直接应用于Oracle版本的MySQL,而是需要安装带有实现了其复制协议的MySQL。 Galera Cluster是多主多写的数据库集群。 它提供同步复制并支持多主复制。Galera集群能够无限制地并行应用(即“并行复制”),复制广播和自适应节点。 Galera集群的主要亮点是数据一致性。事务要么应用于每个节点,要么根本不生效。Galera集群不是集群管理、负载平衡或集群监控。它的作用是使数据库保持同步。当然,前提是它们在一开始就已正确配置和同步。 ## 如何同步复制? 历史上曾经有过被抛弃的同步复制 同步复制的关键在于分布式事务。追求的都是同一事务要么一起失败,要么一起成功。 两阶段提交协议:引入一个仲裁节点用于协调各数据节点状态,将更新语句发送给各节点,各节点确认可提交后,再通知该事务下的所有节点提交语句来保证同步。 当然,原始的同步复制已经被实现证明有很多待完善的地方,比如随着节点数的增多,仲裁节点需要协调各节点的耗时也越来越长,死锁和冲突的风险也会越来越大。 Galera Cluster的同步复制? ![](/media/202402/2024-02-18_150031_258466.png) 1. 所有插入数据和修改主键都将收集到写入集中。 2. 使用数据库唯一UUID+已执行事务数的全局事务GTID:3E11FA47-71CA-11E1-9E33-C80AA9429562:23 3. 写集使用主键进行确定性认证测试:检查冲突,如无冲突,则并发执行;冲突则重排序执行。 底层原理如下 ![](/media/202402/2024-02-18_144112_980503.png) - DBMS数据库管理系统:在单个节点上运行的数据库服务器。目前支持MySQL,MariaDB或Percona XtraDB。 - wsrep API。这是数据库服务器的接口,也是复制提供程序。它由两个主要元素组成: - wsrep hooks:与数据库服务器引擎集成以进行写集复制。 - dlopen:此函数为wsrep提供实现程序以供 wsrep hooks使用。 - Galera Replication Plugin:此插件启用写集复制服务功能。提供认证、复制和通讯插件框架 - 群组通信插件:有几个组通信系统可用于Galera Cluster(gcomm和spread)。提供虚拟同步、时间同步,全局事务 群组协议,定义了数据库节点间的通信模式,保证复制数据的一致性,其特点是所有节点必须ACK 写集复制,各节点并行执行写操作后将插入数据和修改主键id绑定到写集消息中,判断冲突避免死锁。 数据库状态机。读操作将由各节点自己执行。写操作则在本地执行后提交之前,作为写集广播出去认证是否是最新数据,然后再提交。 事务排序。在数据库节点提交并同步其余的节点前对事务进行重排序,如果成功则增加通过验证的事务数量 ## 为什么要使用Galera集群而不是MySQL的复制方案? Galera Cluster使用多主复制方法:它允许您写入集群中的任何节点,且任何节点上的写入都将同步到所有节点。标准的MySQL复制使用一主多从模式:尽管您可以从任何节点读取数据,但是只能在主节点上进行写入,写入性能有瓶颈,读写服务器有数据延迟,主从切换也较为困难,需要大量时间精力。 MySQL 集群复制方案对比如下 ![](/media/202402/2024-02-18_151142_589590.png) ## 已使用MySQL一主多从复制,如何切换到Galera集群? 这可能非常容易。但还是需要考虑一些事项,您可能需要进行更改。 1. 您必须将所有表迁移到InnoDB。尽管MySQL和MariaDB提供了多个存储引擎,但Galera仅允许InnoDB表。您还必须解决更改为InnoDB将如何影响您的应用程序的问题。 2. 您还应该将每个服务器迁移到相同版本的MySQL或MariaDB,以及最新版本。这可能会影响表的架构以及数据和应用程序。 3. 您可能需要对硬件进行一些更改。对于一台,如果只有两台服务器,则应添加第三台。尽管没有必要,但建议所有使用的服务器在资源上相同。 基本上,如果您已经在使用最新的数据库软件并且仅使用InnoDB表,那么实施Galera将会非常容易。否则,实施Galera将需要一些思考和精力。但是,我们将获得更好的集群:所有服务器都将相同,以便于维护和性能;他们将运行最新的软件,这将提供优势;数据将得到更好的保护,并具有高可用性。 ## 如何升级集群? 对于数据库服务器本身或[Galera复制插件](https://galeracluster.com/library/documentation/glossary.html#term-galera-replication-plugin),将定期向Galera Cluster提供更新。要更新某个节点的软件,您需要将客户端连接重定向到远离该节点的位置,然后停止该节点。然后升级节点的软件。完成后,只需重新启动节点即可。 有关升级过程的更多信息,请参阅[升级Galera群集](https://galeracluster.com/library/documentation/upgrading.html)。 ## 如何负载平衡? 对于高流量的群集,为防止一个节点被读写查询所淹没,您可能需要额外使用负载平衡。Galera 集群不包含此功能。但是,我们可以使用MariaDB的MaxScale,ProxySQL或其他类似的负载平衡器。 MaxScale是一种数据库代理,可以扩展数据库服务器和集群的高可用性,可伸缩性和安全性。通过将应用程序与基础数据库基础架构分离,它还简化了应用程序开发。它将与MariaDB和MySQL一起使用。 ## 如何故障转移? 一般多节点集群的master节点挂掉,都会有一个选主的过程,如果选举异常还会有脑裂的风险。而Galera的灾备方案十分简单,集群里冗余一台没有客户端连接的节点,灾难发生时,将其作为主节点即可。 Galera Cluster是真正的同步多主复制系统,它允许随时将任何或所有节点用作主节点,而无需任何额外的配置。这意味着在传统的MySQL主从意义上没有故障转移。 Galera Cluster的主要重点是跨节点的数据一致性。这不允许对数据库进行任何可能损害一致性的修改。例如,该节点拒绝写入请求,直到加入节点与集群同步并准备处理请求为止。 这样的结果是,您可以安全地使用自己喜欢的方法在节点之间分配或迁移连接,而不会引起不一致的风险。 有关连接分配的更多信息,请参见[部署变式](https://galeracluster.com/library/documentation/deployment-variants.html)。 ## 如何备份数据库? 在Galera群集中进行数据库备份非常容易。一种简单的方法是从群集中删除一个节点,而无需关闭mysqld守护程序。从那里,您可以mysqldump用来进行逻辑备份,或者您喜欢的任何备份软件。它对群集的整体性能几乎没有影响。完成后,只需将节点重新连接到集群即可。其他节点将迅速提供与集群异步所需的功能。有关mysqldump与Galera一起使用的更多信息,请参见[mysqldump](https://galeracluster.com/library/documentation/mysqldump.html)。 但是,这种简单备份方法的问题在于它缺少[全局事务ID](https://galeracluster.com/library/documentation/glossary.html#term-global-transaction-id)(GTID)。您可以使用这种备份来恢复数据,但是它们不足以将节点恢复到定义良好的状态。另外,某些备份过程可能会在备份期间阻止群集操作。 将GTID包含在备份中需要使用不同的方法。为此,您可以通过状态快照传输机制调用备份。有关此方法的更多信息,请参见[备份群集数据](https://galeracluster.com/library/documentation/backup-cluster.html)。 ## GCache是二进制日志吗? [Write-set Cache](https://galeracluster.com/library/documentation/glossary.html#term-write-set-cache),也叫GCache,是用于写集的内存分配器。 其主要目的是最大程度地减少RAM中的写集占用空间。 它不是事件日志,而是缓存。 - GCache不是持久性的。 - 并非GCache中的每个条目都是写集。 - 并非将提交GCache中的每个写集。 - GCache中的写集未按提交顺序分配。 - 写集不是binlog的最佳条目,因为它们包含额外的信息。 但是,可以从写集缓存中构造出二进制日志。 ## 应该使用Galera启用二进制日志binlog吗? 标准MySQL复制使用二进制日志进行复制。但是,Galera不使用二进制日志。 但是,在某些情况下,您可能希望使用时间点恢复方法来还原自上次备份以来的表或数据。 您可能还希望使用标准MySQL复制将异步从属服务器附加到您的节点之一,并将其设置为延迟复制。这也有助于恢复自上次备份以来丢失的表和数据。 ## 通常是什么导致集群停止? 尽管这种情况并不经常发生,但是有几个原因会导致Galera集群崩溃。以下是它们的列表,按原因类型分组: 1. 物理服务器及相关原因 - 节点的磁盘空间不足; - 操作系统正在交换或具有较高的I / O等待 - 存储引擎原因 2. InnoDB存储引擎崩溃; - 使用仍在实验中的MyISAM表; - 创建或删除没有主键的表 - 配置问题 3. MySQL配置文件中对参数的不兼容更改; - 将binlog_format设置为仅MIXED,而不是ROW。仅支持ROW格式。 4. Galera自身原因 - 写入相同的行集时,在重负载期间过多的死锁; - 主要组成部分缺失。 - 群集超出法定人数; - Galera软件的错误 ## 局限性是什么? 当对数据库使用MySQL或MariaDB时,Galera集群是一个出色的复制系统。但是,它确实有一些限制,您可能需要在迁移到该限制之前知道这些限制。 - 它只能在Linux和类似Unix的操作系统上运行。没有Windows版本。在数据库服务器中,除了使用MyISAM的系统表以外,仅允许使用InnoDB表。之所以使用InnoDB,是因为它是出色的事务存储引擎。所有表都必须具有显式主键,即单列索引或多列索引。 - 由于数据一致性,Galera支持任意策略的负载均衡,但他就是不自带。官方推荐MaxScale. - DDL事务阻塞,比如alter table时,如果遇到大表因为重做索引等关系本来很慢,而Galera全局事务是顺序执行的,所以会造成阻塞。解决方案,将集群模式改为滚动升级,之后再改回来 - 木桶效应。Galera集群的性能取决于最慢的节点 有关限制的更多详细信息,请参见[与独立MySQL服务器的区别](https://galeracluster.com/library/training/tutorials/differences.html)。 ## 最慢的节点会影响其他节点的性能吗? 与Galera Cluster复制集成在一起,集群将等待集群中的所有节点返回认证测试的状态,然后再提交事务或将它们回滚。因此,一个被流量淹没的节点将延迟该节点对集群的答复,并延迟其他节点等待其报告的时间。 为了缓解此问题,您将确保所有服务器在物理上都是相同的(即,RAM的数量,网络接口的类型),或者至少具有相同数量的可用资源。您还可以使用负载均衡器(例如MariaDB MaxScale,ProxySQL)来确保一个节点不会因通信量而过载。 ## 做了哪些优化? 组复制 通常InnoDB会在每个事务完成后将更改刷新到redo log和binlog,磁盘操作会降低性能。Galera数据库在检测有多个事务同时提交时,会将其视为同一组,并通过commit监视器去重新排序,执行完后一次性刷到log文件中 并行Slave复制 传统的异步复制一般只开一个线程去拉取数据。而Galera允许多个线程拉取。其前提是innodb_autoinc_lock_mode=2,也就是自增id设置为交错锁定。一般来将,这个值在其余集群会设置成1,防止数据间id不一致,但显然galera集群不需要,反而能提升效率 原文档:https://galeracluster.com/library/faq.html
寒烟濡雨
2024年2月18日 15:23
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码