redis cluster 7.0 初始化硬性要求六节点(三主三从),因官方工具校验节点数必须为偶数且不少于6,且需满足分片容错与自动故障转移的最小拓扑:3个主节点保障哈希槽分配与多数派投票,每个主节点配1个从节点实现高可用;少于6节点或未指定--cluster-replicas 1将直接报错退出。

Redis Cluster 7.0 在 Linux 下必须用三主三从共六个节点才能完成初始化,少一个节点 redis-cli --cluster create 就会直接报错退出,不是“建议”,而是硬性要求。
为什么必须是六个节点(三主三从)
Redis Cluster 的 Gossip 协议和故障转移机制依赖奇数个主节点 + 对应从节点来达成多数派(quorum)。7.0 版本延续了这一设计:至少 3 个主节点用于分片容错,每个主节点配 1 个从节点用于自动故障转移。官方工具 redis-cli --cluster create 启动时会校验节点数,若主节点不足 3 个或总节点数不是偶数,会明确提示 Invalid node count: expected even number of nodes, at least 6。
- 单主 + 单从 → 无法分片,不满足 Cluster 模式语义
- 三主无从 → 能启动但无故障转移能力,
cluster-enabled yes不等于高可用 - 五节点(如三主二从)→ 初始化失败,工具拒绝继续
配置文件里最容易漏掉的三项
集群节点启动前,每个 redis.conf 必须显式启用且对齐以下参数,否则节点无法握手、无法写入 cluster 配置文件:
-
cluster-enabled yes:必须开启,不能注释或设为 no -
cluster-config-file nodes-<port>.conf</port>:每个端口要独立文件名,不能全写成nodes.conf,否则多个进程会互相覆盖 -
cluster-node-timeout 5000:超时值建议设为 5000(毫秒),太小易误判下线,太大影响故障转移速度;低于 3000 会导致部分环境反复失联
另外,bind 0.0.0.0 和 protected-mode no 也得开,否则跨机器节点根本连不上。
创建集群时命令参数不能省略 --cluster-replicas 1
用 redis-cli --cluster create 初始化时,如果只列 IP:PORT 列表却不加 --cluster-replicas 1,默认不会分配从节点 —— 所有节点都会被当作主节点,导致后续 CLUSTER NODES 查看全是 master,没有 slave 角色。
正确写法示例(六节点在同一台机测试):
redis-cli --cluster create \ 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 \ 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 \ --cluster-replicas 1
注意:顺序无关,但前三个会被自动选为主节点,后三个成为对应从节点;如需指定主从关系,得用 --cluster-master-id 手动绑定,日常部署不推荐。
密码认证下集群初始化会失败
如果配置了 requirepass,redis-cli --cluster create 默认不带密码,所有节点握手阶段会因 AUTH 失败而中断,日志里出现大量 NOAUTH Authentication required。
解决方法只有两个:
- 初始化阶段先关掉密码(注释
requirepass和masterauth),等集群CLUSTER INFO显示cluster_state:ok后再逐个改配置、重启节点并重设密码 - 使用
--cluster-yes+-a <password></password>组合(仅 Redis 7.0.5+ 支持),例如:redis-cli -a mypass --cluster create ... --cluster-yes
别指望在配置里写 masterauth 就能让初始化自动过 AUTH —— 这个字段只在主从复制链路中生效,跟集群发现过程无关。
集群初始化成功后,nodes-*.conf 文件会自动生成并包含各节点 ID 和角色信息,这个文件千万不能手动编辑或删除,否则下次启动会触发重新握手甚至数据丢失。











