热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL集群方案介绍

mysql集群方案这里介绍2种,PXC和Replication。大型互联网程序用户群体庞大,所以架构设计单节点数据库已经无法满足需求。大家也深有体会&#


  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



推荐阅读
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 2010年下半年软件评测师试题标准答案阅卷用标准答案,更多答案登录http:www.enpass.cn查看,软考培训权威机构由于发博文的限制,有些图片不能发上来,下载完全版答 ... [详细]
author-avatar
单莼de笑脸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有