redis-cli --cluster create 是集群初始化命令,非安装命令;需确保所有节点 redis-server 已启动、配置正确(cluster-enabled yes等四条件)、网络全连通、密码一致,并显式传入 -a 和 --cluster-yes。

redis-cli --cluster create 不是安装命令,它只做初始化。所有节点必须提前跑起来、配对、连通,否则会卡住或创建出 cluster_state:fail 的假集群。
redis-server 必须全部启动且日志无报错
别指望 redis-cli --cluster create 帮你拉进程。它不检查端口是否就绪,也不管配置有没有生效。
- 用
ps aux | grep redis或lsof -i :7000确认每个端口(如 7000–7005)上都有redis-server进程在监听 - 立刻查对应日志:
tail -f /path/to/redis_7000.log,重点看有没有Failed to bind、Address already in use或Can't open the cluster config file - 若用 systemd,确认状态是
active (running),不是activating或failed
redis.conf 配置必须满足四个硬性条件
少一个,redis-server 启动后就会静默失败,或者后续握手直接断在 Gossip 阶段。
-
cluster-enabled yes—— 必须开启,不能注释或设为 no -
cluster-config-file nodes-7000.conf—— 路径要存在、可写;比如目录/data/7000得chown redis:redis /data/7000 && chmod 755 /data/7000 -
bind 0.0.0.0(或具体 IP)+protected-mode no—— 否则跨机器无法通信;单机模拟可用bind 127.0.0.1,但多机必须放开 -
port 7000和cluster-announce-port 7000、cluster-announce-bus-port 17000三者得对齐;总线端口默认 =port + 10000,防火墙必须同时放行这两个端口
密码、网络、残留文件这三类问题最常导致 create 卡死
现象通常是命令停在 Can I set the above configuration? (type 'yes' to accept): 或几秒后直接退出,没报错也没提示。
- 所有节点的
requirepass和masterauth值必须完全一致(包括空格),且redis-cli --cluster create命令末尾必须带-a <password></password>和--cluster-yes,顺序不能错:redis-cli --cluster create 192.168.1.100:7000 ... -a 123456 --cluster-yes - 任意两台节点之间,必须能双向 telnet 通对方的业务端口(如 7000)和总线端口(如 17000);CentOS7 默认 firewalld 拦着,要么关掉,要么加规则:
firewall-cmd --permanent --add-port=7000/tcp和firewall-cmd --permanent --add-port=17000/tcp - 每次重试前清掉数据目录下的
nodes-*.conf和appendonly.aof;旧nodes-7000.conf里存着过期拓扑,redis-server启动时会优先加载它,导致新节点拒绝加入
验证真可用比看到 cluster_state:ok 重要十倍
CLUSTER INFO 显示 cluster_state:ok 只说明元数据没冲突,不代表数据能路由、副本能同步、故障能转移。
- 必须用集群模式客户端连接:
redis-cli -c -h 127.0.0.1 -p 7000 -a 123456(-c缺一不可) - 执行
SET testkey abc,再换端口连(如-p 7001)执行GET testkey—— 成功返回值才算跨槽路由正常 - 手动 kill 一个主节点进程,等 30 秒,再查
CLUSTER NODES,看对应从节点是否升为主,且状态变成master并有connected
port + 10000)权限和 SELinux 上下文。Docker 或某些加固过的 CentOS7 环境里,即使开了防火墙,容器或进程也可能因 SELinux 拒绝写入 nodes-*.conf 或绑定总线端口,此时日志里不会明说,只会静默失败。


















