首页/数据/Redis 进阶速查/cluster-enabled:启用集群模式

cluster-enabled:启用集群模式

cluster-enabled yes 打开集群模式,实例启动后进入集群状态;未加入任何节点的实例处于「集群状态不可用」但可执行 CLUSTER MEET 加入。

Redis 进阶速查数据更新于 2026-10-13

cluster-enabled 总开关

cluster-enabled yes 决定实例是否以集群模式运行:打开后键空间被划分为 16384 个槽,键按 CRC16 取模落到具体槽,再由负责该槽的节点提供服务;实例同时改用单库模型,并依赖客户端跟随重定向找到正确节点。刚启动、还没加入任何拓扑的集群实例也能运行,只是 CLUSTER INFO 里的 cluster_state 为 fail,需要 CLUSTER MEET 或 redis-cli --cluster create 把它纳入集群。

基本信息

开关cluster-enabled yes,默认 no
状态文件cluster-config-file 指定,例如 nodes-7000.conf,由 Redis 自动维护
节点超时cluster-node-timeout,单位毫秒,默认 15000
数据库集群模式只有 db0,SELECT 到其他库会直接报错
槽位数量16384 个,全部有节点负责时 cluster_state 才会是 ok
数据兼容快照中存在 db0 以外的键时,集群模式无法加载该文件

典型使用场景

  • 新建分片集群:每台机器按端口生成一份独立配置,再用创建工具一次性分配槽与主从
  • 本地验证:单机起多个实例搭最小拓扑,验证客户端重定向与多 key 限制
  • 扩容准备:新实例先以集群模式启动并加入拓扑,之后再迁移槽
  • 排查 CLUSTERDOWN:确认是槽未分配完整,还是节点之间无法互相通信
  • 灰度上线:先在预发确认客户端支持重定向,再切生产流量

配置与状态检查

配置与状态检查
port 7000
cluster-enabled yes                  # 打开集群模式
cluster-config-file nodes-7000.conf  # 集群状态文件,Redis 自动维护,不要手改
cluster-node-timeout 15000           # 节点失联判定阈值,毫秒
dir /var/lib/redis/7000              # 每个实例独立目录,避免状态文件互相覆盖
appendonly yes

组网与验证

组网与验证
redis-cli -p 7000 CLUSTER INFO | grep -E 'cluster_state|cluster_slots_assigned|cluster_known_nodes'
redis-cli -p 7000 CLUSTER MYID                      # 本节点 ID,加入拓扑时用于确认身份
redis-cli -p 7000 CLUSTER NODES                      # 当前节点认知的全部节点与槽归属
redis-cli -p 7000 CLUSTER MEET 10.0.0.12 7000        # 与另一节点握手组网
redis-cli -p 7000 SET k1 v1                          # 槽未分配时会返回 CLUSTERDOWN Hash slot not served

相关配置与作用

配置默认值作用
cluster-enabledno是否以集群模式运行,改动需要重启实例
cluster-config-filenodes.conf持久化节点 ID、槽归属与拓扑信息
cluster-node-timeout15000判定节点失联的毫秒阈值,影响故障切换速度
cluster-require-full-coverageyes是否要求全部槽都有节点负责,为 yes 时部分槽不可用会导致整集群拒服务
cluster-allow-reads-when-downno集群状态为 fail 时是否仍允许读请求
cluster-config-file 记录的是这份实例在集群里的身份(节点 ID、槽归属与握手信息)。同一台机器上跑多个实例时,必须各自使用独立的配置文件与独立 dir;把某个实例的状态文件复制给新实例,会造成节点身份冲突,槽归属变得难以收拾。
从单机切到集群不是改一个开关的事:集群模式只有 db0、不支持跨槽的多 key 命令与事务,SELECT 多库与 Lua 跨槽脚本都会失效。切换前要先完成数据落库、键命名(哈希标签)与应用改造,并在预发环境实测客户端重定向。

易错点

  • 已带数据的单机实例直接改成 cluster-enabled yes 启动:只要快照里存在 db0 以外的键就会加载失败,需要先把数据迁移到 db0
  • 手工编辑或删除 cluster-config-file,丢失节点身份与槽记录,可能造成槽重复归属、节点被判失联甚至需要重建集群
  • cluster-require-full-coverage 保持默认 yes 时,只要有一个槽没有节点负责,整个集群就拒绝服务,表现为大面积 CLUSTERDOWN
  • 单节点集群模式下执行 SET 得到 CLUSTERDOWN Hash slot not served,误判为配置写错,实际只是槽还没分配
  • 同一台机器上的多个集群实例共用 dir 或配置文件,重启后快照与状态文件互相覆盖,节点 ID 冲突

数据来源与参考

  • Redis 官方文档:Cluster 配置说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌