Redis 哨兵(Sentinel)是 Redis 的高可用性解决方案,用于监控 Redis 主从复制中的主服务器并在发生故障时自动进行故障转移。下面是 Redis 哨兵机制的主要知识点,以及一些常见的面试题及其详细解释。

Redis 哨兵机制主要知识点

  1. 基本概念

    • 监控:哨兵会不断地检查主服务器和从服务器是否正常工作。
    • 通知:当某个 Redis 实例出现问题时,哨兵会通过 API 向系统管理员或其他应用程序发送通知。
    • 自动故障转移:当主服务器故障时,哨兵会将其中一个从服务器升级为新的主服务器,并让其他从服务器开始复制新的主服务器。
    • 配置提供者:客户端可以通过哨兵获得当前的主服务器地址,从而始终与可用的主服务器进行通信。
  2. 哨兵实例

    • 哨兵本身也是一个运行在特定端口上的 Redis 实例,负责执行监控和故障转移操作。
  3. 哨兵配置

    • sentinel.conf:哨兵的配置文件,用于定义哨兵实例的行为,包括监控的主服务器、判断服务器故障的时间间隔等。
  4. 主观下线和客观下线

    • 主观下线(Subjective Down,简称 SDOWN):哨兵认为某个实例不可用,但其他哨兵可能没有发现这个问题。
    • 客观下线(Objective Down,简称 ODOWN):大多数哨兵都认为某个实例不可用,达成一致后确定该实例为客观下线。
  5. 故障转移流程

    • 哨兵集群中的哨兵会通过投票选择一个领导者,由领导者执行故障转移操作。
    • 领导者会将其中一个从服务器提升为新的主服务器,并让其他从服务器开始复制新的主服务器。

面试题及详解

  1. 什么是 Redis 哨兵?

    回答:Redis 哨兵是 Redis 的高可用性解决方案,负责监控 Redis 主从复制中的主服务器和从服务器,通知系统管理员或应用程序出现的问题,并在主服务器故障时自动进行故障转移。

  2. 哨兵的主要功能有哪些?

    回答

    • 监控:检查 Redis 实例是否正常工作。
    • 通知:向系统管理员或应用程序发送通知。
    • 自动故障转移:在主服务器故障时,自动将从服务器提升为新的主服务器。
    • 配置提供者:提供当前主服务器地址,帮助客户端连接可用的主服务器。
  3. 什么是主观下线和客观下线?

    回答

    • 主观下线(SDOWN):单个哨兵认为某个 Redis 实例不可用。
    • 客观下线(ODOWN):多个哨兵达成一致,认为某个 Redis 实例不可用,确认为客观下线。
  4. Redis 哨兵是如何进行故障转移的?

    回答:当主服务器被判定为客观下线后,哨兵集群中的哨兵通过投票选出一个领导者。领导者会将一个从服务器提升为新的主服务器,并更新其他从服务器的复制目标为新的主服务器。

  5. 如何配置 Redis 哨兵?

    回答:通过配置哨兵的配置文件 sentinel.conf,定义哨兵实例的行为。主要配置项包括监控的主服务器地址和端口、判断服务器故障的时间间隔、选举领导者的投票数量等。

    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 60000
    sentinel parallel-syncs mymaster 1
  6. 如何启动 Redis 哨兵?

    回答:使用以下命令启动 Redis 哨兵,指定哨兵配置文件:

    redis-sentinel /path/to/sentinel.conf
  7. 如何获取当前的主服务器地址?

    回答:客户端可以通过哨兵命令 SENTINEL get-master-addr-by-name <master-name> 获取当前的主服务器地址。

    redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
  8. 哨兵之间如何通信?

    回答:哨兵实例通过 Redis 发布订阅机制(Pub/Sub)进行通信,交换关于主服务器和从服务器的状态信息。

  9. 哨兵配置中 quorum 参数的作用是什么?

    回答quorum 参数定义了判定主服务器客观下线所需的哨兵数量。只有当至少 quorum 数量的哨兵认为主服务器不可用时,才会认为主服务器客观下线。

    sentinel monitor mymaster 127.0.0.1 6379 2
  10. Redis 哨兵的故障转移过程有哪些步骤?

    回答

    • 哨兵发现主服务器主观下线(SDOWN)。
    • 多个哨兵确认主服务器客观下线(ODOWN)。
    • 哨兵集群选举出一个领导者。
    • 领导者选择一个从服务器提升为新的主服务器。
    • 其他从服务器开始复制新的主服务器。
    • 通知客户端新的主服务器地址。

通过理解和掌握这些知识点和面试题,你可以更好地应对与 Redis 哨兵相关的技术问题和面试挑战。

参考