必须同时删除nodes.conf、dump.rdb和appendonly.aof三类文件,缺一不可;因nodes.conf是集群“身份证”,只要存在即被认定已加入过集群,拒绝参与新创建,仅删数据文件无效。

必须同时删掉 nodes.conf、dump.rdb 和 appendonly.aof,缺一不可——只删数据文件或只删配置文件,都会让节点“带记忆上线”,报 Node is not empty。
为什么删了 dump.rdb 还报错?
因为 nodes.conf 是 Redis 集群的“身份证”。只要这个文件存在且非空,Redis 启动时就认定自己“已加入过集群”,直接跳过初始化流程,拒绝参与新集群创建。常见误区是只清数据目录里的 dump.rdb 或 appendonly.aof,却漏掉同级目录下的 nodes.conf。
-
nodes.conf默认和redis.conf在同一目录,文件名固定为nodes.conf(不是nodes-7001.conf等变体) - 用脚本批量启节点时,别指望
redis-cli --cluster create能自动覆盖它——它只会读,不会写 - 容器或 systemd 启动时,
redis用户可能无权删除该文件,需提前检查ls -l nodes.conf权限
怎么确认删干净了?
每个节点目录下执行:ls -l nodes.conf dump.rdb appendonly.aof,三者都应返回 “No such file or directory”。别只看文件名,还要核对 redis.conf 中实际配置的持久化路径:
-
dbfilename的值决定真正加载哪个 RDB 文件(比如设成了redis-7001.rdb,就得删它,不是默认的dump.rdb) -
appendfilename同理,可能被改成了appendonly-7001.aof -
cluster-config-file指定nodes.conf位置,但默认就是nodes.conf,极少改动
删完启动还卡在握手?试试强制重置
节点启动后立即检查状态:redis-cli -p 7001 cluster info | grep cluster_state。如果输出 cluster_state:ok,说明它已自作主张连上了旧集群(哪怕你删了文件,也可能因缓存或残留 socket 复用导致)。
- 停服务:
redis-cli -p 7001 shutdown - 再确认三文件已不存在
- 启动:
redis-server /path/to/redis.conf - 立刻执行:
redis-cli -p 7001 cluster reset hard(注意必须是hard,soft不清节点 ID) - 再跑
redis-cli --cluster create,确保所有节点cluster_state都是fail
生产环境别只靠删文件
删文件适合本地调试或测试集群重建;生产环境若要保留数据但换 IP 或迁移,不能删 nodes.conf,而应改 cluster-announce-ip + cluster reset soft + 手动 CLUSTER FORGET 旧节点。删三文件是最彻底的“断舍离”,但也是最粗暴的——它等于把整个集群当新实例重来,所有槽位分配、主从关系、节点 ID 全部丢失。最容易被忽略的是:删完不验证权限、不核对真实文件名、不检查 cluster_state 是否真为 fail,结果卡在第一步。











