Redis 的哨兵模式
Redis Sentinel 是 Redis 的一种高可用方案
监控、通知、自动故障转移、服务发现
假设有一个master节点和两个Slave节点,当发现有master宕机之后,只要有两个哨兵达成一致,就可以去做一个master的故障迁移,我们可以通过哨兵节点来获得我的一个master。在jedis中,是通jedissentinelpool处理jedis的哨兵。
Sentinel架构的主要作用是解决主从模式下主节点的故障转移工作的。这里如果主节点因为故障下线,那么某个sentinel节点发送检测消息给主节点时,如果在指定时间内收不到回复,那么该sentinel就会主观的判断该主节点已经下线,那么其会发送消息给其余的sentinel节点,询问其是否“认为”该主节点已下线,其余的sentinel收到消息后也会发送检测消息给主节点,如果其认为该主节点已经下线,那么其会回复向其询问的sentinel节点,告知其也认为主节点已经下线,当该sentinel节点最先收到超过指定数目(配置文件中配置的数目和当前sentinel节点集合数的一半,这里两个数目的较大值)的sentinel节点回复说当前主节点已下线,那么其就会对主节点进行故障转移工作。转移完成后,sentinel也会通知客户端进行节点的转移。
Redis 的集群模式
Redis Cluster
- 数据自动分片(分成16384个 Hash Slot )
每一个key对应一个Hash Slot - 在部分节点失效时有一定可用性
一个节点失效 不影响其他的
JedisCluster
- Jedis 只从 Master 读数据,如果想要自动读写分离,可以定制
无法对多个master做一个批量操作。
Sentinel模式虽然解决了高可用的问题,但是单机的容量还是受到了限制,无法实现redis的分布式集群,限制了整个集群的容量和并发性能。
Redis Cluster集群节点最小配置6个节点以上(3主3从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。
Cluster模式有众多的优点:
• 无中心架构;
• 数据按照slot存储分布在多个节点,节点间数据共享,可动态调整数据分布;
• 可扩展性:可线性扩展到1000多个节点,节点可动态添加或删除;
• 高可用性:部分节点不可用时,集群仍可用。通过增加Slave做standby数据副本,能够实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制完成Slave到Master的角色提升;
• 降低运维成本,提高系统的扩展性和可用性。