1. Redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 是一个强大的内存型存储,具有丰富的数据结构,使其可以应用于很多方面,包括作为数据库、缓存、消息队列等等。
2. Redis高可用方案
2.1Redis+keepalived高可用
2.1.1.基本构建与原理
Keepalived + VIP : 在redis master-slave上部署keepalived、redis instance存活检测脚本、以及告警通知脚本。当redis -master失效的时候,VIP从master上漂移到slave上,完成m-s角色和配置更改。客户端连接redis的参数中host设置的是VIP,整个切换过程对客户端透明。
2.1.2.应用架构图
2.1.3.优缺点对比
优点:
实现简单,成本低,整个切换过程对客户端透明。
缺点:
整个集群的最大吞吐量受限于redis单实例的处理能力,因而扩展能力较差。
2.2.Redis Sentinel高可用
2.2.1.基本构建与原理
Redis Sentinel是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel集群和Redis数据集群。其中Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。Redis Sentinel的节点数量要满足2n+1(n>=1)的奇数个。
2.2.2.应用架构图
2.2.3.优缺点对比
优点:
1)Redis Sentinel集群部署简单。
2)能够解决Redis主从模式下的高可用切换问题。
缺点:
1) 部署相对Redis主从模式要复杂一些,原理理解更繁琐。
2) 2)资源浪费,Redis数据节点中slave节点作为备份节点不提供服务。
3)Redis Sentinel主要是针对Redis数据节点中的主节点的高可用切换,对Redis的数据节点做失败判定分为主观下线和客观下线两种,对于Redis的从节点有对节点做主观下线操作,并不执行故障转移。
2.3.Redis cluster集群高可用
2.3.1.基本构建与原理
RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务挂了可以快速的切换到另外一个服务,当遇到单机内存、并发等瓶颈时,可使用此方案来解决这些问题。
2.3.2.应用架构图
2.3.3.优缺点对比
优点:
1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2)节点的fail是通过集群中超过半数的节点检测失效时才生效。
3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
3)redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
4)Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
缺点:
1)部署相对Redis主从模式要复杂,原理理解更繁琐。
2)集群采用分片模式,维护成本高。
留言