redis-cli --cluster create是“一键初始化”而非安装工具,需确保所有redis-server进程已启动、配置正确(cluster-enabled yes等)、节点间tcp全连通、密码一致且无残留文件,否则会卡住或创建失败。

redis-cli --cluster create 不是“一键安装”,而是“一键初始化”——它只在所有 Redis 节点已就绪的前提下,把它们纳入同一个集群视图。直接运行却失败?八成是前置条件没满足。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
redis-server 进程必须全部启动且端口就绪
redis-cli --cluster create 完全不检查进程是否存在,也不拉起任何服务。它只尝试连接你列出的每个地址+端口,连不上就卡住或报错。
- 用 ps aux | grep redis 或 lsof -i :7000 确认每个节点(如 7000~7005)上都有 redis-server 实例在运行
- 启动后立刻查日志:tail -f /path/to/redis.log,确保没有 Failed to bind、Address already in use 或 Permission denied
- 若用 systemd,确认状态为 active (running),不是 activating 或 failed
- Docker 环境下,所有容器必须在同一个自定义 bridge 网络中,且 redis.conf 中的 cluster-announce-ip 设为容器内可路由的 IP(非 127.0.0.1)
redis.conf 配置必须满足集群最低要求
集群模式不是开个开关就行,几个关键项配错会导致静默失败或后续无法写入元数据。 -cluster-enabled yes 必须启用(默认是 no)
- cluster-config-file nodes-7000.conf 路径必须可写:Redis 启动后会持续更新该文件,权限不足会静默退出(尤其 Docker + SELinux 场景,挂载卷要加 :z)
- bind 0.0.0.0 或明确列出监听 IP(不能只留 bind 127.0.0.1,否则其他节点连不上)
- protected-mode no(否则跨主机连接被拒)
- 若设密码,requirepass 和 masterauth 值必须完全一致(含空格),且所有节点配置相同
redis-cli --cluster create 参数必须严格匹配节点数
填错一个参数,集群拓扑就乱了,CLUSTER INFO 显示 cluster_state:ok 但实际无法写入。
- --cluster-replicas 1 表示“每 1 个主节点配 1 个从节点”,6 个节点时自动划为 3 主 3 从;若填 2,命令直接报错 Invalid number of replicas
- 节点地址列表必须写全全部 6 个(如 192.168.1.10:7000 192.168.1.10:7001 ...),漏掉任意一个,该节点不会出现在集群视图中
- 密码必须用 -a <password></password> 显式传入,且放在 create 子命令之后、地址列表之后、--cluster-yes 之前,顺序错误(如 redis-cli -a pwd --cluster create ...)会导致认证失败卡在交互提示
- 每次重试前清空各节点的 nodes-*.conf 和 appendonly.aof,残留旧文件可能让新集群加载错误拓扑
验证集群是否真可用,不能只看 cluster info
CLUSTER INFO 返回 cluster_state:ok 只说明元数据一致,不代表键能路由、副本能同步、故障能转移。
- 必须用集群模式客户端连接:redis-cli -c -h 127.0.0.1 -p 7000 -a 123456(-c 缺不可)
- 执行 SET testkey abc,再 GET testkey,确认能读写
- 手动 kill 一个主节点进程,等 30 秒后执行 CLUSTER NODES,观察对应从节点是否升主、状态是否变为 master
- 查看剩余节点日志,确认有 Failover auth granted、Setting node ... as master 类似记录
真正容易被忽略的是:节点间 TCP 全连通 ≠ 本地能 telnet 自己。CentOS 8 默认 firewalld 开放了 7000–7005,但忘了开放 +10000 的集群总线端口(如 7000 对应 17000),导致心跳超时、节点失联。别只扫一眼端口列表,得逐个验证 telnet other_ip 17000。










