当前位置: 首页 > news >正文

Redis搭建分片集群

一、前言:为什么需要 Redis 分片集群?

当你的 Redis 单实例面临以下问题时:

  • ❌ 内存超过 32GB,fork 阻塞严重
  • ❌ QPS 超过 10万,单机 CPU 成瓶颈
  • ❌ 数据量超 50GB,RDB/AOF 恢复慢如蜗牛

Redis Cluster(分片集群)就是官方提供的分布式解决方案,它能:
自动分片(Sharding):将数据分散到多个节点
高可用:每个分片支持主从复制 + 自动故障转移
去中心化:无 Proxy,客户端直连节点
线性扩展:加机器即可扩容

本文将手把手教你从零搭建一个 3 主 3 从的 Redis Cluster,并验证其高可用能力。


二、集群规划

2.1 节点分配(最小生产可用规模)

节点IP端口角色说明
node1192.168.1.107001master分片 0
node2192.168.1.107002master分片 1
node3192.168.1.107003master分片 2
node4192.168.1.107004slavenode1 的从
node5192.168.1.107005slavenode2 的从
node6192.168.1.107006slavenode3 的从

💡单机测试:可在一台机器用不同端口模拟
生产建议:6 台物理机(3 主 3 从跨机房部署)

2.2 分片原理

  • Redis Cluster 使用16384 个哈希槽(slot)
  • 每个 key 通过CRC16(key) % 16384计算所属 slot
  • 每个 master 负责一部分 slot(如 0~5460, 5461~10922, 10923~16383)

三、第一步:准备 Redis 配置文件

为每个节点创建独立配置目录:

mkdir -p /opt/redis-cluster/{7001,7002,7003,7004,7005,7006}

3.1 创建通用配置模板(redis.conf)

# /opt/redis-cluster/redis.conf.template port 7001 # 每个实例修改为对应端口 cluster-enabled yes # 启用集群模式 cluster-config-file nodes.conf cluster-node-timeout 15000 # 节点超时(毫秒) appendonly yes # 开启 AOF(推荐) protected-mode no # 关闭保护模式(生产环境应设密码) bind 0.0.0.0 daemonize yes dir /opt/redis-cluster/7001 # 每个实例修改为对应目录

3.2 为每个节点生成配置

for port in {7001..7006}; do cp redis.conf.template /opt/redis-cluster/$port/redis.conf sed -i "s/port 7001/port $port/g" /opt/redis-cluster/$port/redis.conf sed -i "s/dir .*/dir \/opt\/redis-cluster\/$port/g" /opt/redis-cluster/$port/redis.conf done

四、第二步:启动所有 Redis 实例

for port in {7001..7006}; do redis-server /opt/redis-cluster/$port/redis.conf done

验证进程:

ps -ef | grep redis-server # 应看到 6 个进程,端口 7001~7006

五、第三步:创建集群(使用 redis-cli --cluster)

⚠️Redis 5.0+ 才支持--cluster命令

5.1 执行集群创建命令

redis-cli --cluster create \ 192.168.1.10:7001 \ 192.168.1.10:7002 \ 192.168.1.10:7003 \ 192.168.1.10:7004 \ 192.168.1.10:7005 \ 192.168.1.10:7006 \ --cluster-replicas 1 \ # 每个主节点配 1 个从节点 --cluster-yes # 自动确认

5.2 输出解读

>>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.1.10:7004 to 192.168.1.10:7001 Adding replica 192.168.1.10:7005 to 192.168.1.10:7002 Adding replica 192.168.1.10:7006 to 192.168.1.10:7003 >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join >>> Performing Cluster Check (using node 192.168.1.10:7001) ... OK

成功!集群已创建,slot 自动分配。


六、第四步:验证集群状态

6.1 查看集群信息

redis-cli -p 7001 cluster info

关键字段:

  • cluster_state:ok→ 集群正常
  • cluster_slots_assigned:16384→ 所有 slot 已分配

6.2 查看节点拓扑

redis-cli -p 7001 cluster nodes

输出示例:

a1b2c3d4... 192.168.1.10:7001@17001 master - 0 1700000000 1 connected 0-5460 e5f6g7h8... 192.168.1.10:7004@17004 slave a1b2c3d4... 0 1700000000 4 connected ...
  • master:主节点
  • slave <master-id>:从节点,指向主节点 ID
  • connected 0-5460:负责的 slot 范围

6.3 测试数据读写

# 写入 key(自动路由到对应分片) redis-cli -c -p 7001 set user:1001 "Alice" redis-cli -c -p 7001 set user:1002 "Bob" # 读取(-c 参数启用集群模式,自动重定向) redis-cli -c -p 7001 get user:1001

🔑必须加-c:否则会报(error) MOVED 12345 192.168.1.10:7002


七、第五步:模拟故障转移(高可用验证)

7.1 手动杀死主节点

# 杀死 7001(假设它负责 user:1001) kill $(pgrep -f "7001")

7.2 观察从节点升主

等待 15~30 秒(cluster-node-timeout),查看集群状态:

redis-cli -p 7004 cluster nodes

→ 应看到7004的角色变为master,且接管 slot0-5460

7.3 验证数据可读写

redis-cli -c -p 7004 get user:1001 # 仍可读取 redis-cli -c -p 7004 set user:1003 "Charlie" # 可写入

7.4 原主恢复后自动变为从节点

重启 7001:

redis-server /opt/redis-cluster/7001/redis.conf

再次执行cluster nodes→ 7001 变为slave,同步新主(7004)数据

自动故障转移成功!


八、客户端连接示例(Spring Boot)

8.1 Maven 依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

8.2 application.yml 配置

spring: redis: cluster: nodes: - 192.168.1.10:7001 - 192.168.1.10:7002 - 192.168.1.10:7003 - 192.168.1.10:7004 - 192.168.1.10:7005 - 192.168.1.10:7006 lettuce: cluster: refresh-period: 30s # 定期刷新拓扑

8.3 使用 RedisTemplate

@Autowired private RedisTemplate<String, Object> redisTemplate; public void test() { redisTemplate.opsForValue().set("cluster:key", "hello"); // 自动路由 String value = (String) redisTemplate.opsForValue().get("cluster:key"); }

✅ Spring Data Redis自动处理 MOVED/ASK 重定向,无需手动干预!


九、生产环境最佳实践

✅ 必须遵守

  1. 至少 3 主 3 从(满足多数派,容忍 1 节点故障)
  2. 主从节点跨物理机/可用区部署(防单点故障)
  3. 开启 AOF + RDB 混合持久化aof-use-rdb-preamble yes
  4. 设置密码requirepass+masterauth

✅ 推荐配置

# redis.conf cluster-node-timeout 15000 cluster-require-full-coverage no # 允许部分 slot 不可用(避免全集群不可用) slowlog-log-slower-than 10000 # 记录慢查询

🚫 避免的操作

  • 跨 slot 的多 key 操作(如MGET key1 key2,若 key1 和 key2 不在同一 slot)
    • 解决方案:使用Hash Tag,如user:{1001}:nameuser:{1001}:age会落在同一 slot
  • 大 key / 热点 key(导致分片负载不均)

十、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

http://www.jsqmd.com/news/479765/

相关文章:

  • 2026河南牛奶代理品牌选择指南:数据、趋势与核心品牌解析 - 2026年企业推荐榜
  • Redis分片集群散列插槽
  • 2026年衬衫现货厂家口碑评测:谁在领跑职业装供应市场? - 2026年企业推荐榜
  • 2026制造企业爱采购开户优质服务商推荐指南:GEO是什么/GEO运营/爱采购全店托管/爱采购哪家好/爱采购效果/选择指南 - 优质品牌商家
  • 2026泡沫混凝土发泡设备品牌推荐指南:泡沫混凝土设备机器、泡沫轻质混凝土设备、混凝土发泡机设备、现浇泡沫混凝土选择指南 - 优质品牌商家
  • 2026年热门的焊接钢筋网片厂家推荐:电焊钢筋网片实力品牌厂家推荐 - 品牌宣传支持者
  • 2026年吉林界石直销厂商综合实力与选购指南 - 2026年企业推荐榜
  • 2026广州搬家服务优质推荐榜专业透明靠谱:广州蚂蚁搬屋、广州公司搬迁、广州别墅搬家、广州天河搬家、广州家庭搬家选择指南 - 优质品牌商家
  • 2026热收缩膜包装机优质厂家推荐榜:包装机设备厂家/枕式热收缩包装机厂家/热封口包装机厂家/热收缩膜包装设备厂家/选择指南 - 优质品牌商家
  • 2026西南奢品贵金属回收优质机构推荐榜:贵金属金条金币回收电话、贵金属钯金回收电话、贵金属铂金回收电话、贵金属首饰回收电话选择指南 - 优质品牌商家
  • 2026会议音响套装优质品牌推荐选购指南:大礼堂音响/学校教室音响/平板无纸化会议/报告厅音响/无纸化会议终端/选择指南 - 优质品牌商家
  • 2026年知名的碟片式焊接波纹管工厂推荐:碟片式焊接波纹管源头工厂推荐 - 品牌宣传支持者
  • 川内招聘找工作服务品牌推荐指南:普工劳务派遣、正规劳务外包、短期工劳务外包、短期工找工作、高薪招聘找工作、保安劳务派遣外包选择指南 - 优质品牌商家
  • 全国专业烤漆门优质厂家推荐榜:强化门墙柜、推拉门墙柜、无烤漆门、民宿烤漆门、环保烤漆门、门墙柜一体、门墙柜定制选择指南 - 优质品牌商家
  • 投研人如何养“虾“?
  • 2026成都名包回收靠谱机构推荐指南:同城上门名包回收、名牌包回收、奢侈品包包回收、宝格丽名包回收、欧米茄名表回收选择指南 - 优质品牌商家
  • 大模型和芯片工程师都会犯错——凭什么用零缺陷标准要求前者?
  • ChatGPT:人工智能对话引擎的演进与影响
  • 2026手游平台搭建服务商推荐榜:手游平台系统、手游联运平台系统、搭建手游平台、游戏联运平台、游戏聚合发行系统选择指南 - 优质品牌商家
  • 2026高性价比三维数字孪生定制厂家推荐榜:三维数字孪生定制、展厅多媒体、展厅电子沙盘、数字展厅设计选择指南 - 优质品牌商家
  • 2026年热门的活动脚手架厂家推荐:脚手架搭设实力工厂推荐 - 品牌宣传支持者
  • 2026年比较好的施工围挡工厂推荐:施工围挡厂家精选 - 品牌宣传支持者
  • NumPy:ndarray 数组属性
  • WinClaw CLI 工具开发指南
  • 2026环保开关连接器优质供应商推荐指南:沉板开关、硅胶开关、精密连接器、翻盖式连接器、薄膜开关、超薄连接器、镀金连接器选择指南 - 优质品牌商家
  • 告别OSPF!EVE-NG专业版+BGP Unnumbered打通Underlay的完整实战
  • 川渝鄂名表维修保养公司推荐指南:名表保养维修价格电话、名表保养维修服务电话、名表保养维修门店电话、奢侈品回收公司电话选择指南 - 优质品牌商家
  • Debian/Ubuntu 18.04 上安装 GLIBC 2.28 (2026)
  • 2026年薯类深加工全粉设备优质品牌推荐:雪花全粉辊筒干燥机/预糊化淀粉辊筒干燥机/马铃薯全粉加工设备/马铃薯全粉生产线/选择指南 - 优质品牌商家
  • 2026连接器优质供应商推荐榜适配多行业需求:翻盖式连接器、薄膜开关、超薄连接器、镀金连接器、防尘开关、防水开关选择指南 - 优质品牌商家