当前位置: 首页 > 科技观察

开源数据库MySQL架构分析

时间:2023-03-17 18:15:01 科技观察

数据库是所有应用系统的核心,因此保证数据库的稳定、高效、安全运行是所有企业日常工作中最重要的事情。一旦数据库系统出现问题,无法提供服务,就可能导致整个系统无法继续工作。因此,一个成功的数据库架构也需要在高可用设计方面进行充分的考虑。下面介绍一下如何搭建一个高可用的MySQL数据库系统。做过DBA或者运维的同学应该都知道,任何设备或者服务的单点存在都会带来巨大的风险,因为一旦物理机宕机或者服务模块崩溃,如果短时间内找不到替代品time设备势必会影响到整个应用系统。因此,如何保证不存在单点是我们的重要任务。使用MySQL高可用方案可以很好的解决这个问题。一般有以下几种:1.利用MySQL自带的Replication实现高可用。MySQL自带的Replication就是我们常说的master-slavereplication(AB复制),通过做一个slave机器到master服务器,当master服务器宕机时,业务可以快速切换到slave机器上,从而保证应用程序的正常使用。使用AB复制做高可用的方案也分为几种不同的架构:1、常规MASTER---SLAVE方案普通MASTER---SLAVE是国内大多数中小型公司最常用的架构方案与国外相比,主要优点是简单、所用设备少(成本较低)、维修方便。这种架构可以解决单点问题,也可以在很大程度上解决系统性能问题。可以在一个MASTER后面带一个或多个SLAVE(主从级联复制),但是这种架构要求一个MASTER必须能够满足系统所有的写请求,否则需要做水平拆分分担压力阅读。Figure1Figure2图1到图2展示了解决单点问题和使用读写分离提高性能的过程。2、DUALMASTER与级联复制相结合,是在上述方案的基础上推导出来的更合理的方案。这种方案的好处是,当两台主服务器中的任何一台挂掉时,整个架构不需要做很大的调整。图3图4图5这个过程如上图所示。但是图5的情况比较特殊,就是MASTER-B挂了怎么办?首先我们可以确定我们所有的Write请求都不会受到任何影响,所有的Read请求也可以正常访问;但是所有Slave的复制都会被打断,Slave上的数据会开始滞后。此时我们需要做的是对所有的Slave进行CHANGEMASTERTO操作,改为从MasterA上copy过来。由于不可能所有的Slave复制都领先于原始数据源,所以可以通过对比Slave上的RelayLog中的时间戳信息和MasterA中的时间戳信息来找到准确的复制起点,从而避免数据丢失腐败。丢失的。2、使用MYSQLCLUSTER实现整体高可用。目前,使用MYSQLCLUSTER实现整体高可用的方案(即NDBCLUSTER)在国内公司还不是很流行。NDBCLUSTER节点其实是一个多节点的MySQL服务器,但是它不包含数据,所以任何机器只要安装了它就可以使用。当集群中的某个SQL节点崩溃时,数据不会丢失,因为该节点不存储具体的数据。图6:图63.通过MySQL衍生的高可用在目前MySQL的高可用衍生中,最知名和流行的是GALERACLUSTER和PERCONAXTRDBCLUSTER(PXC)。相关内容本文不再赘述,有兴趣的同学可以查阅相关资料进一步了解。这两个集群的实现方式类似,如图7和图8所示:图7和图84,各种高可用方案的优缺点对比在各种高可用设计方案的介绍中,读者可能已经发现,无论采用哪种方案,都有其独特的优势,但也或多或少存在局限性。本节将对以上主要方案做优劣分析,供大家在选型过程中参考。1、MySQLReplication的优点:部署简单,实施容易,维护不复杂。它是MySQL固有支持的功能。并且主备切换方便,主备切换可以通过第三方软件或者自己写的脚本自动完成。缺点:如果Master主机的硬件出现故障,无法恢复,可能会丢失一些还没有传给Slave的数据。2.MySQLCluster(NDB)的优点:可用性非常高,性能非常好。每条数据在不同主机上至少有一份副本,冗余数据副本实时同步。缺点:维护比较复杂,产品比较新,有一些bug。目前可能不适用于核心在线系统。3.GALERACLUSTER和PERCONAXTRDBCLUSTER(PXC)的优点:可靠性非常高,所有节点可以同时读写每一个数据,不同主机上至少存在一个副本,实时同步冗余数据副本。缺点:随着集群规模的增大,性能会越来越差。4、不得不提的DRBD磁盘网络镜像方案,在架构上和Replication类似,只是使用了第三方软件来实现数据同步。可靠性高于Replication,但也牺牲了性能。优点:软件功能强大,数据在底层块设备级别跨物理主机镜像,可以根据性能和可靠性要求配置不同级别的同步。IO操作保持顺序,可以满足数据库对数据一致性的严格要求。缺点:非分布式文件系统环境不能支持镜像数据同时可见,即性能和可靠性是矛盾的,不能适用于两者都需要的环境。维护成本高于MySQLReplication。说完了各种常用架构的优缺点,接下来就是如何在真实的生产环境中选择合适的架构来使用了。每个人在这方面都有自己的想法和经验,哪种方案最好,见仁见智。日常工作中结构的完善不是一蹴而就的,而是一个不断演进、优化、完善的过程。在数据库方面,个推也经历了从单点到主从再到主从+高可用的过程,也经历了从单一的MySQL+redis到MySQL+redis+es,最后到现在的MySQL+redis+es+codis的进化等等。每一次演进都是为了解决生产环境中的实际问题和痛点。单从MySQL的角度来看,没有一种架构可以解决所有的问题(痛点),需要根据实际情况选择合适的架构。MySQL集群实现的方案非常灵活多变。如何选择合适的架构对于MySQL工作者来说也是一个挑战,也是我们不断学习学习MySQL的动力。