redis-cli --cluster create 报“No such file or directory”错误,通常因 redis-cli 未加入系统 PATH 环境变量,或使用低于 Redis 5.0 的旧版本(该功能自 5.0 起引入)。

redis-cli --cluster create 为什么总报错 No such file or directory
不是命令没装,是 redis-cli 没在 $PATH 里,或者你用的是旧版 Redis(
检查方法:redis-cli --version,低于 5.0.0 就别硬试了,得升级或手动搭。CentOS/RHEL 默认源里的 Redis 通常太老,建议从 https://download.redis.io/releases/ 下载源码编译,或用 remi 仓库(yum install epel-release && yum install redis6)。
- 编译安装后,确保
src/redis-cli和src/redis-server在$PATH中,否则redis-cli --cluster create会找不到子命令 - 别用
apt install redis-server(Ubuntu 20.04 及以前)——它自带的redis-cli不含--cluster子命令 - 错误信息里出现
No such file or directory,八成是 shell 找不到可执行文件,不是集群逻辑出错
6个节点启动后,redis-cli --cluster create 一直卡在 Waiting for the cluster to join
节点之间连不通,最常见是防火墙或 bind 配置问题。Redis 集群需要两个端口:客户端端口(如 7000)和集群总线端口(7000 + 10000 = 17000),后者常被忽略。
每个节点配置必须显式打开集群支持:cluster-enabled yes,且不能只写 bind 127.0.0.1——这会让其他节点无法握手。
-
bind要填真实 IP 或0.0.0.0(测试环境),同时配protected-mode no - 确认系统级防火墙放行两个端口:
7000和17000(不是6379!) - 节点间用
ping -c2 NODE_IP和telnet NODE_IP 17000实测连通性,别只信“端口开了” - 日志里如果反复出现
Node is not ready或connect timeout,基本就是总线端口不通
redis-cli --cluster create 后 slots 分配不均,有的节点 0 个 slot
命令里没给够节点参数,或者部分节点启动失败但没报错,导致 --cluster create 误以为只有少数几个可用节点。
标准 3 主 3 从集群要传 6 个地址:redis-cli --cluster create 192.168.1.10:7000 192.168.1.10:7001 ... --cluster-replicas 1。漏一个,就少分一组主从。
- 执行前先用
redis-cli -p 7000 cluster nodes | wc -l看每个节点是否能列出全部 6 个节点(刚启动时可能只有自己,等几秒再查) -
--cluster-replicas 1表示每个主节点配 1 个从节点,总共 6 个节点才能满足;若只传 4 个地址,它会强行凑成 2 主 2 从,剩下 0 slot - 分配完成后立刻验证:
redis-cli -p 7000 cluster info | grep "slots_assigned",6 个节点之和必须是16384
集群跑了一阵,某个节点掉线后自动降为从节点,但 failover 没触发
不是所有从节点都能参与选举,得看 cluster-node-timeout 和 cluster-require-full-coverage 的组合行为。
默认 cluster-node-timeout 15000(15 秒),但若主节点只是网络抖动,从节点可能来不及发起投票就被恢复;更常见的是 cluster-require-full-coverage yes 卡住了整个集群——只要有一个哈希槽不可用,所有节点拒绝写入,failover 也被抑制。
- 生产环境建议设
cluster-require-full-coverage no,避免单点故障拖垮全局 - 调低
cluster-node-timeout到5000可加快检测,但太低容易误判(尤其跨机房部署) - 从节点必须有
cluster-announce-ip和cluster-announce-port显式声明自己的可达地址,否则主节点挂了,其他节点根本找不到它来投票
集群配置里最易被跳过的其实是总线端口和 cluster-announce- 系列参数,不是所有文档都强调它们——但少配一个,集群就永远卡在 “waiting for the cluster to join”。

















