Redis集群哨兵模式总结

Redis Sentinel是官方提供的高可用性解决方案,能够监控Redis集群节点的健康状态,实现自动故障转移。当master节点主观下线后,Sentinel会通过其他哨兵节点的共识判断是否客观下线,若达成一致则执行故障转移,选举新的master并通知客户端。Sentinel使用raft算法进行选举,并考虑断开连接时间、副本优先级、复制偏移量等因素选择新master。然而,Sentinel在单master情况下可能存在数据丢失风险,且不具备横向扩展能力。

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

上文介绍了Redis主从复制的原理,它解决了Redis数据备份的问题,master节点发生故障后不能自动选举出新的主节点,需要人工将slave节点设置成主节点,效率低下,不能实现自动故障转移,Redis官方提供了一个高可用解决方案Sentinel。

 

Redis sentinel是什么? 

Redis Sentinel是Redis的官方高可用性解决方案。Redis Sentinel为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建一个Redis集群,在没有人为干预的情况下抵抗某些类型的失败,自动实现故障转移。 

 

sentinel能干什么? 

1、监控redis集群节点(master+replica)和sentinel节点健康状态

2、自动故障转移:如果master出现故障,sentinel可以实现故障转移,并且通知客户端连接新的master。

3、通知:通过api,可以发送通知到管理员,开发人员,监控的redis实例出现了故障

4、配置中心:客户端连接到sentinel,sentinel可以访问master将节点信息返回给客户端 

 

启动sentinel方法

1、redis-sentinel /path/to/sentinel.conf

2、redis-server /path/to/sentinel.conf --sentinel 

sentinel​.conf配置说明如下​

# 配置需要监控的master节点信息 2代表法定人数 作用是表示需要最少需要多少个sentinel节点同意master节点不可达才标记为客观下线#举例 5个sentinel实例 quorum设置成2 那么有2个sentinel节点认为master不可达,则其中一个会启动故障转移#如果至少有三个哨兵可到达,故障转移将被授权并实际启动。raft协议sentinel monitor mymaster 127.0.0.1 6379 2 #只需要配置master sentinel会自动检测slave信息sentinel down-after-milliseconds mymaster 60000 #如果master在指定时间内没有响应ping命令/或报错,则认为主观下线了。sentinel failover-timeout mymaster 180000sentinel parallel-syncs mymaster 1 #指定故障转移的时候,同时支持多少个replica并行的与master同步数据,越小故障转移越久#以上配置可以通过SENTINEL SET command.来实时修改。sentinel monitor resque 192.168.1.3 6380 4sentinel down-after-milliseconds resque 10000sentinel failover-timeout resque 180000sentinel parallel-syncs resque 5

注意点:

Redis-sentinel必须使用配置文件启动,重启需要根据配置文件恢复,默认打开26379端口,sentinel之间必须开放端口访问,方便相互访问。 


Sentinel工作流程

1、首先sentinel​之间是通过redis的pub/subscribe​机制实现动态感知。

 

2、sentinel是如何感知master​挂掉的呢?

这里有两种情况,一种是master主观下线,一种是​master客观下线。

主观下线:每个sentinel每1s向master发送ping命令,如果在down-after-milliseconds时间内master没有响应,则该sentinel节点认为master​主观下线了。

​客观下线:

当主观下线的节点是主节点时,哨兵节点会通过指令`sentinel is-masterdown-by-addr`寻求其它哨兵节点对主节点的判断,当超过quorum(在sentinel配置中配置的法定人数)个数,此时哨兵节点则认为该主节点确实有问题,这样就客观下线了,大部分哨兵节点都同意下线操作,也就说是客观下线。 

注意客观下线只针对master节点生效,它会触发故障转移

 

3,master下线了,需要进行故障转移

这里又分为两步,首先需要选择sentinel哨兵主节点,通过sentinel主节点来进行​redis的故障转移。

首先是sentinel选举领导者。使用raft算法(状态共识算法)。

每一个Sentinel节点都可以成为Leader,当一个Sentinel节点确认redis集群的主节点主观下线后,会请求其他Sentinel节点要求将自己选举为Leader。被请求的Sentinel节点如果没有同意过其他Sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。

如果一个Sentinel节点获得的选举票数达到Leader最低票数(quorum和Sentinel节点数/2+1的最大值),则该Sentinel节点选举为Leader;否则重新进行选举。

Raft核心思想:先到先得,少数服从多数。 

 

sentinel选举出主节点后,sentinel主节点需要选举出redis​集群主节点,构建新的集群关系。

选举新redis主节点的依据​是:

1、与sentinel断开连接的时间。过滤发现与主sentinel服务器断开连接的时间超过配置的主机超时时间down-after-milliseconds的副本slaves

2、副本优先级。 优先选择replica-priority低的。

3、如果优先级相同,已处理复制偏移量。越大越优先,这个更符合业务场景功能。

4、如果复制offset相同,就看运行ID。优先选择小的。 

 

选择出master节点后,开始维护集群关系。

1、sentinel节点,向新主节点发送,slave no one命令,让它成为独立节点

2、sentinel节点,向其他节点发送 slaveof ip port,跟随到主节点 

 

总结

通过上面的分析,sentinel通过定时监控手段,可以实现自动故障转移,不过sentinel还是有一些问题,比如单个master节点情况下,数据存在丢失的可能,​并且如果单机性能有限,也没有横向扩展的能力。​

### Redis 集群哨兵模式部署教程 Redis 哨兵(Sentinel)是一种高可用性解决方案,用于监控 Redis 主从节点的状态,并在主节点发生故障时自动执行故障转移。以下是部署 Redis 集群哨兵模式的详细步骤。 --- #### 1. 环境准备 确保所有服务器上已安装 Redis 并配置好主从复制环境。以下是一个典型的主从架构示例: - 主节点(Master):`192.168.10.101:6379` - 从节点 1(Slave):`192.168.10.102:6379` - 从节点 2(Slave):`192.168.10.103:6379` 验证主从复制是否正常运行,可以通过以下命令检查: ```bash redis-cli -h 192.168.10.102 -p 6379 info replication ``` 预期输出应显示 `role=slave` 和 `master_host=192.168.10.101`[^1]。 --- #### 2. 配置哨兵节点 每个哨兵节点需要一个独立的配置文件 `sentinel.conf`。以下是配置文件的示例内容: ```conf # 绑定 IP 地址和端口 bind 192.168.10.104 port 26379 # 日志文件路径 logfile "/var/log/redis-sentinel.log" # 数据目录 dir "/var/lib/redis" # 哨兵监控主节点 sentinel monitor mymaster 192.168.10.101 6379 2 # 故障判定时间(毫秒) sentinel down-after-milliseconds mymaster 5000 # 故障转移超时时间(毫秒) sentinel failover-timeout mymaster 60000 # 最大同步延迟时间(毫秒) sentinel parallel-syncs mymaster 1 ``` 上述配置中,`mymaster` 是主节点的名称,`192.168.10.101` 是主节点的 IP 地址,`6379` 是主节点的端口,`2` 表示至少需要 2 个哨兵节点同意才能判定主节点故障[^2]。 --- #### 3. 启动哨兵节点 将配置好的 `sentinel.conf` 文件放置在每个哨兵节点上,并启动哨兵服务。例如: ```bash redis-sentinel /etc/redis/sentinel.conf ``` 如果使用 Docker 部署,可以参考以下命令: ```bash docker run -p 26379:26379 \ --name redis-sentinel-1 \ -v /data/redis/conf/sentinel.conf:/etc/redis/sentinel.conf \ -d redis redis-sentinel /etc/redis/sentinel.conf ``` 根据实际需求调整容器名称和端口号[^3]。 --- #### 4. 验证哨兵集群状态 连接到任意一个哨兵节点,使用以下命令查看哨兵集群的状态: ```bash redis-cli -p 26379 ``` 输入以下命令: ```bash INFO sentinel ``` 输出应包含主节点和从节点的信息,以及哨兵节点的数量和状态[^4]。 --- #### 5. 测试故障转移 为了验证哨兵集群的故障转移功能,可以手动停止主节点的服务: ```bash redis-cli -h 192.168.10.101 -p 6379 SHUTDOWN ``` 哨兵会自动检测主节点故障,并选举一个新的主节点。通过以下命令查看新的主节点: ```bash redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster ``` --- ### 注意事项 - 哨兵节点的数量建议为奇数,以避免脑裂问题。 - 配置文件中的 `sentinel monitor` 参数中的 `quorum` 值应根据实际需求设置,通常与哨兵节点数量相关。 - 确保所有节点之间的网络连通性良好,避免因网络问题导致故障转移失败[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

服务端技术栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值