这是twemproxy的架构,客户端直接链接最上面的lvs(LB),第二层是同构的twemproxy节点,下面的redis master节点以及热备的slave节点,另外还有独立的sentinel集群和切换控制程序,twemproxy先介绍到这里。 node
在这种机制下,没有中心节点(和代理模式的重要不一样之处)。Redis Cluster将全部Key映射到16384个Slot中,集群中每一个Redis实例负责一部分,业务程序经过集成的Redis Cluster客户端进行操做。客户端能够向任一实例发出请求,若是所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。 redis
cluster的架构以下: 算法
图上只有master节点(slave略去),全部节点构成一个彻底图,slave节点在集群中与master只有角色和功能的区别。 缓存
Sentinel是一个管理多个redis实例的工具,它能够实现对redis的监控、通知、自动故障转移。sentinel不断的检测redis实例是否能够正常工做,经过API向其余程序报告redis的状态,若是redis master不能工做,则会自动启动故障转移进程,将其中的一个slave提高为master,其余的slave从新设置新的master实例。也就是说,它提供了: 架构
监控(Monitoring): Sentinel 会不断地检查你的主实例和从实例是否正常。 app
通知(Notification): 当被监控的某个 Redis 实例出现问题时, Sentinel 进程能够经过 API 向管理员或者其余应用程序发送通知。 运维
自动故障迁移(Automatic failover): 当一个主redis实例失效时, Sentinel 会开始记性一次failover, 它会将失效主实例的其中一个从实例升级为新的主实例, 并让失效主实例的其余从实例改成复制新的主实例; 而当客户端试图链接失效的主实例时, 集群也会向客户端返回新主实例的地址, 使得集群可使用新主实例代替失效实例。 分布式
Redis Sentinel自身也是一个分布式系统, 你能够在一个架构中运行多个 Sentinel 进程, 这些进程使用流言协议(gossip protocols)来接收关于主Redis实例是否失效的信息, 而后使用投票协议来决定是否执行自动failover,以及评选出从Redis实例做为新的主Redis实例。 工具
Sentienl工具提供了redis主-从方式的实现,那么借助基于VRRP的keepalived,就能实如今redis主-从切换时外部可见的redis实例不变性。除了在切换过程当中,客户端不会明显的感知到redis的服务实例变化。 测试
可是redis也支持客户端与sentinel直接交互来实现高可用性,可是与1.类似,一样须要特定客户端,由于客户端须要监控sentinel的频道信息,并自动链接新的主节点。通常来讲这种方式几乎无人使用。