多图文,详细介绍mysql各个集群方案

多图文,详细介绍mysql各个集群方案

集群的好处mysql

  • 高可用性:故障检测及迁移,多节点备份。
  • 可伸缩性:新增数据库节点便利,方便扩容。
  • 负载均衡:切换某服务访问某节点,分摊单个节点的数据库压力。

集群要考虑的风险linux

  • 网络分裂:群集还可能因为网络故障而拆分为多个部分,每部份内的节点相互链接,但各部分之间的节点失去链接。
  • 脑裂:致使数据库节点彼此独立运行的集群故障称为“脑裂”。这种状况可能致使数据不一致,而且没法修复,例如当两个数据库节点独立更新同一表上的同一行时。

@算法

一,mysql原厂出品

1,MySQL Replication

mysql复制(MySQL Replication),是mysql自带的功能。sql

原理简介:数据库

主从复制是经过重放binlog实现主库数据的异步复制。即当主库执行了一条sql命令,那么在从库一样的执行一遍,从而达到主从复制的效果。在这个过程当中,master对数据的写操做记入二进制日志文件中(binlog),生成一个 log dump 线程,用来给从库的 i/o线程传binlog。而从库的i/o线程去请求主库的binlog,并将获得的binlog日志写到中继日志(relaylog)中,从库的sql线程,会读取relaylog文件中的日志,并解析成具体操做,经过主从的操做一致,而达到最终数据一致。api

MySQL Replication_lgx211

MySQL Replication一主多从的结构,主要目的是实现数据的多点备份(没有故障自动转移和负载均衡)。相比于单个的mysql,一主多从下的优点以下:服务器

  • 若是让后台读操做链接从数据库,让写操做链接主数据库,能起到读写分离的做用,这个时候多个从数据库能够作负载均衡。
  • 能够在某个从数据库中暂时中断复制进程,来备份数据,从而不影响主数据的对外服务(若是在master上执行backup,须要让master处于readonly状态,这也意味这全部的write请求须要阻塞)。

就各个集群方案来讲,其优点为:网络

  • 主从复制是mysql自带的,无需借助第三方。
  • 数据被删除,能够从binlog日志中恢复。
  • 配置较为简单方便。

其劣势为:架构

  • 从库要从binlog获取数据并重放,这确定与主库写入数据存在时间延迟,所以从库的数据老是要滞后主库。
  • 对主库与从库之间的网络延迟要求较高,若网络延迟过高,将加剧上述的滞后,形成最终数据的不一致。
  • 单一的主节点挂了,将不能对外提供写服务。
2,MySQL Fabirc

mysql织物(MySQL Fabirc),是mysql官方提供的。

这是在MySQL Replication的基础上,增长了故障检测与转移,自动数据分片功能。不过依旧是一主多从的结构,MySQL Fabirc只有一个主节点,区别是当该主节点挂了之后,会从从节点中选择一个来当主节点。

就各个集群方案来讲,其优点为:

  • mysql官方提供的工具,无需第三方插件。
  • 数据被删除,能够从binlog日志中恢复。
  • 主节点挂了之后,可以自动从从节点中选择一个来当主节点,不影响持续对外提供写服务。

其劣势为:

  • 从库要从binlog获取数据并重放,这确定与主库写入数据存在时间延迟,所以从库的数据老是要滞后主库。
  • 对主库与从库之间的网络延迟要求较高,若网络延迟过高,将加剧上述的滞后,形成最终数据的不一致。
  • 2014年5月推出的产品,数据库资历较浅,应用案例很少,网上各类资料相对较少。
  • 事务及查询只支持在同一个分片内,事务中更新的数据不能跨分片,查询语句返回的数据也不能跨分片。
  • 节点故障恢复30秒或更长(采用InnoDB存储引擎的都这样)。
3,MySQL Cluster

mysql集群(MySQL Cluster)也是mysql官方提供的。

MySQL Cluster是多主多从结构的

就各个集群方案来讲,其优点为:

  • mysql官方提供的工具,无需第三方插件。
  • 高可用性优秀,99.999%的可用性,能够自动切分数据,能跨节点冗余数据(其数据集并非存储某个特定的MySQL实例上,而是被分布在多个Data Nodes中,即一个table的数据可能被分散在多个物理节点上,任何数据都会在多个Data Nodes上冗余备份。任何一个数据变动操做,都将在一组Data Nodes上同步,以保证数据的一致性)。
  • 可伸缩性优秀,能自动切分数据,方便数据库的水平拓展。
  • 负载均衡优秀,可同时用于读操做、写操做都都密集的应用,也可使用SQL和NOSQL接口访问数据。
  • 多个主节点,没有单点故障的问题,节点故障恢复一般小于1秒。

其劣势为:

  • 架构模式和原理很复杂。
  • 只能使用存储引擎 NDB ,与日常使用的InnoDB 有不少明显的差距。好比在事务(其事务隔离级别只支持Read Committed,即一个事务在提交前,查询不到在事务内所作的修改),外键(虽然最新的NDB 存储引擎已经支持外键,但性能有问题,由于外键所关联的记录可能在别的分片节点),表限制上的不一样,可能会致使平常开发出现意外。点击查看具体差距比较
  • 做为分布式的数据库系统,各个节点之间存在大量的数据通信,好比全部访问都是须要通过超过一个节点(至少有一个 SQL Node和一个 NDB Node)才能完成,所以对节点之间的内部互联网络带宽要求高。
  • Data Node数据会被尽可能放在内存中,对内存要求大,并且重启的时候,数据节点将数据load到内存须要很长时间。

官方的三兄弟的区别对好比下图所示;

官方三兄弟对比图_lgx211

二,mysql第三方优化

4,MMM

MMM是在MySQL Replication的基础上,对其进行优化。

MMM(Master Replication Manager for MySQL)是双主多从结构,这是Google的开源项目,使用Perl语言来对MySQL Replication作扩展,提供一套支持双主故障切换和双主平常管理的脚本程序,主要用来监控mysql主主复制并作失败转移。

MMM_lgx211
注意:这里的双主节点,虽然叫作双主复制,可是业务上同一时刻只容许对一个主进行写入,另外一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热。

就各个集群方案来讲,其优点为:

  • 自动的主主Failover切换,通常3s之内切换备机。
  • 多个从节点读的负载均衡。

其劣势为:

  • 没法彻底保证数据的一致性。如主1挂了,MMM monitor已经切换到主2上来了,而若此时双主复制中,主2数据落后于主1(即还未彻底复制完毕),那么此时的主2已经成为主节点,对外提供写服务,从而致使数据不一。
  • 因为是使用虚拟IP浮动技术,相似Keepalived,故RIP(真实IP)要和VIP(虚拟IP)在同一网段。若是是在不一样网段也能够,须要用到虚拟路由技术。可是绝对要在同一个IDC机房,不可跨IDC机房组建集群。
5,MHA

MHA是在MySQL Replication的基础上,对其进行优化。

MHA(Master High Availability)是多主多从结构,这是日本DeNA公司的youshimaton开发,主要提供更多的主节点,可是缺乏VIP(虚拟IP),须要配合keepalived等一块儿使用。

要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另一台充当从库。

MHA_lgx211

就各个集群方案来讲,其优点为:

  • 能够进行故障的自动检测和转移
  • 具有自动数据补偿能力,在主库异常崩溃时可以最大程度的保证数据的一致性。

其劣势为:

  • MHA架构实现读写分离,最佳实践是在应用开发设计时提早规划读写分离事宜,在使用时设置两个链接池,即读链接池与写链接池,也能够选择折中方案即引入SQL Proxy。但不管如何都须要改动代码;

  • 关于读负载均衡可使用F五、LVS、HAPROXY或者SQL Proxy等工具,只要能实现负载均衡、故障检查及备升级为主后的读写剥离功能便可,建议使用LVS

6,Galera Cluster

Galera Cluster是由Codership开发的MySQL多主结构集群,这些主节点互为其它节点的从节点。不一样于MySQL原生的主从异步复制,Galera采用的是多主同步复制,并针对同步复制过程当中,会大几率出现的事务冲突和死锁进行优化,就是复制不基于官方binlog而是Galera复制插件,重写了wsrep api。

异步复制中,主库将数据更新传播给从库后当即提交事务,而不论从库是否成功读取或重放数据变化。这种状况下,在主库事务提交后的短期内,主从库数据并不一致。

同步复制时,主库的单个更新事务须要在全部从库上同步 更新。换句话说,当主库提交事务时,集群中全部节点的数据保持一致。

对于读操做,从每一个节点读取到的数据都是相同的。对于写操做,当数据写入某一节点后,集群会将其同步到其它节点。

MHA_lgx211

就各个集群方案来讲,其优点为:

  • 多主多活下,可对任一节点进行读写操做,就算某个节点挂了,也不影响其它的节点的读写,都不须要作故障切换操做,也不会中断整个集群对外提供的服务。
  • 拓展性优秀,新增节点会自动拉取在线节点的数据(当有新节点加入时,集群会选择出一个Donor Node为新节点提供数据),最终集群全部节点数据一致,而不须要手动备份恢复。

其劣势为:

  • 能作到数据的强一致性,毫无疑问,也是以牺牲性能为代价。

三,依托硬件配合

不一样主机的数据同步再也不依赖于MySQL的原生复制功能,而是经过同步磁盘数据,来保证数据的一致性。

而后处理故障的方式是借助Heartbeat,它监控和管理各个节点间链接的网络,并监控集群服务,当节点出现故障或者服务不可用时,自动在其余节点启动集群服务。

7,heartbeat+SAN

SAN:共享存储,主库从库用的一个存储。SAN的概念是容许存储设施和解决器(服务器)之间创建直接的高速链接,经过这种链接实现数据的集中式存储。

heartbeat+SAN_lgx211
就各个集群方案来讲,其优点为:

  • 保证数据的强一致性;

  • 与mysql解耦,不会因为mysql的逻辑错误发生数据不一致的状况;

其劣势为:

  • SAN价格昂贵;
8,heartbeat+DRDB

DRDB:这是linux内核板块实现的快级别的同步复制技术。经过各主机之间的网络,复制对方磁盘的内容。当客户将数据写入本地磁盘时,还会将数据发送到网络中另外一台主机的磁盘上,这样的本地主机(主节点)与远程主机(备节点)的数据便可以保证实时同步。

heartbeat+DRDB_lgx211
就各个集群方案来讲,其优点为:

  • 相比于SAN储存网络,价格低廉;

  • 保证数据的强一致性;
  • 与mysql解耦,不会因为mysql的逻辑错误发生数据不一致的状况;

其劣势为:

  • 对io性能影响较大;

  • 从库不提供读操做;

四,其它

9,Zookeeper + proxy

Zookeeper使用分布式算法保证集群数据的一致性,使用zookeeper能够有效的保证proxy的高可用性,能够较好的避免网络分区现象的产生。

Zookeeper + proxy_lgx211
就各个集群方案来讲,其优点为:

  • 扩展性较好,能够扩展为大规模集群。

缺其劣势为:

  • 搭建Zookeeper 集群,在配置一套代理,整个系统的逻辑变得更加复杂。
10,Paxos

分布式一致性算法,Paxos 算法处理的问题是一个分布式系统如何就某个值(决议)达成一致。这个算法被认为是同类算法中最有效的。Paxos与MySQL相结合能够实如今分布式的MySQL数据的强一致性。

Paxos_lgx211

相关文章
相关标签/搜索