您的位置:首页 > 数据库 > Redis

转:redis sentinel模式下,如何选举新的master

2017-04-11 17:33 519 查看

sentinel是一个独立于redis之外的进程,不对外提供key/value服务。在redis的安装目录下名称叫 redis-sentinel  主要用来监控redis-server进程,进行master/slave管理,如果你的redis没有运行在master/slave模式下,不需要设置sentinel。

  两个基本概念
  1. S_DOWN :subjectively down,直接翻译的为"主观"失效,即当前sentinel实例认为某个redis服务为"不可用"状态.
  2. O_DOWN :objectively down,直接翻译为"客观"失效,即多个sentinel实例都认为master处于"SDOWN"状态,那么此时master将处于ODOWN,ODOWN可以简单理解为master已经被集群确定为"不可用",将会开启failover.

redis2.8.7的选举有两个条件,首先是要下面的条件过滤掉一些节点

一、使用如下条件筛选备选node:

1、slave节点状态处于S_DOWN,O_DOWN,DISCONNECTED的除外

2、最近一次ping应答时间不超过5倍ping的间隔(假如ping的间隔为1秒,则最近一次应答延迟不应超过5秒,redis sentinel默认为1秒)

3、info_refresh应答不超过3倍info_refresh的间隔(原理同2,redis sentinel默认为10秒)

4、slave节点与master节点失去联系的时间不能超过( (now - master->s_down_since_time) + (master->down_after_period * 10))。总体意思是说,slave节点与master同步太不及时的(比如新启动的节点),不应该参与被选举。

5、Slave priority不等于0(这个是在配置文件中指定,默认配置为100)。

二、从备选node中,按照如下顺序选择新的master

1、较低的slave_priority(这个是在配置文件中指定,默认配置为100)

2、较大的replication offset(每个slave在与master同步后offset自动增加)

3、较小的runid(每个redis实例,都会有一个runid,通常是一个40位的随机字符串,在redis启动时设置,重复概率非常小)

4、如果以上条件都不足以区别出唯一的节点,则会看哪个slave节点处理之前master发送的command多,就选谁。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: