Redis:哨兵机制

为什么要有哨兵?

Redis 哨兵是一个分布式系统,用于监控 Redis 主从集群的状态,并在主节点出现故障时自动进行故障转移,确保系统的高可用性。它可以实时监测多个 Redis 节点的运行状况,包括主节点和从节点。引入哨兵的好处:

  • 保证系统高可用:在 Redis 主从复制架构中,主节点承担着读写操作,一旦主节点出现故障,整个系统就会面临无法写入和部分读取异常的问题。哨兵能够实时监测主节点的运行状态,当主节点发生故障时,自动将一个从节点提升为新的主节点,保证系统的读写功能能够继续进行,从而提高系统的可用性和稳定性。
  • 实现自动故障转移:通过哨兵的自动故障转移机制,能够在主节点故障时快速地完成新主节点的选举和切换,无需人工干预,大大减少了系统故障恢复时间。这对于一些对实时性要求较高的应用场景至关重要,可以避免因人工介入不及时而导致的业务长时间中断。
  • 监控与通知:哨兵可以监控整个 Redis 集群中各个节点的运行状况,包括主节点、从节点的状态信息,如节点是否在线、内存使用情况、复制偏移量等。同时,当集群中发生节点故障、主从切换等重要事件时,哨兵能够及时向管理员或其他相关组件发送通知,以便及时采取相应的措施。

核心功能

监控

哨兵会不断检查主节点和从节点的状态,确保它们正常运行。哨兵通过以下方式实现监控:

  • 定期发送 PING 命令 :哨兵会定期向主节点、从节点和其他哨兵实例发送 PING 命令,检测它们是否正常运行。
  • 检查响应 :如果节点在指定时间内(由 down-after-milliseconds 配置项决定)没有响应 PING 命令,哨兵会将该节点标记为 主观下线(Subjectively Down, SDOWN)
  • 多哨兵确认 :单个哨兵的主观下线判断可能会误判(例如网络抖动),因此需要多个哨兵实例共同确认。如果多数哨兵都认为主节点下线,则主节点会被标记为 客观下线(Objectively Down, ODOWN)

选主

如果主节点失效,哨兵会自动将一个从节点提升为新的主节点,并让其他从节点复制新的主节点。选主的过程分为以下几个步骤:

  1. 选举领头哨兵(Leader Sentinel)
    • 当主节点被标记为客观下线后,所有哨兵实例会通过 Raft 算法选举出一个领头哨兵。(哨兵节点一般设置为奇数个便于投票选举)
    • 领头哨兵负责执行故障转移操作,其他哨兵则处于跟随状态。
  2. 选择新的主节点
    • 领头哨兵会从当前的从节点中选择一个最合适的节点作为新的主节点。
    • 选择标准包括:
      • 从节点的优先级(由 slave-priority 配置项决定,一般根据服务器配置设置)。
      • 从节点的复制偏移量(选择数据最接近原主节点的从节点,也就是offset最大的节点)。
      • 从节点的运行状态(选择运行时间最长的从节点,也就是runid最小的节点)。
  3. 提升从节点为主节点
    • 领头哨兵会向选定的从节点发送 SLAVEOF NO ONE 命令,将其提升为主节点。
    • 然后,哨兵会更新其他从节点的配置,让它们复制新的主节点。
  4. 更新配置
    • 故障转移完成后,哨兵会更新自己的配置文件,记录新的主节点信息。

通知

当监控的 Redis 实例出现问题时,哨兵可以通过 API 或脚本通知系统管理员或其他应用程序。哨兵支持以下通知方式:

  • 脚本通知:哨兵可以调用用户自定义的脚本,将事件信息传递给脚本处理。例如,可以通过脚本发送邮件或短信通知管理员。
  • 日志记录 :哨兵会将重要事件记录到日志文件中,供后续分析。
    件或短信通知管理员。
  • 日志记录:哨兵会将重要事件记录到日志文件中,供后续分析。
相关推荐
fen_fen13 小时前
Oracle建表语句示例
数据库·oracle
砚边数影15 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt15 小时前
Djiango配置Celery
数据库·sqlite
云小逸16 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
肉包_51116 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总16 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
ALex_zry16 小时前
Redis Cluster 分布式缓存架构设计与实践
redis·分布式·缓存
此刻你17 小时前
常用的 SQL 语句
数据库·sql·oracle
それども17 小时前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·18 小时前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb