Redis 5.0起不再需要Ruby环境,因集群管理功能已完全由redis-cli的C实现替代,redis-trib.rb被官方移除且不兼容新协议。

redis-cli --cluster create 是唯一需要的命令,Ruby 环境完全不需要装,也不该再碰 redis-trib.rb。
为什么不用 ruby 了?
Redis 5.0 把集群管理逻辑从 Ruby 移到了 redis-cli 的 C 实现里。这不是“可选替代”,而是官方彻底移除支持:redis-trib.rb 在 5.0+ 版本中已不随源码发布,即使你硬凑出 Ruby 环境,脚本也无法识别新协议或节点状态变化。强行用旧方式会卡在握手、槽分配或 CLUSTER NODES 解析阶段。
redis-cli --cluster create 必须满足的启动前提
集群能跑起来,不取决于命令多炫,而在于节点是否“干净”且配置一致:
- 所有节点必须已启动,且
redis.conf中开启cluster-enabled yes,禁用protected-mode yes(或显式绑定公网/内网 IP) - 每个节点的
cluster-config-file必须是独立路径(不能共用同一个nodes.conf),否则启动时会报Node config file nodes.conf is already used! - 6 个节点不是硬性要求,但至少要 3 主 3 从(即
--cluster-replicas 1),否则create会拒绝执行并提示Invalid argument: --cluster-replicas 0 - 所有节点的
cluster-node-timeout值建议统一(如15000),否则故障检测和 failover 行为可能不一致
创建命令里最容易错的参数组合
常见失败不是语法错,而是参数语义理解偏差:
-
--cluster-replicas 1指“每主配 1 从”,不是“总共 1 个从节点”。传2就得有 6 节点(3 主 × 2 从 = 6),传1就得至少 6 节点(3 主 + 3 从) - 节点列表顺序决定主从分配:前 N 个是主节点,后 N×replicas 个自动作为从节点加入对应主节点。例如 6 个地址 +
--cluster-replicas 1,前 3 是主,后 3 按顺序分别成为它们的从 - 不加
--cluster-yes会卡在交互式确认,Docker 或脚本中必须带上,否则阻塞 - 如果某节点监听的是
0.0.0.0但cluster-config-file里记录的是127.0.0.1(常见于容器或 bind 配置疏漏),集群握手会失败,日志出现Node 127.0.0.1:x does not appear to be working
验证集群是否真正可用,别只信 “OK”
命令末尾打印 [OK] All 16384 slots covered. 只说明槽分配完成,不代表读写正常:
- 用
redis-cli -c -h node_ip -p port cluster nodes看输出里是否有fail?或noaddr标记;每个主节点下应有master状态,从节点对应slave+ 正确的 master ID - 连任意节点执行
redis-cli -c -h ip -p port set foo bar,再换一个节点 get,确认 key 被重定向且返回值正确 —— 这一步能暴露MOVED协议解析或客户端重试逻辑问题 - 检查各节点
nodes.conf文件是否都生成了且内容含彼此 ID 和 IP:port,缺失意味着部分节点未真正加入集群视图
bind / protected-mode 的协同设置。哪怕命令敲对了,这两个点一错,集群就卡在“看起来建好了,实际无法分片或故障转移”。


















