详解redis(5):Gossiping 协议

Gossip 协议 = 节点之间"不断八卦彼此状态"的去中心化健康检测机制

**一、**Redis Cluster 中 Gossip 在干什么?

Gossip 主要负责 4 件事:

  1. 节点发现

  2. 节点健康检测

  3. 主从状态传播

  4. 故障信息达成一致

二、Gossip 是怎么通信的

Redis Cluster 使用两种端口:

端口 用途
普通端口(6379) 客户端请求
Cluster Bus(16379) 节点间 Gossip

Gossip 的基本通信模型

每个节点:

周期性随机选几个节点

发送 PING

对方返回 PONG

消息里不仅包含"我还活着",还包含:

我知道的其他节点状态

消息里都带了什么?

一次 Gossip 消息里可能包含:

节点 ID

节点角色(主 / 从)

是否主观下线是否客观下线

slot 分配信息

复制关系

三、Redis Cluster 如何判断节点挂了?

第一步:主观下线(PFAIL)

某一个节点自己觉得:某节点可能挂了

条件:

连续一段时间 PING 不通

超过 cluster-node-timeout

结果:

给该节点打上 PFAIL

通过 Gossip 告诉其他节点

这一步不做任何故障转移

第二步:客观下线(FAIL)

足够多的主节点一致认为:它真的挂了

条件:

多个 主节点

都对同一节点标记 PFAIL

数量 ≥ quorum(法定人数)

结果:

升级为 FAIL

触发故障转移流程

四、故障转移是如何触发的?

M1(主) ─ S1(从)

故障流程:

  1. 多个主节点通过 Gossip 发现 M1 = FAIL

  2. M1 的从节点(S1)开始竞选

  3. 每个主节点只能投 1 票

  4. 得票 ≥ 半数主节点

  5. S1 升级为新主

  6. 重新分配 hash slot

五、为什么要奇数个主节点?

这是分布式系统的经典问题:多数派原则

假设你只有 2 个主节点

网络分区:

分区 A:M1

分区 B:M2

两边都只有 1 票

无法达到多数

整个集群不可写

假设你有 3 个主节点

分区 A:M1 + M2
分区 B:M3

A:2 票 → 多数

B:1 票 → 少数

只有一边能继续对外服务

六、为什么 Redis 选择 Gossip?

优点

无中心节点

可扩展

节点数大也能跑

容错强

缺点

状态收敛是"最终一致"

有传播延迟

短时间内可能认知不一致

相关推荐
广州灵眸科技有限公司15 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手18 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学18 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
二宝哥19 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
oradh20 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898621 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD21 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo21 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward1 天前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记1 天前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘