マージ順の一致・ワークフロー隔離・カナリア戻しで、clustervps 多ノードの OpenClaw を短いドリルに落とす四見出しです。
カナリアと skills.d、テナント分割・doctor、マルチ AZ 網関と併読。
テナント別設定ディレクトリ
全 Mac で /etc/openclaw/tenants/<tenant>/ に gateway.d 等を揃え、番号付き YAML で優先順位を固定。SQLite は /var/db/openclaw/workflows/<tenant>/ に隔離し rsync 除外。openclaw config hash --tenant が一致しない限り昇格しない。tenants/<tenant>.prev で前版へ原子フリップ。台数は料金公開ページで先に押さえる。
設定テンプレートのマージ戦略
00-platform→テナント上書き→99-canary を辞書順に重ね、複合ブロックは拡張のみ。openclaw config lint --tenant で閉路を潰し、ドライラン結果をチケットに貼る。
2026 網関ホットリロード境界。重み・include・Notifier 扇出は TLS 維持で反映しやすい。bind・認証ポート・mTLS 束・ワークフロー根はドレイン後再起動。
MAINTENANCE=drain→空→launchd。秘密はプロセス境界で読み直す。README に reload 級/restart 級を表記し、openclaw.lock をノード横断で揃える。
カナリアノードの選定とロールバック
ゲートウェイ 1 台に LB 重み約 5%、残りは旧 symlink。2 プローブ周期はエラー・p95・合成 readiness を見る。dequeue はカナリア専用副ディレクトリのみ。戻しは保存済み重み JSON と .prev、restart 級だけ当該ホスト再起動。共有ロックを先に上げなければピアは無傷。
doctor とヘルスチェックの統合
doctor --json とループバック /healthz を 1 URL の JSON に束ね、黄なら degraded で 200 を維持。
#!/usr/bin/env bash
set -euo pipefail
T="${TENANT:-demo}"
/usr/local/bin/openclaw doctor --tenant "$T" --json >/tmp/d.json
curl -fsS --max-time 2 https://127.0.0.1:8443/healthz -o /tmp/g.json
python3 -c 'import json;d=json.load(open("/tmp/d.json"));g=json.load(open("/tmp/g.json"));print(json.dumps({"tenant":"demo","doctor_ok":d.get("ok"),"gateway":g.get("status")}))'
最小チェックリスト
- バージョンとロックを全ノード一致。
- フラグメントのみ rsync、DB/秘密は除外。
- lint→hash をクラスタ横断で照合。
- 5% カナリア→観測→倍率 or LB JSON 復元。
- ステージングで readiness を一度赤確認。
- チケット・演者・digest を昇格ログへ。
月次ドリルで固定。台数は購入・料金・ヘルプの公開ページで先に合意。
クラスタ運用メモ。フラグはリリースノートを正とし、数値は目安で SLA ではありません。