MySQL 集群方案介绍


  mysql集群方案这里介绍2种,PXC 和 Replication。

大型互联网程序用户群体庞大,所以架构设计单节点数据库已经无法满足需求。大家也深有体会,有一万人在学校网站查成绩或是选课的时候网站时常是访问不了或者相应特别特别慢。这种情况就凸显出来单机单节点上性能的不足。无论你使用什么样的数据库免费的或者付费的单机单节点都是无法承受某个点上面的并发的,另外一方面就是数据库没有做冗余设计。这时候我们就需要做集群和冗余保证数据库的高可用和高性能提升用户体验。


    下面我们先来用一组数据来做数据库单节点压力测试:

 1.使用5000个用户做5000次查询,平均下拉每个用户查询一次。

640?wx_fmt=png

我们看到系统结果显示5000次并发的话执行的时间是 7.671秒,以上5000并发来讲的话数据库发挥还是比较正常的没有出现崩溃宕机。

2.下面我们把5000次并发和查询次数都增大1倍改成10000看看会出现什么情况。

640?wx_fmt=png

640?wx_fmt=png

如上当并发为10000的时候系统提示 没有那么多的连接应对并发的访问,系统拒绝了很多请求。最终执行的结果是48.547秒,这并不是说系统执行了我们所有的请求,它只是执行了一部分用了48秒。那么我们如果在网站上使用单机单节点的部署只要有1000并发访问那么系统马上崩溃!这还仅仅是1000个用户,那么对于搞电商的同学如何来应对运营的秒杀 促销活动?所以对于我们晨光这样的大公司在做数据库设计的时候一定采用集群集群集群这样的方案。

接下来我们介绍一下晨光科力普数据库集群是如何去设计搭建以及如何进化的。

1.PXC方案

640?wx_fmt=png

我们先是采用目前最主流的PXC方案把数据库集群在一起。PXC它最大的特性就是读写强一致并且每个节点都是可以作为读写的入口,这种方案的好处就是我们无论在任何一个节点写入数据那么其他的库肯定会同步到这条数据,绝对绝对不会出现说在A库上面写数据然后B库查不到这种假设。

我们使用 haproxy 负载均衡中间件,当HA接收到一个增删改查的请求时他会把你的sql语句路由分发到不同的PXC节点让他们去分别执行。

那么你以为这样的设计就Ok了?我告诉你这样是远远不够的,我们知道mysql有一个性能瓶颈就是单表数据超过2000W 那么它的性能会急剧下降,所以我们在操作的时候要尽量避免单表存储的数据超过2000W。

那么这时候我们就要涉及到另外一个概念 数据切分所以数据切分我们还是采用同样的PXC集群方案如下图:

640?wx_fmt=png

这里我们使用MyCat做数据切分,MyCat是阿里开源的一个mysql数据切分中间件,支持 离散分片(枚举,程序指定分区,十进制求模,字符串hash,一致hash)和 连续分片(自定义数字范围,按日期分,按单月小时,按自然月分)等mysql数据库分片策略。

这里有个术语叫做分片,例如上图中 集群1是一个分片区 集群2 就是另外一个分片区。

我们在执行一个Insert sql语句的时候mycat就可以根据指定的策略来存储我们的数据,例如按照月份把 1月 3月 5月的数据存储到集群1中 其他月份的存储在集群2中。

采用这种方案我们就避免了mysql单表的性能瓶颈,如果2个集群不够就在加集群,使劲加加ok。纵览全局这样才是一个比较好的mysql集群方案,但是。这样还没有完,PXC集群方案是以牺性能为代价的,所以才保证了数据库的强一致性,所以你的pxc数据库越多性能就会越低,接下来我介绍另外一种集群方案Replication。

2.Replication方案介绍

640?wx_fmt=png

Replication这种方案不会牺牲性能,但是有个问题就是非强一致性,例如你在DB1中写入数据可能会因为网络抖动在DB2中查询不到数据,这时候客户端接收到的状态是已经操作成功。另外有一点是这种集群方案只能在一个节点中做写入操作,因为他的底层同步原理是单向同步的。

这种方案我们也会有mysql单表2000W数据瓶颈,我们也要做数据的切分,这里也会用mycat这个中间件来做数据切分,如下图:

640?wx_fmt=png

 以上2种方案,一种是数据强一致性,一种是非强一致性,强一致性的话可以用来保存一些有价值的数据例如订单,支付等,非强一致性方案可以用来保存用户的操作或者用户行为浏览等数据。一个大型系统中单采用某一种方案是不够的。下面我们演进为2种方案结合使用如下图。

640?wx_fmt=png


我们可以根据不同的业务和数据等级让MyCat来分片决定要把数据落到哪个库上!


3. PXC介绍

640?wx_fmt=png

    PXC 全称 Percona XtraDB Cluster,它是基于mysql自带的一种集群技术 Galera做的改进来实现的一种数据库集群方案,它有一个很明显的特点就是任何节点都是可读写的,都可以被充当主节点来使用的。

并且他是数据强一致性的只要在任何一个节点种写入数据其他的节点种肯定会同步到这条数据的。 


PXC原理:

我们使用UML图来介绍一下PXC的执行过程。

640?wx_fmt=png


这里我们用PXC中3个DB节点来介绍其原理,分别是DB1 DB3 和DB3, 数据的同步使用PXC。

先从clent说起 clent在执行insert del up 的时候,正常db1会给我们返回执行的结果,如果我们不提交事务的话是不能持久化到数据库中的。我们想要真实的持久化就必须要提交事务。这里在提交事务的时候不仅仅要在当前节点里面持久化数据还要在其他节点持久化数据毕竟我们是在pxc环境中操作的。

首先在提交事务的时候,db1会把数据传递给pxc, pxc会复制当前节点的数据 然后分发给DB2 和DB3,分发后要做的就是持久化这些数据。

事务的执行操作在pxc中会生产一个GTID编号,然后由db2 和db3去分别执行这个事务,每个db执行完成后会把结果返回给db1,然后db1收到其他db的执行结果后在本地也执行一下GTID的这个事务db1执行完成后没问题问题的话最终会把执行的结果返回给客户端。

通过这个时序图我们可以知道在pxc中的数据强一致,肯定是所有的数据库中的数据都是一致的。


4: pxc与replication 方案优劣:

   pxc 采用的是同步复制,事务在所有集群中要么全提交要么不提交,保证了数据的一致性。它写入数据速度慢

  replication 采用的是异步复制,无法保证数据的一致性。它写入数据速度快。

这2种方案仅仅是都实现了数据的同步,没有数据切分功能。


5:pxc与replication 方案组合:

   pxc方案存储高价值数据 如:账户 订单 交易数据等。。

   replication 方案存储低价值数据:如 通知 日志 等。。

   用其他的中间件如mycat来切分数据管理集群。



如果你觉得所有收获请多多支持。


640?wx_fmt=png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模板:回文自动机(PAM)

所谓回文自动机,就是关于回文的自动机。 (逃) 前言 小清新自动机。 经历过SAM的大风大浪,这个相比而言好理解多了,感觉也许应该先学这个再学SAM… 解析 和trie、AC自动机、SAM等类似的,PAM的每个结点表…

Gym - 215177C 玩游戏

题意: ljcc和他的学妹在玩游戏,这个游戏共有 n 轮,在第 i 轮获胜会获得 i 分,没有平局。 现在给出ljcc和学妹的得分,求是否有一种方案符合当前得分。 题解: 第i轮得到i分,一共n轮&#xff0…

Zju2112 Dynamic Rankings(树状数组套可持久化权值线段树)

Zju2112 Dynamic Rankingsdescriptionsolutioncodedescription 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i1 ],a[i2]……a[j]中第k小的数是多少(1≤k≤j-i1),并且&…

ML.NET案例详解:在.NET下使用机器学习API实现化学分子式数据格式的判定

半年前写过一篇类似的文章,题目是:《在.NET中使用机器学习API(ML.NET)实现化学分子式数据格式的判定》,在该文中,我介绍了化学分子式数据格式的基本知识,同时给出了一个案例,展示了如…

洛谷P4762: [CERC2014]Virus synthesis(PAM)

解析 自己对PAM的理解不够深刻。 最优方案必然是先选择一个偶回文串,递归构造出它的一半。花一步逆序,然后暴力解决剩下的。 这似乎已经依稀出现了某种dp的思路。 考虑如何更好的转移。设计 transxtrans_xtransx​ 表示长度不超过 xxx 一半的最长回文后…

Triangle HDU - 5914

Triangle HDU - 5914 题意&#xff1a; 有长度分别是1到n的n给木棍&#xff0c;问最少拿走几个木棍&#xff0c;使得剩下木棍无法组成三角形 题解&#xff1a; 组不成三角形的恰巧情况就是ab<c&#xff0c;也就是我们要让剩下的木棍&#xff0c;两者之和等于或小于第三个…

CodeForces - 336A Vasily the Bear and Triangle

CodeForces - 336A Vasily the Bear and Triangle 题意&#xff1a; 给你一个点x&#xff0c;现在这个点和原点组成了矩形&#xff0c;让你在x和y轴分别求一个点&#xff0c;与原点构成的三角形&#xff0c;要求矩形在三角形内&#xff0c;点x在斜边上 题解&#xff1a; 这…

数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf

文章目录[HNOI2012]永无乡Lomsat gelral「POI2011 R2 Day2」旋转树木 Tree RotationsEscape Through Leaf线段树合并与 fhq-treap合并很类似&#xff0c;也是将两个不同根的线段树暴力合并至于时间复杂度&#xff0c;线段树合并一次是可以达到O(n)O(n)O(n)的&#xff0c;但是大…

吉特仓储管理系统--开源2018年源码

应该说今天过完&#xff0c;这个年就算真正意义上的过完了&#xff0c;没有想到的是又是在出差的路上写这样的文章。废话也不多说&#xff0c;写这篇文章主要的目的是想将去年吉特仓储管理系统开发的一个版本源代码开放出来&#xff0c;供各位开发者阅读使用。github 源代码地址…

模板:广义SAM(字符串)

所谓广义SAM&#xff0c;就是更广泛意义下的SAM &#xff08;逃&#xff09; 前言 感觉字符串的理解难度的巅峰还是在SAM&#xff0c;广义SAM只是在套一些特判罢了&#xff0c;并不是太难理解。 可以解决多字符串的子串问题&#xff0c;几乎就是把SAM能做的东西从单串变成了多…

自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]

介绍我很早之前一直在做mvc5 scaffolder的开发功能做的已经非常完善,使用代码对mvc5的项目开发效率确实能成倍的提高,就算是刚进团队的新成员也能很快上手,如果你感兴趣 可以参考 http://neozhu.github.io/MVC5-Scaffolder/#/ https://github.com/neozhu/MVC5-Scaffolder但是m…

QDU-Training-01

QDU-Training-01 题号题目知识点难度CodeForces 76EPoints数论HDU 4608I-number模拟CodeForces 616DLongest k-Good Segment尺取法Gym 215177C玩游戏思维题HDU 5914Triangle构造题CodeForces 336AVasily the Bear and Triangle思维题 同时纪念我第700篇文章&#xff0c;我还是…

CF1131 G. Most Dangerous Shark (单调栈优化dp)

文章目录problemsolutioncodeproblem solution dpi:dp_i:dpi​: 前iii个多米诺骨牌全都倒下的最小花费 li,ril_i,r_ili​,ri​分别表示第iii个多米诺骨牌倒下时所能波及到的最左/右位置 往左倒&#xff0c;则[li,i)[l_i,i)[li​,i)内的牌都可以选择性地先推倒 dpimin⁡{dpjcos…

洛谷P1650:田忌赛马(贪心)

解析 其实并不简单的一道题。 是刘汝佳老师的例题&#xff0c;搜到之后按照讲的策略写了一发。 &#xff08;由于这个策略并不完全正确&#xff0c;就不展开讲了&#xff09; 好啊&#xff01; 可是感觉讲的策略特别对&#xff0c;为什么呢&#xff1f; 原因在于&#xff0…

CF407 E. k-d-sequence

文章目录problemsolutioncodeproblem solution 特判d0d0d0&#xff0c;相当于寻找最长的一段数字相同的区间 如果要满足公差为ddd等差序列 区间内每个数在模ddd意义下同余每个数互不相同 算法流程 先将序列分成若干个同余mmm的子区间 从左往右扫一遍 对于同余的子区间&…

Monkey and Banana HDU - 1069

Monkey and Banana HDU - 1069 题意&#xff1a; 有n种类型的砖块&#xff0c;每种类型的砖块都有无限个。第i块砖块的长宽高分别用xi&#xff0c;yi&#xff0c;zi来表示。 同时&#xff0c;由于砖块是可以旋转的&#xff0c;每个砖块的3条边可以组成6种不同的长宽高。 在构…

EFCore Lazy Loading + Inheritance = 干净的数据表 (二)

前言本篇是上一篇EFCore Lazy Loading Inheritance 干净的数据表 &#xff08;一&#xff09; 【献给处女座的DB First程序猿】 前菜 的续篇。这一篇才是真的为处女座的DB First程序猿准备的正餐。继续上一篇的话题&#xff0c;我们希望用EFCore&#xff0c;且继续使用与逻辑…

洛谷P7361:拜神(SA、二分、主席树、启发式合并)

解析 很好的一道SA的题。&#xff08;觉得完全可以评黑了啊qwq&#xff09; 我一开始拿SAM和线段树硬做&#xff0c;不断修正最后发现自己无法在可接受复杂度内解决的问题&#xff0c;直接GG… 垃圾数据还骗到了50分 所以写一道题之前还是要先想仔细了&#xff0c;确定整个流程…

Doing Homework HDU - 1074

Doing Homework HDU - 1074 题意&#xff1a; 有n个任务&#xff0c;每个任务有一个截止时间&#xff0c;超过截止时间一天&#xff0c;要扣一个分。 求如何安排任务&#xff0c;使得扣的分数最少。 (1<n<15) 题解&#xff1a; n很小&#xff0c;可以往状压dp方向去想…

【学习笔记】浅谈广义矩阵乘法——动态DP

文章目录广义矩阵乘法动态DP例题&#xff1a;洛谷4719以下内容是本人做题经验&#xff0c;如有雷同&#xff0c;纯属抄袭&#xff1b;如有不对&#xff0c;纯属不懂&#xff0c;还请指正 广义矩阵乘法 众所周知&#xff0c;矩阵满足乘法交换律&#xff0c;前一个矩阵的列必须…