Redis Sentinel

作者: Lin_Shao | 来源:发表于2019-03-22 22:36 被阅读0次

    Sentinel是一个管理多个Redis实例的工具,它可以实现对 Redis的监控通知自动故障转移

    Sentinel 架构示意图:

    image.png

    主从复制的问题

    主从复制可以使得从节点作为主节点的备份节点,随时替代主节点进行服务。同时作为主节点的读负载均衡。

    主从复制同时存在以下几个问题:

    • 一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的 主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预
    • 主节点的写能力受到单机的限制。
    • 主节点的存储能力受到单机的限制。
    • 原生复制的弊端在早期的版本中也会比较突出,比如:Redis 复制中断后,从节点发起 psync。此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的卡顿。

    Sentinel的作用

    Sentinel是独立于主从节点的另一台服务器,主要用于:

    • 监控
      不断ping主从节点,监控主从节点的是否正常运行
    • 通知
      当主从节点出现问题时,Sentinel会主动回调配置好的脚本,脚本可以通知管理员解决问题
    • 自动故障转移
      当主节点不能正常提供服务时,Sentinel会选举一个从节点作为主节点,完成故障转移。
    • 配置提供者
      客户端应用直接连接Sentinel,从中获取主节点信息。

    Sentinel通信命令

    • 与Sentinel:
    命令 作用
    PING Sentinel 向 Redis 节点发送 PING 命令,检查节点的状态
    INFO Sentinel 向 Redis 节点发送 INFO 命令,获取它的从节点信息
    PUBLISH Sentinel 向其监控的 Redis 节点 __sentinel__:hello 这个 channel发布自己的信息及主节点相关的配置
    SUBSCRIBE Sentinel 通过订阅Redis主节点和从节点的__sentinel__:hello这个 channnel,获取正在监控相同服务的其他 Sentinel节点
    • 与主从节点:
    命令 作用
    PING Sentinel 向其他 Sentinel 节点发送 PING 命令,检查节点的状态
    SENTINEL:is-master-down-by-addr 和其他 Sentinel 协商 主节点 的状态,如果 主节点 处于 SDOWN 状态,则投票自动选出新的主节点

    Sentinel 工作原理

    每个 Sentinel 节点都需要定期执行以下任务:

    • 每个Sentinel以每秒钟一次的频率,向它所知的主服务器、从服务器以及其他Sentinel实例发送一个 PING 命令。
    • 如果一个实例(instance)距离最后一次有效回复PING命令的时间超过down-after-milliseconds所指定的值,那么这个实例会被Sentinel标记为主观下线。
    • 如果一个 主服务器被标记为主观下线,那么正在监视这个主服务器的所有Sentinel 节点,要以每秒一次的频率确认主服务器的确进入了主观下线状态。
    • 在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率,向它已知的所有 主服务器 和 从服务器 发送 INFO 命令。当一个 主服务器 被 Sentinel 标记为 客观下线 时,Sentinel 向 下线主服务器 的所有 从服务器 发送 INFO 命令的频率,会从 10 秒一次改为 每秒一次。
    • Sentinel 和其他 Sentinel 协商 主节点 的状态,如果 主节点 处于 SDOWN 状态,则投票自动选出新的 主节点。将剩余的 从节点 指向 新的主节点 进行 数据复制。
    • 当没有足够数量的 Sentinel 同意 主服务器 下线时, 主服务器 的 客观下线状态 就会被移除。当 主服务器 重新向 Sentinel 的 PING 命令返回 有效回复 时,主服务器 的 主观下线状态 就会被移除。

    相关文章

      网友评论

        本文标题:Redis Sentinel

        本文链接:https://www.haomeiwen.com/subject/ekbdvqtx.html