Redis哨兵模式

文章详细介绍了如何配置Redis的Sentinel哨兵系统实现主从复制的读写分离,包括Sentinel的配置文件设置、启动哨兵、处理主节点宕机的情况,以及原主节点恢复后的处理。此外,还提到了哨兵部署的最佳实践和如何在SpringBoot应用中整合Sentinel。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

主从结构(Redis主从复制(读写分离)配置)下,Sentinel(哨兵)模式用于监控Redis集群中的Master状态的工具,是Redis高可用解决方法,哨兵可以监视一个或多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代一宕机的master继续工作。

配置

1. 配置文件

在 redis 解压后的文件夹中找到 sentinel.conf ,我这里的位置在 /home/software/redis-5.0.5/sentinel.conf,然后将其复制到 /usr/local/redis/ 下,之后修改该文件,修改后的内容如下:

## 基础配置信息
port 26379 # 端口
pidfile "/usr/local/redis/sentinel/redis-sentinel.pid" #哨兵进程信息
dir "/usr/local/redis/sentinel" # 哨兵工作空间
daemonize yes # 后台运行
## bind 127.0.0.1 192.168.1.1 # 允许访问该节点的ip 
protected-mode no  # 设置为 no 表示任何ip都可以访问它
logfile "/usr/local/redis/sentinel/redis-sentinel.log" # 哨兵模式的相关日志存放位置

## 核心配置(mymaster 为主节点的别名,下面的配置中该名称需要统一)
# 监控的master  mymaster:master别名  192.168.1.191 6379:master的IP和端口  2:监控主节点的哨兵数量,当有两个哨兵认为主节点挂了,那主节点就会被认为真挂了
sentinel monitor mymaster 127.0.0.1 6379 2
# 配置master的密码  
sentinel auth-pass <master-name> <password>
# master被sentinel认定为失效的间隔时间
sentinel down-after-milliseconds mymaster 30000
# 剩余的slaves重新和新的master做同步的并行个数
sentinel parallel-syncs mymaster 1
# 主备切换的超时时间  哨兵做故障转移时,这个时候哨兵也是一个进程,如果他没有去执行或者执行缓慢,超过这个时间后,会由其他的哨兵来处理
sentinel failover-timeout mymaster 180000

主从模式下,主节点和所有的从节点,都应该按照上面的方式配置 sentinel.conf 文件(内容一模一样)。

2. 启动哨兵

使用如下命令启动哨兵,主从节点都需要执行该命令:

redis-sentinel sentinel.conf

3. 主节点如果宕机了

主节点master挂了之后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来宕机的主节点master恢复运行之后,它会成为一个从节点slave。

4. 当原master宕机之后再恢复

当原master宕机之后再恢复,如果原master节点出现如下状态down:

 则可能是原master节点的 redis.conf 中的 masterauth 没有设置,按照如下方式设置一下

masterauth <master-password> # 配置 masterauth 主节点密码

另外,一般master数据无法同步给slave的方案检查为如下:

  • 网络通信问题,要保证互相ping通,即内网互通。
  • 关闭防火墙,对外的端口开放(虚拟机中建议永久关闭防火墙云服务器需要保证内网互通)
  • 统一所有密码,通过逐台检查机器以防某个节点被遗漏。

5. 哨兵信息检查相关指令

redis-cli -p 26379 # 连接哨兵

连接哨兵之后,可以输入如下命令查看相关信息: 

# 查看mymaster下的master节点信息
sentinel master mymaster

# 查看mymaster下的slaves节点信息
sentinel slaves mymaster

# 查看mymaster下的哨兵节点信息
sentinel sentinels mymaster

6. 哨兵部署的一些约定

  • 哨兵节点要至少有三个节点或者奇数个数节点
  • 哨兵节点要分布式部署在不同的计算机节点
  • 一组哨兵节点只负责监听一组主从节点

7. 哨兵模式整合到 SpringBoot 中

在application.yml文件中配置如下:

spring:
  redis:
    database: 0 # redis的哪一个数据库
    password: didiok # redis密码
    sentinel:
      master: mymaster  # 主节点的别名
      nodes: 192.168.1.191:26379,192.168.1.192:26379,192.168.1.193:26379 # 所有哨兵所在的ip和端口号

<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、付费专栏及课程。

余额充值