Skip to content

集群设置 ​

Cluster 模式的配置、管理界面与 API。

环境变量 ​

启动时读取:

变量必填默认说明
CLUSTER_ENABLED是—"true" 才启用集群
CLUSTER_NODE_ID是—1–49 之间的整数,越界即拒启
CLUSTER_NODE_NAME否node-<id>节点名
CLUSTER_NODE_ADDRESS是—本节点对外可达的 URL
CLUSTER_SECRET是—本节点的初始 secret
CLUSTER_SEEDS否空种子节点地址列表(逗号分隔),仅首次发现使用
CLUSTER_DISCOVERY_INTERVAL否30节点发现周期(秒)
CLUSTER_DEAD_PING_INTERVAL否120死节点重试 ping 周期(秒)
CLUSTER_MAX_PING_FAILURES否3连续失败多少次标 dead
CLUSTER_PUSH_INTERVAL否3Pusher 推送周期(秒)
CLUSTER_BATCH_SIZE否50同步批次大小
CLUSTER_SYNC_LOGS否true"false" 关闭日志同步

如果 CLUSTER_ENABLED != "true",所有 /api/cluster_node/* 接口都返回 集群模式未启用。

后台 → 集群设置 ​

管理员视角的节点列表。详见 节点管理。

节点字段 ​

字段类型说明
node_idint UNIQUE集群内节点编号(1–49)
node_namevarchar(64)节点名
addressvarchar(256)节点 URL(含 http:// 或 https://)
secret_keyvarchar(128)跨节点认证密钥
statusint1=alive / 2=failed
disabledbool软禁用标记
last_heartbeatbigint最近心跳 unix 秒
ping_failuresint连续 ping 失败次数

API 一览 ​

EndpointMethod鉴权说明
/api/cluster_node/GETRoot全量节点列表(含 is_self 标识本节点)
/api/cluster_node/:idGETRoot单节点详情
/api/cluster_node/POSTRoot注册新节点
/api/cluster_node/PUTRoot改节点名 / 地址 / secret
/api/cluster_node/:idDELETERoot软禁用(设 disabled=true)
/api/cluster_node/:id/enablePOSTRoot重新启用
/api/cluster_node/ping/:idGETRoot主动 ping

注册新节点 ​

请求体:

json
{
  "node_id": 1,
  "node_name": "node-cn",
  "address": "https://cn.example.com",
  "secret": "<对端的 CLUSTER_SECRET>"
}

约束:

  • node_id ∈ [1, 49]
  • address 不能为空
  • secret 不能为空

自注册(启动时自动写自身记录)已覆盖大多数场景,手动新增主要用于调试 / 临时让节点互认。

「本节点」徽章 ​

列表接口的 is_self: bool 字段标识当前节点(n.NodeId == cluster.NodeID)。前端用此徽章高亮「这是当前节点」。

删除 vs 禁用 ​

操作API效果
删除(软)DELETE /api/cluster_node/:iddisabled=true + status=2
启用POST /api/cluster_node/:id/enabledisabled=false + status=1 + 清零失败次数
物理删除手动 SQLDELETE FROM cluster_nodes WHERE node_id = ?

当前节点不能被禁用(controller 显式拦截)。

主动 Ping ​

GET /api/cluster_node/ping/:id 向目标节点发起 ping:

  • 成功 → 返回 { data: <对方响应> }
  • 失败 → { success: false, message: <失败原因> }

常用于排查「为什么某节点状态是 dead」。

常见问题 ​

  • 环境变量都对了但接口返回「集群模式未启用」:检查 CLUSTER_ENABLED 是否真的等于字符串 "true"
  • CLUSTER_NODE_ID 越界:必须是 1-49 的整数;超出直接拒启

相关 ​