跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

分布式 Redis 集群架构设计与生产级部署

综述由AI生成Redis 集群采用去中心化分布式架构,通过 16384 个哈希槽实现数据分片与负载均衡。节点间利用 Gossip 协议交换状态,支持主从复制与自动故障转移。了集群特点、通信机制及故障恢复流程,并提供了生产级 3 主 3 从的部署方案,涵盖基础配置、安装、集群创建及高可用验证步骤,适用于百万级日活场景。

咸鱼开飞机发布于 2026/3/15更新于 2026/6/1140 浏览
分布式 Redis 集群架构设计与生产级部署

Redis 集群架构

Redis 集群由多个主节点(Master)和对应的从节点(Replica)组成,每个节点负责存储部分数据(分片)。采用去中心化的分布式架构,通过分片 (Sharding) 实现数据的分布式存储。

集群架构不需要哨兵节点

特点

核心机制技术实现设计目标
分布式数据分片采用 16384 Slot 哈希槽分区,数据按 CRC16(key) mod 16384 分配到不同节点负载均衡 & 水平扩展
去中心化架构节点间通过 Gossip 协议交换状态(PING/PONG),无单点依赖高可用 & 故障自愈
主从复制模型每个分片包含 1 主 N 从(建议至少 1 从),主节点故障时从节点自动晋升(Raft 选主)数据冗余 & 快速恢复
客户端重定向客户端直连任意节点,若访问错误分片返回 MOVED 响应并重定向降低代理层开销

数据分片

Redis 集群将整个数据空间划分为 16384 个哈希槽(编号 0~16383),每个槽对应一个数据分片。

  1. 哈希槽

分配算法:slot = CRC16(key) % 16384

定位节点

1. 客户端计算键的哈希槽
2. 查找槽所在节点
3. 直接连接对应节点操作数据

集群维护一个槽到节点的映射表(CLUSTER SLOTS 命令可查看),客户端根据槽号找到对应节点。

动态扩缩容

添加节点:新节点加入时,会从现有节点迁移部分哈希槽(如从 Node A 迁移 1000 个槽到 Node C)。

删除节点:将待删除节点的哈希槽重新分配到其他节点。

集群通信

Redis 集群使用 Gossip 协议传播节点状态信息(如新增节点、故障检测、槽迁移等)

  1. 每秒随机选择 5 个节点中最久未通信的节点进行 PING
  2. 携带自身和其他节点的状态信息
  3. 收到 PING 后回复 PONG 消息
消息类型说明
MEET手动触发新节点加入集群
PING检测节点健康状态,节点定期交换元数据(如槽分配、IP 地址、端口)
PONG对 PING/MEET 的响应,节点定期交换元数据(如槽分配、IP 地址、端口)
FAIL广播故障节点信息,通知其他节点某节点已下线,触发故障转移
PUBLISH发布订阅消息

故障恢复

1、故障检测

主观下线(PFail):节点 A 发现节点 B 超过 cluster-node-timeout 未响应,标记 B 为 PFail。

客观下线(Fail):节点 A 通过 Gossip 协议将 PFail 广播给其他节点,若多数节点确认 B 不可达,则标记 B 为 Fail。

2、故障转移

1)故障检测:超过半数主节点确认某主节点下线

2)满足条件的 Replica 选举:

基于 Raft 算法的选举机制

优先选择复制偏移量最大的,数据最新从节点

3)配置更新:新主节点接管槽位并通知集群

3、槽重新分配

新 Master 接管原 Master 的哈希槽。

其他节点更新槽映射表。

生产级集群部署文档

硬件:3 主 3 从,不用哨兵节点,针对大型公司(日活百万级至千万级,QPS 10 万 +)的场景

主机名IP 地址角色硬件配置服务端口
redis-m1192.168.1.1主节点 116 核/64GB/1TB6379, 16379 (集群总线)
redis-m2192.168.1.2主节点 216 核/64GB/1TB6379, 16379
redis-m3192.168.1.3主节点 316 核/64GB/1TB6379, 16379
redis-s1192.168.1.4从节点 116 核/64GB/1TB6379, 16379
redis-s2192.168.1.5从节点 216 核/64GB/1TB6379, 16379
redis-s3192.168.1.6从节点 316 核/64GB/1TB6379, 16379

说明:

  • 集群共 6 个节点,3 主 3 从,16384 个槽位均匀分布在 3 个主节点。
  • 每个从节点为其对应主节点的副本(由集群自动分配,也可手动指定)。
  • 所有服务器之间网络互通,防火墙开放 6379(Redis)和 16379(集群总线)端口。
  • 主从节点和哨兵节点分开部署,避免资源争用,提高稳定性。

基础配置 - 所有节点

# 设置主机名(根据角色修改)
hostnamectl set-hostname redis-m1 # 主节点 1
hostnamectl set-hostname redis-m2 # 主节点 2
hostnamectl set-hostname redis-m3 # 主节点 3
hostnamectl set-hostname redis-s1 # 从节点 1
hostnamectl set-hostname redis-s2 # 从节点 2
hostnamectl set-hostname redis-s3 # 从节点 3

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 或者开放端口
# firewall-cmd --permanent --add-port=6379/tcp --add-port=26379/tcp
# firewall-cmd --reload

# 关闭 SELinux(临时)
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

安装 Redis-所有节点

# 方式一:源码编译
cd /usr/local/src
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar xzf redis-7.2.4.tar.gz
cd redis-7.2.4
make && make install PREFIX=/usr/local/redis

# 创建数据目录和配置目录
mkdir -p /data/redis/{data,logs,conf,run}
useradd redis -s /sbin/nologin -M
chown -R redis:redis /data/redis /usr/local/redis

# 启动 redis[暂时不启动]
./redis-server /data/redis/conf/redis.conf

配置 Redis 集群节点

主节点配置(redis-m1, redis-m2, redis-m3)

以 redis-m1(192.168.1.1)为例,编辑 /data/redis/conf/redis.conf

# 集群配置
cluster-enabled yes
cluster-config-file /data/redis/conf/nodes-6379.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.1.1 # 替换为本机 IP
cluster-announce-port 6379       # redis 端口
cluster-announce-bus-port 16379  # redis 集群总线端口

# 以下配置和主从架构一致即可
# 基础配置
# 主节点认证密码(可选,建议设置)
# 持久化配置 RDB+AOF
# AOF 配置(可根据需求选择开启)
# 内存管理(根据实际内存调整,留出系统内存)

启动 redis ./redis-server /data/redis/conf/redis.conf

从节点配置(redis-s1, redis-s2, redis-s3)

从节点配置与主节点基本相同,仅 cluster-announce-ip 需修改为对应 IP。

以 redis-s1(192.168.1.4)为例,配置文件同上,只需将 cluster-announce-ip 改为 192.168.1.4。

# 集群配置
cluster-enabled yes
cluster-config-file /data/redis/conf/nodes-6379.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.1.4 # 替换为本机 IP
cluster-announce-port 6379
cluster-announce-bus-port 16379

启动 redis ./redis-server /data/redis/conf/redis.conf

集群配置

在任意一台有 redis-cli 的节点(如 redis-m1)执行:

# 列出所有 6 个节点的 IP:端口,为每个主节点分配 1 个从节点。
./redis-cli -a Redis123 --cluster create \
192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 \
192.168.1.4:6379 192.168.1.5:6379 192.168.1.6:6379 \
--cluster-replicas 1

执行后会显示分配方案,确认后输入 yes。

等待片刻,集群创建成功。

验证

查看集群信息

redis-cli -a Redis123 -c -h 192.168.1.1 cluster info

输出示例:

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_known_nodes:6
cluster_size:3
查看节点列表

redis-cli -a Redis123 -c -h 192.168.1.1 cluster nodes

应列出 6 个节点,包含主从关系及槽位分配

测试数据读写

redis-cli -a Redis123 -c -h 192.168.1.1 set foo bar redis-cli -a Redis123 -c -h 192.168.1.1 get foo

高可用测试
  • 模拟主节点故障
    1. 在 redis-m1 上执行后等待 30s:systemctl stop redis
    2. Redis Cluster 会自动将从节点(例如 redis-s1)提升为新主节点。
  • 恢复原主节点
    1. 启动 redis-m1:systemctl start redis
    2. 它将作为从节点自动加入集群。
  • 手动故障转移

若需将从节点提升为主,可在从节点执行:

redis-cli -a Redis123 -h 192.168.1.4 -p 6379 CLUSTER FAILOVER

性能测试

总写能力:3 个主节点处理写请求,可线性扩展,总写 QPS 约 15 万~24 万(按单节点 5~8 万估算)。

总读能力:如果所有读请求都发送到主节点,则总读 QPS 同样约 15 万24 万;如果允许从节点处理读(通过客户端配置),则总读 QPS 可接近 **30 万48 万**(3 主 +3 从同时服务读,但需注意从节点可能有一定延迟)。

总混合 QPS:在读写比例 2:8 下,总 QPS 可达 20 万~30 万。

目录

  1. Redis 集群架构
  2. 特点
  3. 数据分片
  4. 集群通信
  5. 故障恢复
  6. 生产级集群部署文档
  7. 基础配置 - 所有节点
  8. 设置主机名(根据角色修改)
  9. 关闭防火墙
  10. 或者开放端口
  11. firewall-cmd --permanent --add-port=6379/tcp --add-port=26379/tcp
  12. firewall-cmd --reload
  13. 关闭 SELinux(临时)
  14. 安装 Redis-所有节点
  15. 方式一:源码编译
  16. 创建数据目录和配置目录
  17. 启动 redis[暂时不启动]
  18. 配置 Redis 集群节点
  19. 主节点配置(redis-m1, redis-m2, redis-m3)
  20. 集群配置
  21. 以下配置和主从架构一致即可
  22. 基础配置
  23. 主节点认证密码(可选,建议设置)
  24. 持久化配置 RDB+AOF
  25. AOF 配置(可根据需求选择开启)
  26. 内存管理(根据实际内存调整,留出系统内存)
  27. 从节点配置(redis-s1, redis-s2, redis-s3)
  28. 集群配置
  29. 集群配置
  30. 列出所有 6 个节点的 IP:端口,为每个主节点分配 1 个从节点。
  31. 验证
  32. 查看集群信息
  33. 查看节点列表
  34. 测试数据读写
  35. 高可用测试
  36. 性能测试
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 主流免费 AI IDE 工具盘点与使用指南
  • 技术拆解:用 Web Audio API 实现音乐可视化动效
  • 从高原到云端:一名青海学子的 AI 农业创业实践
  • 开源知识库 RAGFlow 从部署到实战操作详解
  • 缓存算法:LRU 与 LFU 原理及 Java 实现
  • Windows 本地部署 Ollama + OpenClaw 实战指南
  • OpenClaw Linux 本地部署与飞书集成指南
  • BES MQ 与 BES WebServer 功能对比及协同
  • 基于 Kiro 与 AIClient-2-API 免费调用 Claude 大模型实战
  • GitHub 全界面中文化:中文插件安装与配置指南
  • VSCode 扩展 Copilot MCP 使用教程
  • 通义万相 2.1 开源视频生成模型功能解析
  • RT-Thread 二十周年开发者大会:开源基础软件与生产力进化
  • Stable Diffusion 3.5 FP8 模型架构解析与优化技巧
  • AMD显卡AI绘画全攻略:解锁隐藏性能的终极指南
  • 动态规划进阶:多状态模型与序列决策
  • 异构算力部署通义万相 2.1 文生图技术解析
  • Java 消息可靠性投递机制与方案
  • OpenClaw 保姆级超详细教程:小白也能轻松上手的 AI 智能体
  • Dify 与 MySQL 深度整合实战:基于 MCP 协议的数据交互

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online