可用性是服务的基石,当前使用面广的大部分开源软件均实现了高可用。
高可用的实现可以归纳为三点:
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)的读压力。