clustervps 多节点上跑 OpenClaw 的平台组,稳定来自三件事:每台 Mac 上配置模板按同一契约合并;晋升时工作流 SQLite 不与 rsync 抢锁;金丝雀只是负载均衡上可一键恢复的书签。最小集:每租户三套 drop-in 目录、一个合并顺序、一条已聚合 Doctor 与 synthetic 的就绪面。

本文假设 LB 后至少两台网关机,另有一台持 git 的构建/预发机;除 rsync 或 CM、编号 YAML 与保存的权重 JSON 外不必上重型编排。比例门闩与技能切片见《多 AZ 金丝雀与技能包》;目录与 Webhook 摘要纪律见《租户拆分、Doctor 与摘要合并》;openclaw@2026.4.x 滚动与 peer 顺序见《滚动升级与金丝雀回滚》。三篇与本 HowTo 互为 spine,避免「片段合了、流量却分裂脑」。

分租户配置目录

启用 launchd 前,各节点先镜像 /etc/openclaw/tenants/<租户>/,其下 gateway.dworkflows.ddoctor.d 只同步模板;重状态落在 /var/db/openclaw/workflows/<租户>/,晋升时绝不 rsync。Doctor 片段写清合并后值班仍要成立的不变量

  • 前缀定序:10-base.yaml20-overlay.yaml,避免两队争 merge 先后。
  • parity:全集群 openclaw config hash --tenant digest 不一致则禁止晋升。
  • 秒级回滚:tenants/<租户>.prev 链到上次好树,一次原子翻转目录。

密钥进 /var/db/openclaw/secrets/<租户>,POSIX ACL 各机一致,片段留在可 diff 范围。扩容网关前可先打开公开 价格页对齐规格。

模板合并策略

三层:共享 00-platform.yaml、租户编号覆盖、仅金丝雀镜像存在的 99-canary.yaml。守护进程按字典序走目录;标量后者胜,组合块须扩展不可硬改形状,保证 openclaw config lint --tenant 仍无环。构建机 dry-run 的有效配置贴工单,评审不必 SSH。

2026 网关配置热重载边界。上游权重、额外 fragment include、通知器扇出预算可热应用且不断既有 TLS 会话;监听绑定、需客户端证书的端口、mTLS 信任包、工作流根路径仍要:在片段里设 MAINTENANCE=drain,等在飞作业结束,launchctl 干净重启后再清标志。不要指望 reload 完成密钥轮换——文件原子替换后换进程边界读环境。平台 README 用表列出「reload 类 / restart 类」键;各机 openclaw.lock 必须一致,否则片段 schema 会无声分叉。

周五改监听却期待 SIGHUP「魔法」是事故温床;合并前先在 staging 对照已安装构建核对 flag。

金丝雀节点选择与回滚

每晋升窗口只选一台已挂 99-canary.yaml 的网关,把约 5% LB 权重打上去,稳定同伴保持旧 symlink。至少跨越两个合并就绪探针周期再看错误率、p95 队列与合并 JSON。金丝雀只能消费自有工作流子目录,避免坏合并写坏兄弟机上的生产 SQLite。

回滚是卫生而非丢脸:改权前导出权重 JSON 进工单,月度演练一键恢复。合并面一红:金丝雀权重归零 → tenants/<租户> 指回 .prev;若动到 restart 类键只重启该 Mac。同伴通常无需联控,除非你过早抬了共享锁版本。

合并 Doctor 与健康检查

每网关一条就绪 URL,JSON 合并 openclaw doctor --json、经本机监听的 synthetic、以及轻量磁盘/APFS 压强。LB 与人共用此面,禁止事故时出现两套矛盾的 shadow 端点。Doctor 黄而 synthetic 绿:HTTP 200 + "status":"degraded",流量可走、告警仍响。

#!/usr/bin/env bash
set -euo pipefail
TENANT="${TENANT:-demo}"
/usr/local/bin/openclaw doctor --tenant "$TENANT" --json >/tmp/oc-doctor.json
/usr/bin/curl -fsS --max-time 2 "https://127.0.0.1:8443/healthz" -o /tmp/oc-gateway.json
/usr/bin/python3 - <<'PY'
import json
d=json.load(open("/tmp/oc-doctor.json")); g=json.load(open("/tmp/oc-gateway.json"))
print(json.dumps({"tenant":"demo","doctor_ok":d.get("ok"),"gateway":g.get("status")}))
PY

可交给 launchd 每分钟执行;边缘代理直接 scrape 输出或包一层极小 HTTP。接入 Notifier digest 时把字段并进同一 JSON,与租户篇对齐。

最小可复现清单

  1. bootstrap:各机 openclaw version --jsonopenclaw.lock 对齐。
  2. 只同步模板:rsync 编号片段,排除 workflow SQLite 与密钥挂载。
  3. lint + hash:openclaw config lint --tenant 后全集群 config hash
  4. 金丝雀 + 合并面:约 5% 权重,观察合并 JSON;staging 故意打坏一条 synthetic 验证告警链路。

清单跑通后,这套 clustervps 多节点节奏可以按月演练而不扰客户。需要再加独占网关时,用与预发相同的规格走公开 购买页扩容量;值班台边固定打开 帮助中心站点首页,动流量前全队先对齐路径与书签。

本文为运维建议。OpenClaw 具体发行版参数会变,请在 staging 对照已安装构建校验 flag;LB API 因厂商而异,shell 仅作模式示意。
公开页,无需登录即可浏览

用可复现步骤扩容 Mac 网关,而不是靠英雄脚本

先打开 套餐与价格帮助文档 做团队对齐;需要下单再走 购买页。以下链接均为公开入口,任何人无需登录控制台即可查看。

查看 Mac 套餐 打开帮助中心