美文网首页
Redis Sentinel详解

Redis Sentinel详解

作者: 必成_d2f5 | 来源:发表于2019-09-26 00:03 被阅读0次

    redis的Sentinel系统主要用于管理多个Redis服务器,是Redis Server的一个特殊工作模式,该系统执行以下三个任务:

    监控:  sentinel会不断监控Redis的主服务器和从服务器运作是否正常。当某个Redis服务器出现问题时,sentinel会通过API向应用程序或管理员发送通知

    自动故障迁移(automatic failover): 当一个主服务器出现问题时,sentinel会发起一次自动故障迁移动作,它会将失效的主服务器的一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器成为新的主服务器的从服务器。通过sentinel集群可以查询到新的主服务器的地址

    Redis Sentinel是一个分布式系统,你可以在一个架构中运行多个sentinel,这些进程使用gossip 协议来接受主服务器是否下线的信息。并且使用投票协议来决定是否执行自动故障迁移,以及选择哪个从服务器成为新的主服务器。

    启动Redis Sentinel

    之前说过,Redis Sentinel是一个运行在特殊模式下的redis server。因此,可以用redis-server来启动sentinel:

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

    启动sentinel实例必须指定响应的配置文件,或者指定的配置文件不可写,那么sentinel会拒绝启动。

    配置sentinel

    启动一个sentinel需要的最小配置如下:

    sentinel monitor mymaster 127.0.0.1 6379 2

    表示去监视一个名为mymaster的主服务器,这个主服务器的ip地址和端口,最后一个是将主服务器判断为失效至少需要一个sentinel同意。只要同意sentinel的数量不达标,自动故障迁移就不会执行

    sentinel down-after-milliseconds  mymaster 60000

    sentinel认为服务器已经断线所需的毫秒数

    sentinel failover-timeout mymaster 180000

    sentinel执行一次failover的超时时间

    sentinel parallel-syncs mymaster 1

    指定了在故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步。这个数字越小,完成故障转移所需的时间就越长。

    主观下线和客观下线

    redis sentinel关于下线有两个不同的概念:

    主观下线:指的是单个sentinel实例对服务器做出的下线判断

    如果一个服务器没有在down-after-milliseconds选项指定的时间内,对向它发送ping命令的sentinel返回一个有效回复,那么sentinel则认定这台服务器主观下线

    客观下线:指的是多个sentinel实例在对同一个master做出主观下线判断,并且通过sentinel is-master-down-by-addr命令互相交流后,得出的服务器下线判断。

    sentinel通过流言协议来判断master是否客观下线,一旦sentinel获得足够数量的服务器主观下线,那么它将认定服务器客观下线。客观下线只适用于master。

    Sentinel定时执行的任务

    1.每个sentinel以每秒一次的频率向它所知的主服务器,从服务器以及其他sentinel实例发送一个ping命令

    2.如果一个master超时未响应,会被标记为主观下线

    3.如果master被标记为主观下线,那么正在监视这个master的所有sentinel都要以每秒一次的频率确认主服务器的确进入了主观下线状态

    4.判断主服务器是否进入了客观下线

    5.当没有足够的sentinel同意master主观下线,master的客观下线状态会被移除

    6.自动发现sentinel和从服务器

    Sentinel命令

    sentinel的端口是26379,可以通过redis-cli连接sentinel,sentinel支持以下命令:

    1.ping 返回pong

    2.sentinel masters 列出所有被监视的主服务器

    3.sentinel slaves 列出给定主服务器的所有从服务器,以及这些从服务器的当前状态

    4.sentinel get-master-addr-by-name 返回给定名字的主服务器的ip和端口号

    5.sentinel reset 重置所有名字和给定模式pattern相匹配的主服务器

    6.sentinel failover 在master失效的情况下,强制一次开始自动故障迁移

    故障转移

    一次故障转移操作由一下步骤组成:

    1.发现主服务器已经进入客观下线状态

    2.对当前epoch进行自增,并尝试在这个epoch当选为主

    3.如果当选失败,在设定的故障迁移超时时间的两倍之后,重新尝试当选。如果当选成功,执行以下步骤:

        a 选出一个从服务器,并将它升级为master(发slave of no one)

        b  通过发布和订阅功能,将更新后的配置传给其他的sentinel

        c 向其他从服务器发送slaveof命令,让他们去复制新的master

        d 当所有从服务器都已近开始复制新的主服务器时,leader sentinel终止这次故障迁移操作

    sentinel使用如下规则选择新的master:

    1.选择复制偏移量最大的从服务器成为新的主服务器,如果复制偏移量不可用或者相同,则选择id最小的那个从服务器成为新的主服务器。

    sentinel使用Raft算法来选举leader,执行故障迁移。

    相关文章

      网友评论

          本文标题:Redis Sentinel详解

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