高可用架构案例解析

可用性是服务的基石,当前使用面广的大部分开源软件均实现了高可用。

高可用的实现可以归纳为三点:

1、故障发现
2、数据同步
3、故障点切换

Mysql 高可用方案

MHA全称是Master High Availability,是一种一主多从的数据库高可用解决方案。他的特点是在保障高可用自切换的前提下,最大限度的保障主从数据的一致性。

MHA架构图如下:

一次完整MHA故障切换流程如下:

1. 保存故障的master节点的binlog日志;
2. Manager查找最新更新的slave节点;
3. 应用差异的relay log日志到其他的slave;
4. 在slave节点上应用从master保存的binlog日志;
5. 提升一个slave为新的master;
6. 使其他的slave连接新的master进行复制。

Redis 高可用方案

Redis-Sentinel 是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

它的主要功能有以下几点

  • 不时地监控redis是否按照预期良好地运行;
  • 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
  • 能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。

Redis-Sentinel架构图如下:

Kafka高可用方案

实现高可用性的方式一般都是进行replication。

kafka架构图:

副本数据同步机制ISR(in-sync replicas):

  • 在所有的Replica中,leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护。
  • 如果一个replica落后leader太多,leader会将其剔除。如果另外的replica跟上脚步,leader会将其加入。
  • 同步:leader向ISR中的所有replica同步消息,当收到所有ISR中replica的ack之后,leader才commit。
  • 异步:收到同步消息的ISR中的replica,异步将消息同步给ISR集合外的replica。

ISR同步机制架构图:

ES 高可用方案

ES通过集群节点、分片和副本实现高可用

MongoDB 高可用方案

Mongodb的Replica Set即副本集方式主要有两个目的,一个是数据冗余做故障恢复使用,当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复。

另一个是做读写分离,读的请求分流到副本上,减轻主(Primary)的读压力。

参考文献

  1. MySQL高可用在网易的最佳应用与实践
  2. Redis高可用简要梳理
  3. Kafka高可用性原理
  4. MongoDB高可用集群配置的几种方案