美文网首页
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