`
donlianli
  • 浏览: 340490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Elasticsearch...
浏览量:218594
社区版块
存档分类
最新评论

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

阅读更多

首先要清楚,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多,就选谁。
 
附原英文:
Select a suitable slave to promote. The current algorithm only uses
the following parameters:
 
1) None of the following conditions: S_DOWN, O_DOWN, DISCONNECTED.
2) Last time the slave replied to ping no more than 5 times the PING period.
3) info_refresh not older than 3 times the INFO refresh period.
4) master_link_down_time no more than:
    (now - master->s_down_since_time) + (master->down_after_period * 10).
   Basically since the master is down from our POV, the slave reports
   to be disconnected no more than 10 times the configured down-after-period.
   This is pretty much black magic but the idea is, the master was not
   available so the slave may be lagging, but not over a certain time.
   Anyway we'll select the best slave according to replication offset.
5) Slave priority can't be zero, otherwise the slave is discarded.
 
Among all the slaves matching the above conditions we select the slave
with, in order of sorting key:
 
- lower slave_priority
- bigger processed replication offset.
- lexicographically smaller runid.
 
Basically if runid is the same, the slave that processed more commands
from the master is selected.
 
runid
 Redis "Run ID", a SHA1-sized random number that identifies a
 given execution of Redis, so that if you are talking with an instance
  having run_id == A, and you reconnect and it has run_id == B, you can be
 sure that it is either a different instance or it was restarte
util.c
void getRandomHexChars(char *p, unsigned int len);
 

对这类话题感兴趣?欢迎发送邮件至donlianli@126.com

关于我:邯郸人,软件工程师

 请支持原创:

http://donlianli.iteye.com/blog/2034830

分享到:
评论

相关推荐

    redis(哨兵模式配置)

    4. **故障转移(Failover)**:当主服务器出现故障,Sentinel会根据预设策略选举一个新的主服务器,并将从服务器升级为主服务器。同时,它会通知应用客户端新的主服务器地址。 5. **配置更新**:在故障转移后,...

    Redis Sentinel实现高可用配置的详细步骤

    当Sentinel检测到主节点故障并达到法定人数时,它会选举一个从节点作为新的主节点,并通知其他Sentinel和从节点这个变化。`sentinel failover-timeout`参数定义了故障转移操作的超时时间。 总结来说,Redis ...

    redis哨兵模式.rar

    下面是关于Redis Sentinel模式的详细说明: 1. **哨兵系统架构**: Redis Sentinel是一个分布式系统,由多个Sentinel节点组成,它们之间通过Gossip协议通信,监控Redis主从集群的状态。当Sentinel节点发现主服务器...

    Redis Sentinel服务配置流程(详解)

    - **启动 Sentinel**:Redis Sentinel 是 Redis 服务器的一个特殊模式,可以通过 `redis-sentinel` 命令或在启动 Redis 时添加 `--sentinel` 选项来运行。 - **配置文件**:通常使用 `sentinel.conf` 文件进行配置...

    redis哨兵模式配置文件

    在哨兵模式下,多个Sentinel实例协同工作来监控主Redis实例和其从属节点的状态,确保在主节点故障时能够无缝地切换到一个从节点,从而保证服务的连续性。下面我们将深入探讨Redis Sentinel的配置文件以及如何设置和...

    Redis中Sentinel高可用解决方案.docx

    - `tilt`:是否进入了 TILT 模式,该模式下 Sentinel 会暂停某些功能以避免误操作。 - `running_scripts`:当前正在执行的脚本数量。 - `tilt_start_time`:进入 TILT 模式的开始时间。 - `previous_time`:上一...

    redis-sentienl-master-.pdf

    当主服务器宕机时,Sentinel 会发起故障转移,选举新的主服务器,并通知其他从服务器改变它们的角色,成为新主服务器的从服务器。 6. **Redis 集群安装**: 除了哨兵模式,Redis 还支持集群模式,可以在多台服务器...

    Redis 高可用架构最佳实践.ppt

    另一种常见实践是使用Sentinel配合VIP(Virtual IP),同样可实现秒级切换,但同样存在Sentinel模式下短暂的服务不可用问题。封装客户端直连Sentinel端口能更快速地检测到故障,但对客户端有所侵入,且需要Sentinel...

    redis 高可用详细文档

    部署Sentinel系统时,通常推荐配置奇数个Sentinel实例,比如3个,以便在发生故障时可以进行选举,决定新的主服务器。Sentinel系统中有一个主观下线的概念,这是单个Sentinel根据特定的时间间隔无法与Redis主服务器...

    Linux下Redis的安装和部署(三)--哨兵模式的部署.pdf

    在Linux环境下部署Redis时,哨兵(Sentinel)模式是一种高可用性的解决方案,它能够监控Redis主从集群的状态,自动进行故障检测、故障恢复以及配置更新。以下是对哨兵模式部署的详细解释: 1. **哨兵模式配置文件**...

    redis主从集群搭建及容灾部署(哨兵sentinel).pdf

    当 Master 失效时,Sentinel 系统会选举新的 Master,并通知其他节点进行数据同步。在本例中,部署了三个哨兵节点(6371、6372、6373),这样可以实现多数投票机制,增加系统的稳定性。哨兵配置需要包括各个节点间的...

    CentOS安装Redis

    Sentinel模式可以提供高可用性支持,能够监控主从实例的状态,并在主实例故障时自动选举出新的主实例。 - **配置Sentinel**:创建`sentinel-master.conf`和`sentinel-slave.conf`文件,配置`sentinel monitor`等...

    Redis高可用之哨兵+主从模式总结

    在这个场景下,主从模式和哨兵模式结合使用,可以构建出一套高效且可靠的 Redis 高可用解决方案。 1. **主从模式**: 主从模式是 Redis 提供的一种基础的高可用策略,它通过数据复制来实现读写分离。主节点负责...

    Redis主从搭建

    - 执行`redis-cli -p 6379`命令进入Redis命令行模式。 - 如果设置了密码,需要先执行`auth <密码>`进行认证。 - 可以通过执行如`ping`等命令来验证Redis服务是否正常运行。 7. **停止Redis服务**: - 使用命令`...

    redis主从哨兵配置

    然后,需要启动哨兵,进入 src 目录下执行 ./redis-sentinel ../sentinel.conf 命令。 五、测试哨兵切换 1. 测试主从切换 在主节点执行 shutdown 命令关闭服务,然后连接 7001 端口,执行 info 命令查看主从状态...

    redis工作原理及单机主从集群版安装使用说明书

    当检测到主节点失效时,Sentinel会根据预设规则选举新的主节点,并通知其他从节点改变角色,连接新的主节点,从而实现自动故障恢复。 Redis集群(Cluster)配置则是为了进一步扩展Redis的处理能力,支持数据分片...

    运维部-redis服务

    4. **Redis Sentinel模式** - **优点**:实现自动故障转移。 - **缺点**:需要配置多个Sentinel实例监控主从状态,不易水平扩展。 5. **Redis Cluster模式** - **优点**:分布式部署,支持数据分片和高可用。 ...

    Redis集群模式搭建

    Redis 集群模式搭建是将多个 Redis 服务器组织成一个...此外,了解和掌握Redis的哨兵(Sentinel)系统或者Redis Cluster的自动故障转移机制也是很重要的,它们能在节点故障时自动选举新的主节点,确保服务的连续性。

    SpringBoot集成Redis哨兵Demo

    哨兵系统的主要职责是监控Redis主从集群的健康状态,当检测到主服务器故障时,它会自动发起故障切换,选举新的主服务器,并通知应用更新连接信息。在这个过程中,我们的SpringBoot应用无需关心具体的故障处理细节,...

    redis主从复制集群

    - **哨兵(sentinel)** 是 Redis 提供的一种监控机制。 - 它可以监控主从节点的状态,并在主节点失败时自动进行故障转移。 - 单个哨兵或多个哨兵都可以实现这一目标。 - 在多个哨兵的情况下,需要实现哨兵之间...

Global site tag (gtag.js) - Google Analytics