Redis的哨兵与集群模式

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的角色提升;
• 降低运维成本,提高系统的扩展性和可用性。

发布了59 篇原创文章 · 获赞 6 · 访问量 974

猜你喜欢

转载自blog.csdn.net/weixin_43790623/article/details/103226680