前提:各區已加入同一 tailnet,閘道機已安裝 tailscaled 並啟用 MagicDNS。目標是網路層可預測+閘道層可滾動:人與自動化永遠用穩定名稱連到「該區那一台」,探針與使用者流量在 ACL 上分開,跨區只在摘要層合併狀態。
① 每區獨立
OPENCLAW_HOME → ② 在管理後台建立 MagicDNS 名稱與 ACL → ③ 區內快探針+全域慢探針,合併告警並加退避 → ④ 排定變更視窗滾動重啟。與「誰連哪個 PoP」的選型可一併對照 Halo 式全球入口決策矩陣。每區域 OPENCLAW_HOME 隔離
同一 tailnet 內若共用預設目錄,常出現 session、暫存與模型快取跨區混寫,滾動升級時也難以「只回滾一區」。建議每個 vpshalo 區域一組獨立家目錄,並用環境變數鎖死。
可複現步驟
- 在東京/新加坡/美西等節點各建立目錄,例如
/var/lib/openclaw/<region>,權限僅服務帳號可寫。 - systemd/launchd 的單元檔內寫死
Environment=OPENCLAW_HOME=/var/lib/openclaw/tokyo(範例),避免繼承互動 shell 的錯區路徑。 - 把「會長大的快取」與「可重建的 build 目錄」分卷或分子目錄,方便探針只打輕量健康端點而不掃整棵樹。
# 範例:確認行程讀到的家目錄(實際指令視你的 OpenClaw 發行包而定)
sudo systemctl show openclaw-gateway -p Environment
與低延遲的關係:家目錄與日誌留在「使用者主要互動的那一區」,可減少跨區同步與鎖競爭;選節點時請先對照 公開價格方案 與區域列表,讓閘道與 遠端 Mac 盡量同側。
MagicDNS 記錄與 ACL
固定閘道主機名:在 Tailscale 管理後台 → DNS →「名稱伺服器/額外名稱」區,為每台閘道機設定唯一 MagicDNS 名稱(例:ocgw-tyo、ocgw-sin)。客戶端與 CI 一律使用 ocgw-tyo.<your-tailnet>.ts.net 這類 FQDN,而不要用會隨 DHCP 漂移的區域短名。
ACL 分流(網路+閘道):
- 資料面:只允許
tag:openclaw-clients連到tag:openclaw-gateway的應用埠(例如tcp:443或你實際監聽埠),拒絕預設放行。 - 探針面:為 Prometheus/Blackbox 或自寫腳本單獨打
tag:openclaw-probe,ACL 僅允許它們命中/healthz這類輕量路徑;必要時用子路徑與速率限制,避免全量 API 探測。 - 維運 SSH:維持在 jump 或 Tailscale SSH,與 OpenClaw 應用埠分開審計;基線指令與 Runbook 範本可對照 說明與支援中心 內的公開文件。
變更後在任一筆記型電腦上執行 tailscale status --json | jq,確認目標主機的 DNSName 與預期 tag 一致,再切流量。
探針合併與告警退避
若每區各自對外發 PagerDuty/Slack,跨區同一根因會變成 N 則告警。建議兩層探針:區內高頻(例如 15s)只打本區閘道 /healthz;全域低頻(例如 2–5 min)從「中立觀測點」輪詢各區名稱,用於抓 DNS/路由漂移。
跨區失敗摘要合併:在告警管線(Alertmanager route、自寫 bot 或工作流)先做維度折疊——同一 alertname 在 10 分鐘窗內多區觸發時,合併成一則訊息,正文列出「區域 → 最後一次錯誤摘要/HTTP 碼」。人類讀一則即可決定是否啟動全域變更凍結。
告警退避:對可自動恢復的抖動(單次逾時、單次 502)採 2-of-5 或 連續 3 次再升級 severity;恢復後要求連續成功 2 次才自動 resolve,避免邊界來回。探針請與長連/WebSocket 使用者流量不同來源 tag,避免 ACL 調整時把真實用戶一起掐掉。
變更視窗
建議固定週期(例如週二/週四非尖峰)做「DNS/ACL → 閘道二進位 → 探針閾值」三件套:先改名稱與 ACL 並驗證 dry-run,再在單區 canary 重啟 OpenClaw,最後全區滾動。變更視窗內暫停非緊急的模型快取清理與大批量索引任務,降低誤判為「閘道不健康」的機率。
與 vpshalo低延遲節點服務結合:把「互動最密集」的成員與閘道放在同一地理 PoP;需要大量編譯或跑圖形工作負載時,再在鄰近區加掛 遠端 Mac,由 OpenClaw 只轉發指令與串流,不把巨型 artifact 經閘道中轉。準備好區域與預算後,於文末公開 CTA 一鍵前往購買/開通。