MySQL数据库的高可用性分析
MySQL数据库的⾼可⽤性分析
MySQL数据库是⽬前开源应⽤最⼤的关系型数据库,有海量的应⽤将数据存储在MySQL数据库中。存储数据的安全性和可靠性是⽣产数据库的关注重点。本⽂分析了⽬前采⽤较多的保障MySQL可⽤性⽅案。
MySQL Replication
MySQL Replication是MySQL官⽅提供的主从同步⽅案,⽤于将⼀个MySQL实例的数据,同步到另⼀个实例中。Replication为保证数据安全做了重要的保证,也是现在运⽤最⼴的MySQL容灾⽅案。Replication⽤两个或以上的实例搭建了MySQL主从复制集,提供单点写⼊,多点读取的服务,实现了读的scale out。
图1. MySQL Replication主从复制集
如图⼀所⽰,⼀个主实例(M),三个从实例(S),通过replication,Master⽣成event的binlog,然后发给slave,Slave将event写⼊relaylog,然后将其提交到⾃⾝数据库中,实现主从数据同步。对于数据库之上的业务层来说,基于MySQL的主从复制集,单点写⼊Master,在event同步到Slave后,读逻辑可以从任何⼀个Slave读取数据,以读写分离的⽅式,⼤⼤降低Master的运⾏负载,同时提升了Slave的资源利⽤。
对于⾼可⽤来说,MySQL Replication有个重要的缺陷:数据复制的时延。在通常情况下,MySQL Replication数据复制是异步的,即是MySQL写binlog后,发送给Slave并不等待Slave返回确认收到,本地事务就提交了。⼀旦出现⽹络延迟或中断,数据延迟发送到Slave侧,主从数据就会出现不⼀致。在这个阶段中,Master⼀旦宕机,未发送到Slave的数据就丢失了,⽆法做到数据的⾼可⽤。
为了解决这个问题,google提供了解决⽅案:半同步和同步复制。在数据异步复制的基础之上,做了⼀点修改。半同步复制是Master等待event写⼊Slave的relay后,再提交本地,保证Slave⼀定收到了需要同步的数据。同步复制不不仅是要求Slave收到数据,还要求Slave将数据commit到数据库中,从⽽保证每次的数据写⼊,主从数据都是⼀致的。
基于半同步和同步复制,MySQL Replication的⾼可⽤得到了质的提升,特别是同步复制。基于同步复制的MySQL Replication集,每个实例读取的数据都是⼀致的,不会存在Slave幻读。同时,Master宕机后,应⽤程序切换到任何⼀个Slave都可以保证读写数据的⼀致性。但是,同步复制带来了重⼤的性能下降,这⾥需要做⼀个折衷。另外,MySQL Replication的主从切换需要⼈⼯介⼊判断,同时需要Slave的replaylog提交完毕,故障恢复时间会⽐较长。
云南旅游注意事项MySQL Fabric
MySQL Fabric是MySQL社区提供的管理多个MySQL服务的扩展。⾼可⽤是它设计的主要特性之⼀。
Fabric将两个及以上的MySQL实例划分为⼀个HA Group。其中的⼀个是主,其余的都是从。HA Group保证访问指定HA Group的数据总是可⽤的。其基础的数据复制是基于MySQL Replication,然后,Fabric提供了更多的特性:
没有父亲的父亲节怎么发朋友圈失效检测和恢复:Fabric监控HA Group中的主实例,⼀旦发现主实例失效,Fabric会从HA Group中剩余的从实例中选择⼀个,并将其提升为主实例。
读写均衡:Fabric可以⾃动的处理⼀个HA Group的读写操作,将写操作发送给主实例,⽽读请求在多个从实例之间做负载均衡。
图2. Fabric
MHA
好看的言情小说完本推荐
MHA(MySQL-master-ha)是⽬前⼴泛使⽤的MySQL主从复制的⾼可⽤⽅案。MHA设计⽬标是⾃动实现主实例宕机后,从机切换为主,并尽量降低切换时延(通常在10-30s内切换完成)。同时,由MHA保证在切换过程中的数据⼀致性。MHA对MySQL的主从复制集⾮常友好,没有对集做任何侵⼊性的修改。
MHA的⼀个重点特性是:在主实例宕机后,MHA可以⾃动的判断主从复制集中哪个从实例的relaylo
g是最新的,并将最新从实例的差异log“应⽤”到其余的从实例中,从⽽保证每个实例的数据⼀致。通常情况下,MHA需要10s左右检测主实例异常,并将主实例关闭从⽽避免脑裂。然后再⽤10s左右将差异的log event同步,并启⽤新的Master。整个MHA的RTO时间⼤约在30s。
MySQL Cluster
MySQL Cluster是⼀个⾼度可扩展的,兼容ACID事务的实时数据库,基于分布式架构不存在单点故障,MySQL Cluster⽀持⾃动⽔平扩容,并能做⾃动的读写负载均衡。
MySQL Cluster使⽤了⼀个叫NDB的内存存储引擎来整合多个MySQL实例,提供⼀个统⼀的服务集。如图三所⽰。
图3. MySQL Cluster组成
MySQL Cluster由SQL Nodes,DataNodes,和NDB Management Server组成。SQL Nodes是应⽤程序的接⼝,像普通的mysqld服务⼀
样,接受⽤户的SQL输⼊,执⾏并返回结果。Data Nodes是数据存储节点,NDB Management Server⽤来管理集中的每个node。MySQL Cluster采⽤了新的数据分⽚和容错的⽅式来实现数据安全和⾼可⽤。其由Partition,Replica,Data Node,Node Group构成。Partition:NDB⼀张表的⼀个
数据分⽚,包含⼀张表的⼀部分数据。
Replica:⼀个Partition的拷贝。⼀个Partition可以有⼀个或多个Replica,⼀个Partition的所有Replica数据都是⼀致的。
Data Node:Replica的存储载体,每个Node存储⼀个或多个Replica。
Node Group:⼀个Data Node的集合。
图4. MySQL Cluster数据⾼可⽤
形容人多的四字成语
看了让人下面滴水的说说文章⼀个MySQL Cluster有4个Node,被分为了两个Grou。Node1和2归属于Group0,Node3和4归属于Group1,。有⼀张表被分为4个Partition,并分别有两个Replica。Partition0和Partition2的两个Replica,分别存储在Node1和Node2上,Pratition1和Partition3的两个Replica分别存在Node3和Node4上。这样,对于⼀张表的⼀个Partition来说,在整个集有两份数据,并分布在两个独⽴的Node上,实现了数据容灾。同时,每次对⼀个Partition的写操作,都会在两个Replica上呈现,如果Primary Replica异常,那么Backup Replica可以⽴即提供服务,实现数据的⾼可⽤。
⼩结
超大文件传输
本⽂分析了⽬前MySQL使⽤较多的⼏种MySQL数据复制和⾼可⽤⽅案,从使⽤来看,MySQL Replication是使⽤最为⼴泛的数据复制⽅案,因为是MySQL原⽣⽀持,针对其在不同场景下的⼀些缺陷,衍⽣出了半同步复制,强同步复制等数据⾼可⽤的⽅案。
在此基础之上,为了运维⽅便,MySQL Fabric和MHA应运⽽⽣,从不同的⽅向解决了主从切换时数据⼀致性问题和流程⾃动化的问题。此外,随着分布式系统架构和⽅案的逐步成熟。MySQL Cluster设计了全新的分布式架构,采⽤多副本,Sharding等特性,⽀持⽔平扩展,做到了5个9的数据库服务质量保证。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。