redis-cli --cluster create 命令可初始化三主三从集群,但需六个实例全部启动、配置正确且网络可达;必须指定 --cluster-replicas 1,确保前三个为主节点、后三个为从节点,并正确配置 cluster-enabled yes、protected-mode no、唯一 cluster-config-file 及开放总线端口(如7001对应17001)。

直接用 redis-cli --cluster create 就能完成三主三从集群初始化,但前提是六个 Redis 实例已全部启动、配置正确且彼此网络可达——90% 的失败都卡在这一步,不是命令不会用,是实例没跑起来或端口不通。
redis-cli --cluster create 命令必须带 --cluster-replicas 1
这个参数决定从节点数量分配逻辑。不加会报错或创建出 6 主 0 从;写成 --cluster-replicas 2 会导致 2 主 4 从(不符合三主三从);只有 --cluster-replicas 1 才会让工具自动把 6 个节点两两配对,前三个当主,后三个当从。
典型执行命令:
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
执行后会打印槽位分配预览,输入 yes 确认。注意:所有 IP:PORT 必须可连通,不能混用 localhost 和 127.0.0.1(某些系统解析行为不一致)。
每个 redis.conf 必须显式开启 cluster-enabled yes 且禁用 protected-mode
这是本地单机搭集群最常踩的坑:配置里漏了 cluster-enabled yes,或者 protected-mode yes 没关,导致节点无法握手。
-
protected-mode no是硬性要求,否则节点拒绝来自非本地的集群通信请求 -
bind 0.0.0.0或明确绑定本机局域网 IP(如bind 192.168.56.101),不能只留127.0.0.1(否则跨实例通信失败) -
cluster-config-file必须唯一,比如nodes-7001.conf,不能所有实例共用一个文件名,否则启动时覆盖冲突 -
cluster-node-timeout建议设为5000或15000,太小容易误判下线,太大影响故障转移速度
六个实例必须使用不同端口 + 独立数据目录 + 独立 pid/log 文件
哪怕全在一台机器上跑,也绝不能复用任何路径或端口。常见错误包括:
- 多个实例共用同一个
dir目录 → 启动时互相覆盖dump.rdb,数据丢失 - 多个实例写同一个
pidfile→ 后启的进程被前一个 PID 文件阻塞 - 日志写到同一文件 → 日志内容混乱,无法定位哪个实例出错
- 端口重复(如两个实例都设
port 7001)→ 第二个启动直接失败
推荐目录结构示例:
/opt/redis-cluster/ ├── 7001/ │ ├── redis.conf │ ├── nodes-7001.conf │ ├── dump.rdb │ └── redis.log ├── 7002/ │ ├── redis.conf │ ├── nodes-7002.conf │ └── ... ...
启动顺序和验证不能跳过
先逐个启动六个实例,再运行 create 命令。验证是否真跑起来,别只看 ps aux | grep redis:
- 用
redis-cli -p 7001 ping测试每个端口是否响应PONG - 用
redis-cli -p 7001 cluster nodes查每个节点是否能看到全部 6 行输出(含自己) - 如果某节点显示
fail或只有部分节点,说明cluster-node-timeout设太小,或防火墙/SELinux 拦了集群总线端口(redis-port + 10000,如 7001 对应 17001)
集群总线端口不通是静默失败的高发原因——它不报错,但节点间无法交换 MEET 和 PING,最终 create 会卡住或提示 “Node not responding”。


















