(一)Redis哨兵模式入门

1 简介

   Redis哨兵模式是一种用于高可用性的Redis部署架构,它通过监控Redis主节点的状态,自动地进行主从切换和故障恢复。在这种架构下,多个Redis实例被组织成一个主从复制的集群,其中有一个Redis主节点负责接收读写请求,而其他Redis从节点则负责复制主节点的数据。

   当Redis主节点出现故障或者不可用时,哨兵会自动地发现并选举新的主节点,同时将其他Redis从节点重新配置为新的主节点的从节点。这样,在发生故障时,系统可以自动地进行切换,从而保证服务的高可用性。

   哨兵模式可以使Redis在面对节点故障或者网络分区等问题时,快速地进行故障切换和恢复,从而保证了系统的稳定性和可靠性。

2 哨兵模式下的故障转移流程图

2.1 正常哨兵模式

(一)Redis哨兵模式入门_第1张图片

2.2 当主 Redis 下线后

(一)Redis哨兵模式入门_第2张图片

2.3 升级 Redis1 为主服务

(一)Redis哨兵模式入门_第3张图片

3 选举领头 Sentinel 的规则和方法

  • 初始状态下,每个 Sentinel 都处于等待状态,等待与主节点建立连接并接收心跳消息。

  • 当有一个 Sentinel 发现主节点失效时,它会发送一条 SENTINEL is-master-down-by-addr 命令给其他所有 Sentinel,告知它们主节点已经下线。

  • 在接收到该命令后,每个 Sentinel 都会开始一个自己的计时器(默认为 2 秒),在计时器结束前,如果它没有收到任何其他 Sentinel 的消息,那么就会认为自己是第一个发现主节点下线的 Sentinel,并成为领头 Sentinel。

  • 如果在计时器结束前,有其他 Sentinel 发送了相同的 SENTINEL is-master-down-by-addr 命令,那么这些 Sentinel 也会开始它们自己的计时器。所有计时器结束时,计时器时间最短的 Sentinel 将会成为领头 Sentinel。

  • 如果多个 Sentinel 认为自己是领头 Sentinel,那么它们将通过 SENTINEL get-master-addr-by-name 命令来协商哪一个 Sentinel 应该成为领头 Sentinel。具体地,Sentinel 会以自己的优先级为分数,优先级高者胜出。如果优先级相同,则以运行 ID 的字典序为准,字典序较小者胜出。

  • 一旦选举出领头 Sentinel,它将负责监督主节点的故障转移,并通知其他 Sentinel。如果领头 Sentinel 本身失效,那么就会重新进行选举,选出新的领头 Sentinel。

(需要注意的是,在 Sentinel 中,每个 Sentinel 都可以成为领头 Sentinel,因此所有 Sentinel 的优先级和运行 ID 都应该尽可能地不同,以提高系统的可靠性和稳定性。)

4 哨兵模式的优缺点

4.1 优点:

  • 高可用性:哨兵模式提供了主从切换和故障恢复机制,当主节点发生故障时,可以自动将从节点升级为新的主节点,确保系统的持续运行。

  • 自动化故障检测和恢复:哨兵会周期性地检测主节点和从节点的健康状态,一旦发现故障,就会自动触发故障转移操作,将一个从节点晋升为新的主节点,并将其他从节点重新配置为新的从节点。

  • 监控和通知:哨兵可以实时监控 Redis 主从节点的状态,包括连接状态、延迟等指标,并在发生故障或状态变化时发送通知,方便管理员及时采取措施。

  • 灵活性:哨兵模式支持动态添加或移除节点,可以根据需求进行扩容或缩容,对于节点的增加和减少都不会影响系统的正常运行。

4.2 缺点:

  • 单点故障:哨兵模式中的哨兵节点本身也有可能发生故障,如果领头 Sentinel 发生故障,会导致选举新的领头 Sentinel 的延迟,可能影响故障转移的速度和可靠性。

  • 性能损失:哨兵模式需要额外的哨兵节点来监控和协调主从切换,这些节点会消耗一定的网络带宽和计算资源,可能对系统整体性能产生一定的影响。

  • 有限的扩展性:哨兵模式对节点数量有一定的限制,特别是在大规模集群的情况下,哨兵模式可能无法满足高并发和大数据量的需求。

5 总结

   哨兵模式提供了一种简单且自动化的高可用解决方案,适用于规模较小的 Redis 集群。但对于复杂的、大规模的应用场景,通常需要考虑使用 Redis Cluster 或其他分布式数据库来获得更好的可扩展性和性能。

你可能感兴趣的:(#,Redis,redis,数据库,缓存)