VC中文网-VC-MFC编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 458|回复: 5
打印 上一主题 下一主题

Galera Cluster—MySQL新型的高并发集群架构

[复制链接]

16

主题

42

帖子

43

金币

连长

Rank: 7Rank: 7Rank: 7

积分
129

新兵社区QQ达人

跳转到指定楼层
楼主
发表于 2018-11-29 01:01:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一丶 何谓Galera Cluster

何谓Galera Cluster?就是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,别离是Percona Xtradb Cluster及MariaDB Cluster,都是基于Galera的,所以这里都统称为Galera Cluster了,因为Galera自己是具有多主特性的,所以Galera Cluster也就是multi-master的集群架构,如图1所示:

Galera Cluster架构


上图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不合,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。

一般的使用体例是,在这个集群上面,再搭建一个中间层,这个中间层的功能包含建立连接、管理连接池,负责使三个实例的负载基本平衡,负责在客户端与实例的连接断开之后重连,也可以负责读写分手(在机器性能不合的情况下可以做这样的优化)等等,使用这个中间层之后,由于这三个实例的架构在客户端方面是透明的,客户端只需要指定这个集群的数据源地址,连接到中间层即可,中间层会负责客户端与办事器实例连接的传递工作,由于这个架构支持多点写入,所以完全避免了主从复制经常呈现的数据不一致的问题,从而可以做到主从读写切换的高度优雅,在不影响用户的情况下,离线维护等工作,MySQL的高可用,从此开始,很是完美。

二丶为什么需要Galera Cluster

MySQL在互联网时代,可谓是深受世人瞩目的。给社会创作发现了无限价值,随之而来的是,在MySQL基础之上,产生了形形色色的使用体例、架构及周边产品。本文所关注的是架构,在这方面,已经有很多成熟的被人熟知的产品,好比MHA、MMM等传统组织架构,而这些架构是每个需要数据库高可用办事方案的入门必备选型。

不幸的是,传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不克不及完全包管数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性,但也执偾在降低数据不一致性的可能性罢了。所以现在就急需一种新型架构,从根本上解决这样的问题,天生的解脱失落主从复制模式这样的“美中不足”之处了。

幸运的是,MySQL的福音来了,Galera Cluster就是我们需要的——从此变得完美的架构。

相比传统的主从复制架构,Galera Cluster解决的最核心问题是,在三个实例(节点)之间,它们的关系是对等的,multi-master架构的,在多节点同时写入的时候,能够包管整个集群数据的一致性,完整性与正确性。

三丶 Galera Cluster如何解决问题

Galera的引入

现在已经知道,Galera Cluster是MySQL封装了具有高一致性,支持多点写入的同步通信模块Galera而做的,它是建立在MySQL同步基础之上的,使用Galera Cluster时,应用程序可以直接读、写某个节点的最新数据,并且可以在不影响应用程序读写的情况下,下线某个节点,因为支持多点写入,使得Failover变得很是简单。

所有的Galera Cluster,都是对Galera所提供的接口API做了封装,这些API为上层提供了丰富的状态信息及回调函数,通过这些回调函数,做到了真正的多主集群,多点写入及同步复制,这些API被称作是Write-Set Replication API,简称为wsrep API。

通过这些API,Galera Cluster提供了基于验证的复制,是一种乐观的同步复制机制,一个将要被复制的事务(称为写集),不但包含被修改的数据库行,还包含了这个事务产生的所有Binlog,每一个节点在复制事务时,城市拿这些写集与正在APPLY队列的写集做比对,如果没有冲突的话,这个事务就可以继续提交,或者是APPLY,这个时候,这个事务就被认为是提交了,然后在数据库层面,还需要继续做事务上的提交操作。

这种体例的复制,也被称为是虚拟同步复制,实际上是一种逻辑上的同步,因为每个节点的写入和提交操作还是自力的,更准确的说是异步的,Galera Cluster是建立在一种乐观复制的基础上的,假设集群中的每个节点都是同步的,那么加上在写入时,城市做验证,那么理论上是不会呈现不一致的,固然也不克不及这么乐观,如果呈现不一致了,好比主库(相对)插入成功,而从库则呈现主键冲突,那说明此时数据库已经不一致,这种时候Galera Cluster采纳的体例是将呈现不一致数据的节点踢出集群,其实是自己shutdown了。

而通过使用Galera,它在里面通过判断键值的冲突体例实现了真正意义上的multi-master,Galera Cluster在MySQL生态中,在高可用方面实现了很是重要的提升,目前Galera Cluster具备的功能包含如下几个方面:

    多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的。

    同步复制:集群不合节点之间数据同步,没有延迟,在数据库挂失落之后,数据不会丢失。

    并发复制:从节点在APPLY数据时,支持并行执行,有更好的性能表示。

    故障切换:在呈现数据库故障时,因为支持多点写入,切的很是容易。

    热插拔:在办事期间,如果数据库挂了,只要监控程序发现的够快,不成办事时间就会很是少。在节点故障期间,节点自己对集群的影响很是小。

    自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变成一致。

    对应用透明:集群的维护,对应用程序是透明的,几乎感触感染不到。 以上几点,足以说明Galera Cluster是一个既稳健,又在数据一致性、完整性及高性能方面有超卓表示的高可用解决方案。

Galera Cluster的并发控制

Galera Cluster可以实现集群中,数据的高度一致性,并且在每个节点上,生成的Binlog顺序都是一样的,这与Galera内部,实现的并发控制机制是分不开的。所有的上层到下层的同步、复制、执行、提交都是通过并发控制机制来管理的。这样才能包管上层的逻辑性,下层数据的完整性等。

galera原理图


从图中可以大体看出,从事务执行开始,到本地执行,再到写集发送,再到写集验证,再到写集提交的整个过程,以及从节点(相对)收到写集之后,所做的写集验证、写集APPLY及写集提交操作,通过对比这个图,可以很好的理解每一个阶段的意义及性能等。

四丶 流量控制

在PXC中,有一个参数叫fc_limit,它的全名其实是叫flow control limit,顾名思义,是流量控制巨细限制的意思,它的作用是什么呢?

如果一套集群中,某个节点,或者某几个节点的硬件资源比较差,或者由于节点压力大,致使复制效率低下,等等各种原因,致使的结果是,从节点APPLY时,很是慢,也就是说,主库在一秒钟之内做的操作,从库有可能会用2秒才能完成,那么这种情况下,就会致使从节点执行任务的聚积,接收队列的聚积。

假设从节点真的聚积了,那么Galera会让它一直聚积下去么?这样延迟会越来越严重,这样Galera Cluster就酿成一个主从架构的集群了,已经失去了强一致状态的属性了,那么很明显,Galera是不会让这种事情产生的,那么此时,就说回到开头提到的参数了,gcs.fc_limit,这个参数是在MySQL参数wsrep_provider_options中来配置的,这个参数是Galera的一个参数集合,有关于Flow Control的,还包含gcs.fc_factor,这两个参数的意义是,当从节点聚积的事务数量跨越gcs.fc_limit的值时,从节点就倡议一个Flow Control,而当从节点聚积的事务数小于gcs.fc_limit * gcs.fc_factor时,倡议Flow Control的从节点再倡议一个解除的消息,让整个集群再恢复。

但我们一般所关心的,就是如何解决,下面有几个一般所采取的体例:

    发送FC消息的节点,硬件有可能呈现问题了,好比IO写不进去,很慢,CPU异常高档

    发送FC消息的节点,自己数据库压力太高,好比当前节点承载太多的读,致使机器Load高,IO压力大等等。

    发送FC消息的节点,硬件压力都没有太大问题,但做得比较慢,一般原因是主库并发高,但从节点的并发跟不上主库,那么此时可能需要观察这两个节点的并发度巨细,可以参考状态参数wsrep_cert_deps_distance的值,来调剂从节点的wsrep_slave_threads,此时应该是可以解决或者缓解的,这个问题可以这样去理解,假设集群每个节点的硬件资源都是相当的,那么主库可以执行完,从库为什么做不过来?那么一般思路就是像措置主从复制的延迟问题一样。

    检查存不存在没有主键的表,因为Galera的复制是行模式的,所以如果存在这样的表时,主节点是通过语句来修改的,好比一个更新语句,更新了全表,而从节点收到之后,就会针对每一行的Binlog做一次全表扫描,这样致使这个事务在从节点执行,比在主节点执行慢十倍,或者百倍,从而致使从节点聚积进而产生FC。

五丶适用场景

现在对Galera Cluster已经有了足够了解,但这样的“完美”架构,在什么场景下才可以使用呢?或者说,哪种场景又不适合使用这样的架构呢?针对它的缺点,及优点,我们可以扬其长,避其短。可以通过下面几个方面,来了解其适用场景。

    数据强一致性:因为Galera Cluster,可以包管数据强一致性的,所以它更适合应用于对数据一致性和完整性要求特别高的场景,好比交易,正是因为这个特性,我们去哪儿网才会成为使用Galera Cluster的第一大户。

    多点写入:这里要强调多点写入的意思,不是要支持以多点写入的体例提供办事,更重要的是,因为有了多点写入,才会使得在DBA正常维护数据库集群的时候,才会不影响到业务,做到真正的无感知,因为只要是主从复制,就不克不及呈现多点写入,从而致使了在切换时,必定要将老节点的连接断失落,然后齐刷刷的切到新节点,这是没体例避免的,而支持了多点写入,在切换时刻允许有短暂的多点写入,从而不会影响老的连接,只需要将新连接都路由到新节点即可。这个特性,对交易型的业务而言,也是很是渴求的。

    性能:Galera Cluster,能支持到强一致性,毫无疑问,也是以牺牲性能为价格,争取了数据一致性,但要问:”性能牺牲了,会不会致使性能太差,这样的架构根本不克不及满足需求呢?”这里只想说的是,这是一个权衡过程,有几多业务,QPS大到Galera Cluster不克不及满足的?我想是不多的(固然也是有的,可以自行做一些测试),在追求很是高的极致性能情况下,也许单个的Galera Cluster集群是不克不及满足需求的,但究竟结果是少数了,所以够用就好,Galera Cluster必定是MySQL方案中的佼佼者。

总结

到这里,Galera Cluster—MySQL新型的高并发集群架构就结束了,,不足之处还望巨匠多多包涵!!觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持。(吹一波,233~~)

下面和巨匠交流几点编程的经验:

1、多写多敲代码,好的代码与扎实的基础知识一定是实践出来的

2丶 测试、测试再测试,如果你不完全测试自己的代码,那恐怕你开发的就不只是代码,可能还会声名狼藉。

3丶 简化算法,代码如恶魔,在你完成编码后,应回头并且优化它。从久远来看,这里或那里一些的改进,会让后来的支持人员更加轻松。

4、可以去腾讯课堂的图灵学院学习一下java架构拭魅战案例,还挺不错的。

最后,每一位读到这里的网友,感激你们能耐心地看完。希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步。

内部交流群469717771 欢迎各位前来交流和分享, 验证:(009)必过!!


更多内容回复查看:
游客,如果您要查看本帖隐藏内容请回复
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

8

主题

37

帖子

19

金币

连长

Rank: 7Rank: 7Rank: 7

积分
102

新兵社区QQ达人

沙发
发表于 2018-11-29 01:01:29 | 只看该作者
关联查询jion如何解决?
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

15

主题

50

帖子

37

金币

连长

Rank: 7Rank: 7Rank: 7

积分
141
板凳
发表于 2018-11-29 01:01:35 | 只看该作者
这玩意解决散布式事物的一致性问题就是将异常节点下线?
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

15

主题

46

帖子

31

金币

连长

Rank: 7Rank: 7Rank: 7

积分
138
地板
发表于 2018-11-29 01:02:18 | 只看该作者
收藏
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

10

主题

48

帖子

27

金币

连长

Rank: 7Rank: 7Rank: 7

积分
120
5#
发表于 2018-11-29 01:03:08 | 只看该作者
转发了
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

11

主题

53

帖子

23

金币

连长

Rank: 7Rank: 7Rank: 7

积分
144
6#
发表于 2018-11-29 01:03:37 | 只看该作者
收藏
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

VC中文网 - 豫ICP备14012807号|小黑屋|联系客服|金币冲值|VC中文网

GMT+8, 2019-11-20 06:32 , Processed in 0.296875 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表
pk10投注技巧分享