zoukankan      html  css  js  c++  java
  • Redis-sentinel监控

    Sentinel介绍

    Redis Sentinel 系统用于管理多个Redis服务器, 该系统执行以下三个任务:

      监控(Monitoring

      提醒(Notification

      自动故障迁移(Automatic failover

      Sentinel 是一个分布式系统,可以在一个架构中运行多个 Sentinel 实例,使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器

    Sentinel启动与配置

    启动Sentinel

    通过redis-sentinel启动

      redis-sentinel   /path/to/sentinel.conf

    通过redis-server启动

      redis-server   /path/to/sentinel.conf--sentinel

    Sentinel配置项

    sentinel announce-ip <ip>
    sentinel announce-port <port>
    sentinel monitor <master-name> <ip> <redis-port> <quorum>
    sentinel auth-pass <master-name> <password>
    sentinel down-after-milliseconds <master-name> <milliseconds>
    sentinel parallel-syncs <master-name> <numslaves>
    sentinel failover-timeout <master-name> <milliseconds>
    sentinel notification-script <master-name> <script-path>
    sentinel client-reconfig-script <master-name> <script-path>
    Sentinel监控流程

    1.Sentinel创建命令连接和订阅连接

      sentinelmasterslave创建命令连接和订阅连接

      sentinel与其他sentinel只创建命令连接

    2.Sentinel发送消息

      sentinel定期向masterslave发送INFO命令

      sentinel定期向masterslavesentinel发送ping命令

      sentinel定期向master发送publish hello命令

      hellosentinel_ip,sentinel_port,sentinel_runid,current_epoch,

           master_name,master_ip,master_port,master_config_epoch

    3.Master下线检测

      (1) sentinel检测到master超时,标记为主观下线

      (2) sentinel向其他sentinel询问master是否下线

      (3) 超过quorum数量的sentinel认为下线,标记master为客观下线

      (4) sentinel进行投票选举leader

    sentinel选举leader(raft)
     Sentinel数据结构关系图
     Sentinel故障转移流程
     
     
     sentinel故障转移时序图
     
     Sentinel中存在的问题

    1.如果两个sentinel有一个sentinel断掉,另一个sentinel的选举leader将永远失败

    2. sentinel不能识别slave中的127.0.0.1地址

    3.修改sentinel模式下的实例角色时,也需要修改sentinel和实例的配置;

    4.sentinel监控的slave,使用slaveof命令无效;

    5. sentinel无法将slave当做master作为监控对象

    6. sentinel故障迁移中,slave重配超时后sentinel向其他slave发送的slaveof命令被丢弃

    备注:

           sentinel在执行故障迁移中,当被选中的slave升级为master后,其它slave需要重新配置到新master上,如果slave重配到新master超时,sentinel会向该slave发送slaveof命令将slave再次重新配置到新master上,并将命令放到待发缓冲中等待读写事件处理器处理,这时sentinel修改自己保持的实例状态将旧master实例切换到了新master实例,在切换过程中sentinelslave实例释放掉(同时也释放了命令发送连接),导致之前发送的slaveof命令还没发送已经被清空。该slave只能等待sentinel通过INFO命令发现它的master不是新master时再次向它发送slaveof命令。





  • 相关阅读:
    python3 使用 lxml 库解析 HTML
    套接字
    使用 socket_server 创建一个简单的服务器和客户端
    创建一个超级简单的UDP服务器 / 客户端
    创建一个超级简单TCP交互的服务器/客户端
    python3 stock send() 函数报错: TypeError: a bytes-like object is required, not 'str'
    python3 stock recv OSError: [WinError 10038] 在一个非套接字上尝试了一个操作
    python 之闭包
    任导航(认道行rendaohang)上线啦!~
    Pr Pro CC 2019 添加的时间码不同步/不一样/比实际时间短或长问题排查
  • 原文地址:https://www.cnblogs.com/jeffen/p/6107484.html
Copyright © 2011-2022 走看看