Redis 高可用

简单记录下Redis高可用方案。

Replication

Replication被称为主从架构,通过增加复制副本来提高数据的容错性与服务的可用性。

数据的同步方式有AOF与RDB,其中RDB属于内存镜像的全量同步,AOF属于基于操作日志的增量同步。

优点

  • 主从架构解决单节点可用性问题;
  • 读写分离,提高系统性能。

缺点

  • 当主节点出现异常情况下,需要手动调整从节点为主节点;
  • 写压力全部集中在主节点,造成了并发写入性能的瓶颈;
  • 由于所有的数据复制都是基于单个主节点完成的,无法支持大量的横向扩展。

Sentinel

Sentinel被称为哨兵,通过增加额外的监控系统来实现主从的动态切换,解决Replication的问题。

由于Sentinel仍然存在这但点问题,因此一般会采用多个Sentinel来实现监控集群,实现高可用的双重保护。

优点

  • 解决了Replicaion无法自动切换的问题。

缺点

  • 引入了额外的监控系统,系统复杂度增大;
  • 单点写问题仍然没有解决,无法支撑大量的横向扩展。

Codis

Codis是第三方实现的一套高可用方案,利用中间件实现Redis的集群功能。

其中,codis proxy被设计为无状态,可利用HAProxyZookeeper实现高可用。

优点

  • 解决了单节点写入的瓶颈;
  • 支持大量的很想扩展。

缺点

  • 引入了多个中间件,运维成本高;
  • 每个中间件都存在可用性问题;
  • 无法支持不同key的事务;
  • 增加了一层代理影响系统性能。

Cluster

Cluster无中心化架构,集群中的各个节点相互通信达成共识,并把客户端请求通过slot路由到目标数据节点。

优点

  • 去中心化,高容错性;
  • 支持大量横向扩容;
  • 支持高可用;
  • 不存在单点问题;
  • 运维成本低。

缺点

  • client复杂,需要处理slot信息;
  • 不同key会路由到不同的节点,无法支持事务。