Redis 哨兵(Sentinel)介绍

定义

Redis 哨兵是 Redis 官方提供的高可用解决方案,专门用于监控主从集群,并在主节点故障时自动完成故障转移,以此保证服务的持续可用。

1、监控(Monitoring)

哨兵会以每秒一次的频率,向集群中的所有主节点、从节点发送 ping 命令,来检测它们是否正常运行。 2、自动故障恢复(Automatic failover) 当主节点被判定为客观下线时,哨兵会从从节点中选举一个新的主节点。 它会让其他从节点都指向这个新主节点进行数据同步。 当旧主节点恢复后,会被降级为从节点,去同步新主节点的数据。 3、通知(Notification)

sentinel从单个redis客户端的服务发现来源,在集群发生故障转移后,它会把新的主节点信息推送给客户端,确保客户端可以连接到正确的节点。

服务状态监控

下线判定

  • 主观下线(Subjectively Down,SDOWN) :单个哨兵节点(sentinel节点)在规定时间内没有收到某个实例的 ping 响应,就会认为该实例主观下线。

  • 客观下线(Objectively Down,ODOWN) :当超过 quorum(通常是哨兵数量的半数以上)个哨兵节点都认为同一个实例主观下线时,该实例才会被判定为客观下线,这是为了避免网络抖动导致的误判。

选主规则(新主节点的选举)

哨兵会按照以下优先级从从节点中选择新的主节点:

  • 排除不健康节点:先排除与主节点断开时间过长、或处于异常状态的从节点。

  • slave-priority 优先 :优先选择 slave-priority 值更小的节点(值越小,优先级越高)。

  • 数据完整性优先 :如果优先级相同,选择 offset(偏移量)更大的节点,代表它的数据与原主节点更接近。

  • 运行 ID 优先:如果前两项都相同,选择运行 ID 更小的节点。

脑裂(Split Brain)

1、网络分区(Network Partition),也叫 "脑裂"(Split Brain),是分布式系统中一种常见的故障场景,指的是因为网络故障,一个完整的集群被分割成了多个彼此无法通信的子集群。

2、当网络分区发生时,哨兵集群与原主节点失去了连接,会选举一个从节点成为新主节点。此时集群中就出现了两个主节点,客户端可能会向旧主节点写入数据,而新主节点无法同步这部分数据。

当网络恢复后,旧主节点会被降为从节点,从新主节点同步数据,这就会导致旧主节点上的新写入数据丢失。

可以通过配置两个关键参数来降低数据丢失的风险:

  • min-replicas-to-write 1:主节点必须至少有 1 个从节点保持正常连接,否则拒绝写请求。

  • min-replicas-max-lag 5:主从节点之间的数据同步延迟不能超过 5 秒,否则拒绝写请求。

这两个配置可以确保主节点在无法将数据同步给足够多的从节点时,拒绝新的写操作,以此避免在脑裂场景下的数据丢失。

总结:本文介绍了redis哨兵(sentinel)的定义作用(监控,自动故障恢复,通知)。并介绍了两种实例下线(主观下线,客观下线)判断的依据。还介绍了主节点发生故障时新主节点的选举的规则。最后介绍了网络分区(脑裂)的过程及用来降低此过程数据丢失风险的两个配置(min-replicas-to-write,min-replicas-max-lag )。

相关推荐
猫头虎3 小时前
基于信创openEuler系统安装部署OpenTeleDB开源数据库的实战教程
数据库·redis·sql·mysql·开源·nosql·database
静听山水3 小时前
Redis核心数据结构-ZSet
数据结构·redis
Dontla4 小时前
黑马大模型RAG与Agent智能体实战教程LangChain提示词——6、提示词工程(提示词优化、few-shot、金融文本信息抽取案例、金融文本匹配案例)
redis·金融·langchain
難釋懷4 小时前
秒杀优化-基于阻塞队列实现秒杀优化
redis·缓存
静听山水4 小时前
Redis核心数据结构-Set
数据结构·数据库·redis
无尽的沉默5 小时前
Redis下载安装
数据库·redis·缓存
曾经的三心草5 小时前
redis-9-集群
java·redis·mybatis
czlczl200209255 小时前
增删改查时如何提高Mysql与Redis的一致性
数据库·redis·mysql