深度分析redis集群模型N 主 + M 从(N≥3)的原因

Redis 集群采用 N 主 + M 从 (N ≥ 3) 的架构设计,其中主节点和从节点扮演着严格定义且互补的角色,这种设计是为了满足高可用性(HA)数据分片(Sharding) 的核心需求。以下是主节点和从节点的核心区别、设计讲究及其原因:


一、主节点(Master Nodes)

  1. 核心职责:

    • 数据存储与读写: 每个主节点负责存储集群中分配给它的 一部分槽(Slot) 对应的数据(共16384个槽,分给N个主节点)。
    • 处理请求: 直接处理客户端对这些槽的读写命令(SET, GET, DEL等)。
    • 参与集群管理: 通过 Gossip 协议 与其他节点交换状态信息,参与 故障检测故障转移 的投票决策。
  2. 数量讲究 (N ≥ 3):

    • 最小可用性要求: Redis 集群使用类似 Raft 共识算法 的机制进行故障转移。需要大多数(Majority)主节点达成共识 才能执行故障转移、槽迁移等关键操作。
    • 容错能力:
      • N=3:集群可容忍 1个主节点故障(剩余2个 > 3/2=1.5,满足多数派)。
      • N=5:可容忍 2个主节点故障(剩余3个 > 5/2=2.5)。
    • N < 3 的问题:
      • N=1:单点故障,无冗余。
      • N=2:若1个主节点故障,剩余1个节点无法达到多数派(2/2=1,但需要 >1.5),集群无法完成故障转移,会不可用

二、从节点(Slave Nodes / Replica Nodes)

  1. 核心职责:

    • 数据冗余: 作为指定主节点的副本 ,通过异步复制接收主节点的数据更新。
    • 故障转移: 当主节点故障时,符合条件的从节点会升级为新的主节点(由其他主节点投票选出),接管原主节点的槽和数据服务,保障可用性。
    • 读扩展(可选): 客户端可配置从从节点读取数据(但需注意复制延迟可能导致脏读)。
  2. 数量讲究 (M ≥ 1,通常 M = N):

    • 最小冗余要求: 每个主节点至少应有1个从节点 ,否则主节点故障时该分片数据将不可用
    • 高可用推荐: 生产环境通常为每个主节点配置1个从节点 (即 M = N),形成对称结构。
    • 更高冗余: 对关键分片可为1个主节点配置多个从节点(M > N),提升容错能力(如允许同时故障1主+1从)。

三、为什么这样设计?核心原因

设计原则 实现方式 解决的问题
数据分片 (Sharding) N 个主节点平分 16384 个 Slot 水平扩展写能力与存储容量
高可用 (HA) 每个主节点有 ≥1 个从节点(M ≥ N) 避免单点故障,实现自动故障转移
分布式共识 N ≥ 3,基于多数派投票机制 安全地执行故障转移与配置变更
数据冗余 从节点异步复制主节点数据 防止数据丢失(节点故障时)

四、关键流程示例:故障转移(Failover)

  1. 主节点 X 被多数主节点判定为 FAIL(通过心跳超时 + Gossip 传播确认)。
  2. 主节点 X 的从节点(如 S1)发起竞选。
  3. 集群中大多数主节点(≥ N/2 + 1) 对 S1 的升级进行投票。
  4. 若投票通过:
    • S1 被提升为新主节点
    • S1 接管原主节点 X 的所有 Slot。
    • 集群更新拓扑信息,客户端重定向到 S1。

⚠️ 若主节点数 N=2:

当1个主节点故障时,剩余1个主节点无法满足"大多数"(需要 ≥1.5 → 实际需要2票)。故障转移无法触发,集群将不可写!


五、总结与最佳实践

  1. 主节点 (N):
    • 必须 ≥ 3,确保共识机制可用。
    • 负责数据分片与读写。
  2. 从节点 (M):
    • 必须 ≥ N(每个主至少1个从)。
    • 提供数据冗余与故障恢复能力。
  3. 推荐架构:
    N = M(例如 3主3从、6主6从),平衡性能、扩展性与高可用。
graph LR A[客户端] --> B[主节点 M1] A --> C[主节点 M2] A --> D[主节点 M3] B -->|复制| S1[从节点 S1] C -->|复制| S2[从节点 S2] D -->|复制| S3[从节点 S3] subgraph Redis Cluster B & C & D -- Gossip协议 --> 集群状态共识 S1 & S2 & S3 -- 故障检测 --> B & C & D end

最终结论:

Redis 集群通过 N主(分片) + M从(冗余) 的架构,结合 分布式共识(N≥3)自动故障转移(M≥N),实现了高性能、高可用与线性扩展。这是分布式系统设计中的经典权衡(CAP),确保了在分区容忍性(P)下的可用性(A)与一致性(C)的平衡。

相关推荐
超浪的晨1 小时前
Java 单元测试详解:从入门到实战,彻底掌握 JUnit 5 + Mockito + Spring Boot 测试技巧
java·开发语言·后端·学习·单元测试·个人开发
艺杯羹3 小时前
MyBatis 之缓存机制核心解析
java·后端·spring·mybatis
Brookty3 小时前
【Java学习】匿名内部类的向外访问机制
java·开发语言·后端·学习
程序员爱钓鱼3 小时前
Go语言实战案例-快速排序实现
后端·google·go
程序员爱钓鱼3 小时前
Go语言实战案例-链表的实现与遍历
后端·google·go
大佐不会说日语~10 小时前
Redis高可用架构演进面试笔记
redis·面试·架构
超浪的晨11 小时前
Java 实现 B/S 架构详解:从基础到实战,彻底掌握浏览器/服务器编程
java·开发语言·后端·学习·个人开发
追逐时光者12 小时前
一款超级经典复古的 Windows 9x 主题风格 Avalonia UI 控件库,满满的回忆杀!
后端·.net
Python涛哥13 小时前
go语言基础教程:【1】基础语法:变量
开发语言·后端·golang
我命由我1234513 小时前
PostgreSQL 保留关键字冲突问题:语法错误 在 “user“ 或附近的 LINE 1: CREATE TABLE user
数据库·后端·sql·mysql·postgresql·问题·数据库系统