負荷分散戦略・セッション外部化・クロスリージョン Hot Migration 6ステップ
AI Agent がまだ単一ノードで稼働していませんか?複数の OpenClaw インスタンスが異なる地域のリモート Mac ノードに散在しているが統合管理できない——これは 2026 年の分散チームにおける典型的なボトルネックです。本稿では明確なクラスタ化実施計画を提示します:Gateway 負荷分散、セッションアフィニティ、セッション状態の外部化により、グローバルに分散した Mac ノードをスケジュール可能な AI Agent コンピュートプールへ変換し、リージョン障害時にクロスリージョン Hot Migrationを実現する方法を解説します。アーキテクチャ対照表、6 ステップのデプロイメントチェックリスト、コストとレイテンシーのトレードオフ行列を含みます。
単一の OpenClaw ノードであれば「動く」段階までは対応できますが、本番レベルの高可用性、負荷分散、クロスリージョン災害復旧を実現するには、ポイント型デプロイメントからプール型クラスタへ移行する必要があります。ここではその判断材料と進化のパスを示します。
単一障害点が目に見える:Mac がスリープする、ネットワークが 30 秒程度瞬断するだけで、Agent の会話コンテキストと未実行タスクが中断します。24/7 カスタマーサービス自動化などのユースケースでは、単一ノードの RTO/RPO では要件を満たせません。
タスクキュがボトルネック化:チーム規模と自動化タスク数が増えるにつれ、同一ノード上のキュー深度が増加します。実測では、複数モデルを並列動作させた場合、単一 Gateway は同時リクエストが 50 を超えると顕著なレイテンシ spike が発生し、水平拡張が必要となります。
クロスリージョンのレイテンシが収束しない:香港、東京、サンフランシスコにチームメンバーが分散している場合、全員が同一リージョンノードを使用すると、一部メンバーのレイテンシが >200ms となります。ユーザーに近い地域へのデプロイが不可欠です。
コスト最適化が阻害:高優先度タスク(緊急修正)と低優先度タスク(バッチログ分析)が同一インスタンス上で競合し、大規模モデル API 呼び出しコストの無駄と不安定さを招きます。タスクの種類に応じて、最もコスト効率の良いモデルとノードにルーティングする必要があります。
段階的なオペレーションが不可能:Gateway や OpenClaw のバージョンアップはノードごとに停止して行う必要があり、中間状態がありません。クラスタ化はカナリアやブルーグリーンデプロイの前提条件です。
主要指標:クラスタ化を判断する定量的トリガーとしては「単一障害点によるタスク中断率(MTTR)」「各地域の P95 レイテンシ」「並行タスクキュ深度の変動幅」が挙げられます。いずれかが許容閾値を超えたら、クラスタ化の検討を開始すべきです。
マルチリージョン Mac ノードプールにおいて適切な Gateway 負荷分散戦略を選択することは、スケジューリング効率とユーザー体験に直接影響します。以下に代表的な 4 つの戦略と実行可能なパラメータを示します。
| 戦略 | 論理 | 最適適用 | 初期パラメータ | セッションアフィニティとの併用 |
|---|---|---|---|---|
| ラウンドロビン | 次に利用可能なアップストリームへ順次割当 | タスクタイプが均一でノードスペックが同一、粗いバランスで十分な场景 | ヘルスチェック間隔 15s(デフォルト有効) | セッション状態が外部化(Redis)されている場合のみ可。そうでなければコンテキストが不安定に推移 |
| 最小接続数 | 現在のアクティブ接続数が最も少ないノードにルーティング | 長時間対話型エージェントなど、実時負荷を最優先する场景 | 計測ウィンドウ 30s;接続タイムアウト 5s | セッションアフィニティと相補的:アフィニティがコンテキスト保持、最小接続数がスループット最適化 |
| 重み付きレイテンシ | 現在のレスポンスレイテンシに基づき動的にスコアリング、低レイテンシほど高重み | ユーザーの地理的分布が偏り、地域間レイテンシ差が顕著なクロスリージョン展開 | サンプリング周期 20s;レイテンシ重み 0.6、成功率重み 0.4 | セッションアフィニティは、クロスリージョン Failover 時のコンテキストリセットを軽減 |
| セッションアフィニティ | 同一 Session ID / JWT sub を常に同じノードに固定 | セッションコンテキストがローカル Node プロセス内にあり、外部ストレージにない场景 | アフィニティ TTL は 2h を推奨;有効期限切れ後はラウンドロビンにフォールバック | 外部化セッションストレージ(Redis)と組み合わせた場合のみ真の Hot Migration が可能 |
まず判断すべきは「セッション状態は外部化されているか」です。OpenClaw の conversation_history が既に Redis 上にあるなら、セッションアフィニティは緩和できます。そうでなければ、アフィニティ TTL を固定し、Hot Migration のリハーサルを実施してください。
Nginx を適用するか Envoy を選択するかに関わらず、コアとなるルーティングと移行手順は同じです。最初にヘルスチェックを定義し、次にルーティング規則を選択し、その後外部セッションストレージを注入し、最後にフェイルオーバーのリハーサルを実施します。
リージョンごとのノードで /health エンドポイントを公開:OpenClaw Gateway の GET /health は {ready: true, region: "hk|jp|us"} を返します。Nginx または Envoy で 15 秒ごとにプローブを設定し、連続 3 回失敗したらノードを unhealthy とマークします。
負荷分散戦略を選択し重みを設定:Nginx では least_conn、Envoy では LEAST_REQUEST が出発点として推奨されます。ユーザーの地理的分布に偏りがある場合は、重み付き割り当てを使用できます(例:香港 60%、東京 25%、米国 15%;upstream ノード設定で指定)。
セッションアフィニティと TTL を有効化:Nginx では sticky cookie srv_id expires=2h を、Envoy では consistent_hash_lb を request.headers['x-session-id'] に基づいて使用します。アフィニティ TTL は 2 時間に設定し、長時間の会話が同じノードに維持されるようにします。
外部化セッションストレージ(Redis)を設定:スタンドアロンの Redis インスタンスまたはクラスタを使用します。Key 形式は claw:session:{session_id}、TTL 7200s。OpenClaw の storage ドライバがローカルファイルシステムではなく Redis を指すようにしてください。設定例は以下参照。
リージョン単位のフェイルオーバー規則を設定:負荷分散層で「リージョン障害」の自動排除を設定します——例えば、あるリージョンのヘルスチェック失敗率が 2 分間連続で 30% を超える場合、そのリージョンの重みを 0 に自動減衰させ、トラフィックを正常リージョンに再分配します。同時に ops チームへのアラートを発報します。
クロスリージョン Hot Migration ドリルを実行:オフピーク時にアクティブなセッションを選び、ターゲットノードを 5 分間停止し、リクエストがシームレスに隣接リージョンノードに移行できるか、Redis からコンテキストが完全に回復されるかを観察します。復旧時間とコンテキスト損失率を記録します。
upstream claw_backend {
least_conn;
server hk-node-1.vpsmesh.com:8080 max_fails=3 fail_timeout=30s;
server jp-node-1.vpsmesh.com:8080 max_fails=3 fail_timeout=30s;
server us-node-1.vpsmesh.com:8080 max_fails=3 fail_timeout=30s;
# セッションアフィニティ(Cookie ベース)
sticky cookie srv_id expires=2h domain=.vpsmesh.com path=/;
}
server {
listen 80;
location / {
proxy_pass http://claw_backend;
proxy_set_header X-Session-ID $cookie_session_id;
}
location /health {
proxy_pass http://claw_backend/health;
proxy_next_upstream error timeout;
}
}
注意:セッションアフィニティ単体では不十分:セッション状態がローカルディスクにある場合、ノード障害でコンテキストはすべて失われます。アフィニティは「リクエストが同一ノードに landing する」ことのみ保証し、「状態が保持される」ことは保証しません——真の Hot Migration には、Redis によるセッション状態の外部化が必須です。
Hot Migration 成否の核心は、セッション状態がノード間で共有可能かどうかにあります。OpenClaw のような AI Agent では、会話コンテキスト、ツール呼び出し履歴、保留中のタスクを外部ストレージに保存する必要があります。
| フィールド | 型 | 必須 | 説明 | 推奨 TTL |
|---|---|---|---|---|
| session_id | string | ✅ 必須 | セッション一意識別子(Gateway sticky ルールで生成) | 7200s |
| conversation_history | array | ✅ 必須 | 完全な会話履歴(role + content)。再起動後にコンテキストを再構築する唯一のソース | 7200s |
| pending_tasks | queue | ✅ 必須 | 実行待ちタスクキュー(ツール呼び出しやサブエージェント面談);デキューとリトライをサポート | タスクタイムアウト依存;推奨 3600s |
| agent_state | object | 🟡 推奨 | Agent ランタイム状態(現在のステップ、選択したツール、変数バインディングなど)実行中断からの再開用 | 7200s |
| region_last_seen | string | 🟡 推奨 | 最終アクティブリージョン識別子(例:hk|jp|us)追跡とレイテンシ統計用 | TTL 無し;分析専用 |
セッション外部化のデプロイメントチェックリスト:
スタンドアロン Redis インスタンスまたは HA クラスタを使用:Redis を AI Agent ノードと同一ホストに配置しないでください(ノード停止時にセッションと外部ストレージを同時に失います)。マネージド Redis サービスまたは VpsMesh 提供の専用キャッシュノードをご利用ください。
OpenClaw の openclaw.json で Redis ストレージドライバを有効化:storage.type を file から redis に変更し、ホスト、ポート、パスワード(存在する場合)を入力します。設定例:
{
"storage": {
"type": "redis",
"host": "redis-cluster.vpsmesh.com",
"port": 6379,
"password": "{{REDIS_PASSWORD}}",
"keyPrefix": "claw:"
}
}
セッション復旧を検証:任意のノードで OpenClaw サービスを再起動した後、同じ session_id でリクエストを送信し、コンテキストが完全に保持されていることを確認します。redis-cli KEYS "claw:session:*" でデータの分布を確認可能です。
災害復旧のヒント:Redis クラスター自体もクロスリージョンレプリケーションを必要とします。単一リージョンの Redis に依存すると、それが単一障害点になります。Redis Cluster モードを有効化し、プライマリを香港に、レプリカを東京とサンフランシスコに配置することで、RPO をほぼゼロにできます。
すべてのチームがすぐに 5 ノードクラスタを構築する必要はありません。以下の 3 つのハードデータと意思決定行列を参考に、自社に最適な出発点を特定できます。
least_conn モードで約 3,000–5,000 の同時接続を安定して処理できます(1 セッションあたり 2 接続と仮定して約 1,500 同時 Agent セッションに相当)。この閾値を超える場合は、複数の Gateway インスタンスをデプロイし、さらに DNS ラウンドロビンで前面に配置する必要があります。自社でクラスタを構築することには、技術的・運用面の大きなオーバーヘッドが伴います:Nginx/Envoy の設定、高可用 Redis クラスタの構成分、ヘルスチェックスクリプトの作成、Hot Migration の定期的なリハーサル、そしてクロスリージョンネットワークの波动に伴う故障リスクのすべてを自社で負う必要があります。これらの隠れたコストは往々にして過少評価されています。
そのため、安定性が最も重要で iOS CI/CD と AI Agent 自動化の両立が必要な本番環境では、VpsMesh の Mac Mini クラウドレンタルが大抵の場合より優れた解です。複数リージョンの Mac Mini M4 ノードプール、事前インストールされた OpenClaw イメージ、内蔵の負荷分散と災害復旧機能により、Gateway と Redis を自ら構築することなく、高可用性 AI Agent クラスタを運用できます。低コストでマルチリージョン Agent プールを始める方法については料金ページをご覧いただくか、今すぐオンラインでご注文ください。
アフィニティが有効でノードが健康な場合、リクエストは同一のアップストリームノードにルーティングされます。ノードがヘルスチェックに失敗した場合、負荷分散は他のノードにルーティングします。その場合、コンテキストを復元するために Redis による外部化状態保存が必要です。詳細はヘルプセンターの高可用性設定ページを参照してください。
根本原因は多くの場合、セッション状態が外部化されていないことです。OpenClaw が引き続きローカルファイルシステムを conversation_history に使用している場合、ノードの切り替え後はデータにアクセスできません。解決策は storage.type を redis に変更し、すべてのノードが同じ Redis エンドポイントにアクセスできるようにすることです。
必ずしもそうとは限りません。クラスタ化により、低優先度タスクを低コスト地域のノードに、高優先度タスクを低レイテンシ地域のノードに配置することで利用率を最適化でき、全体の TCO を削減できる可能性があります。コストモデルの詳細については、3 年間 TCO 意思決定マトリクス記事を参照してください。