redis的哨兵模式

一.什么是哨兵机制?
答:Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
       监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
       提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

      自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

      哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
      每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
      虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel)。
      哨兵(sentinel) 的一些设计思路和zookeeper非常类似


二.哨兵模式的配置修改
实现步骤:
1.拷贝到etc目录
    cp sentinel.conf  /usr/local/redis/etc
2.修改sentinel.conf配置文件
    sentinel monitor mymast  192.168.110.133 6379 1  #主节点 名称 IP 端口号 选举次数

  #配置主服务器的密码(如没设置密码,可以省略)  
   sentinel auth-pass mymaster 123456  
3. 修改心跳检测 5000毫秒
    sentinel down-after-milliseconds mymaster 5000
4. 做多多少合格节点

    sentinel parallel-syncs mymaster 2
5. 启动哨兵模式
   ./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
6. 停止哨兵模式

注意:

1.当启动哨兵模式之后,如果你的master服务器宕机之后,哨兵自动会在从redis服务器里面 投票选举一个master主服务器出来;这个主服务器也可以进行读写操作!

2.如果之前宕机的主服务器已经修好,可以正式运行了。那么这个服务器只能进行读的操作,会自动跟随由哨兵选举出来的新服务器!

3.大家可以进入./redis-cli,输入info,查看你的状态信息;

三、哨兵(Sentinel)总结

1、Sentinel的作用:

A、Master 状态监测

B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave 

C、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换 

2、Sentinel的工作方式:

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令。

2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。 

3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。 

4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。

5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令 。

6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次 。

7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。 

若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

最后,如果大家看不太懂,推荐大家看两个博客,就明白了!

1.http://blog.youkuaiyun.com/zbw18297786698/article/details/52891695
2.http://blog.youkuaiyun.com/candy_rainbow/article/details/52842402

原文:https://blog.youkuaiyun.com/yswKnight/article/details/78158540 
 

<think>我们正在讨论Redis哨兵模式的配置与实现。根据引用内容,用户提供了几个配置示例,但我们需要系统地解释哨兵模式的配置步骤和实现原理。步骤1:理解哨兵模式Redis哨兵(Sentinel)是一个分布式系统,用于管理多个Redis实例(主从结构),提供自动故障转移(failover)和高可用性。哨兵模式的核心功能包括:-监控:哨兵定期检查主节点和从节点的状态。-通知:当被监控的实例出现问题时,哨兵可以通过API通知系统管理员或其他程序。-自动故障转移:如果主节点故障,哨兵会启动故障转移过程:选择一个从节点晋升为主节点,并让其他从节点复制新的主节点。-配置提供者:客户端可以通过哨兵获取当前主节点的地址。步骤2:配置哨兵模式的基本步骤根据引用[2]和引用[3],配置哨兵模式通常包括以下步骤:1.准备Redis主从结构:首先需要配置一个主节点和至少一个从节点。例如:-主节点:运行在127.0.0.1:6380-从节点1:运行在127.0.0.1:6381-从节点2:运行在127.0.0.1:63822.创建哨兵配置文件:每个哨兵实例需要一个配置文件。通常,我们会创建多个哨兵实例(通常为奇数,如3个)以实现哨兵自身的容错。以配置三个哨兵为例(端口分别为26380,26381,26382):-复制模板配置文件:创建三个哨兵配置文件(如sentinel-26380.conf,sentinel-26381.conf,sentinel-26382.conf)。-修改每个配置文件,主要设置:port<哨兵端口>#每个哨兵使用不同端口daemonizeyes#以守护进程方式运行sentinelmonitor<master-group-name><master-ip><master-port><quorum>sentinelauth-pass<master-group-name><password>#如果主节点有密码例如:sentinelmonitormymaster127.0.0.163802sentinelauth-passmymaster123456注意:`<quorum>`(法定人数)是判定主节点故障至少需要的哨兵数量。这里设置为2,表示需要至少两个哨兵同意才能判定主节点故障。3.启动哨兵:redis-sentinel/path/to/sentinel-26380.confredis-sentinel/path/to/sentinel-26381.confredis-sentinel/path/to/sentinel-26382.conf4.验证:连接到一个哨兵实例,使用`infoSentinel`命令查看状态。步骤3:哨兵模式的工作原理-哨兵通过发送PING命令定期检查主从节点的健康状态。-如果主节点在配置的`down-after-milliseconds`时间内未回复,哨兵将其标记为“主观下线”。-当足够数量的哨兵(达到quorum)都将主节点标记为主观下线时,主节点被标记为“客观下线”。-然后,哨兵会选举一个领导者哨兵(使用Raft算法)来执行故障转移。-领导者哨兵选择一个从节点(通常选择数据最新的从节点)晋升为主节点,并让其他从节点复制新的主节点。-最后,哨兵更新配置:将旧主节点(如果重新上线)设置为新主节点的从节点。步骤4:注意事项-哨兵数量:通常至少需要3个哨兵以确保系统在部分故障时仍能正常工作(容忍一个哨兵故障)。-网络分区:哨兵系统需要大多数哨兵可达才能做出决策,因此奇数个哨兵(如3或5)可以避免脑裂。-客户端:客户端需要支持哨兵,能够通过查询哨兵获取当前主节点地址。步骤5:配置示例参考引用[2]中的配置片段,一个哨兵配置文件(如sentinel-26382.conf)可能如下:```plaintextport16382daemonizeyessentinelmonitormymaster127.0.0.163802sentinelauth-passmymaster123456```步骤6:启动和停止引用[3]展示了如何停止和启动所有节点(包括主从和哨兵)的示例命令。注意:生产环境中应避免直接使用kill命令,应使用服务管理工具。总结:Redis哨兵模式提供了高可用性,配置过程包括设置主从复制、配置多个哨兵实例以及启动哨兵。哨兵通过监控和自动故障转移确保Redis服务在节点故障时继续运行。§§相关问题§§1.Redis哨兵模式与集群模式有什么区别?2.如何配置哨兵的故障转移通知?3.哨兵模式在故障转移过程中如何处理客户端连接?4.如何监控哨兵系统的状态?</think>### Redis哨兵模式配置与实现 Redis哨兵(Sentinel)是一种高可用解决方案,用于监控主从架构中的Redis实例,实现自动故障检测和故障转移。以下是关键配置步骤和实现原理: #### **一、核心配置步骤** 1. **创建哨兵配置文件** 复制模板并修改端口和监听对象(每个哨兵独立配置): ```bash cp sentinel-26380.conf sentinel-26381.conf cp sentinel-26380.conf sentinel-26382.conf ``` 配置文件内容示例: ```plaintext port 16381 # 哨兵端口 daemonize yes # 后台运行 sentinel monitor mymaster 127.0.0.1 6380 2 # 监控主节点,2为法定同意数 sentinel auth-pass mymaster 123456 # 主节点密码 ``` [^2] 2. **启动哨兵进程** 分别启动三个哨兵节点: ```bash redis-sentinel sentinel-16380.conf redis-sentinel sentinel-16381.conf redis-sentinel sentinel-16382.conf ``` [^2] 3. **验证哨兵状态** 连接Redis执行命令查看哨兵信息: ```bash redis-cli -p 16381 info Sentinel # 输出主节点状态、从节点列表等 ``` 4. **故障转移流程** - 哨兵通过PING命令检测节点健康 - 主节点超时未响应 → 标记为**主观下线** - 多数哨兵确认 → 升级为**客观下线** - 选举领导者哨兵执行故障转移 - 选择数据最新的从节点晋升为新主节点 - 更新其他从节点复制目标 #### **二、关键参数解析** | 配置项 | 说明 | 示例 | |--------|------|------| | `sentinel monitor <name> <ip> <port> <quorum>` | 定义监控的主节点 | `sentinel monitor mymaster 127.0.0.1 6380 2` | | `sentinel down-after-milliseconds` | 判定节点失效的毫秒数 | 默认30,000ms | | `sentinel failover-timeout` | 故障转移超时时间 | 默认180,000ms | | `sentinel parallel-syncs` | 故障转移时同步新主的从节点数 | 默认1 | #### **三、实现原理** 1. **分布式监控** 多个哨兵节点组成集群,通过Gossip协议通信,避免单点故障。 2. **Raft共识算法** 故障转移时通过Raft选举领导者哨兵,需满足: $$ \text{同意票数} \geq \left\lfloor \frac{\text{哨兵总数}}{2} \right\rfloor + 1 $$ 3. **配置自动传播** 新主节点确认后,哨兵自动修改其他节点的`redis.conf`和`sentinel.conf`,更新主节点地址[^1]。 #### **四、注意事项** 1. **节点数量** 推荐部署**至少3个哨兵**(奇数个),法定人数(quorum)通常设为 $\frac{N}{2} + 1$(N为哨兵总数)。 2. **网络分区处理** 当网络分裂时,少数分区中的旧主节点会被置为只读模式,防止数据冲突。 3. **客户端集成** 客户端需支持哨兵协议,通过`SENTINEL get-master-addr-by-name`动态获取主节点地址。 > **故障转移演示**: > 当主节点(6380)宕机时,哨兵日志会显示: > ```plaintext > +sdown master mymaster 127.0.0.1 6380 # 检测到故障 > +vote-for-leader ... # 开始选举 > +failover-state-select-slave master mymaster # 选择新主 > +promote-slave slave 127.0.0.1:6381 ... # 提升从节点 > +switch-master mymaster 127.0.0.1 6380 127.0.0.1 6381 # 切换完成 > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值