高可用性 Enterprise
高可用性は Semaphore Enterprise エディションで利用できます。
Semaphore UI は、ロードバランサーの背後で複数のインスタンスを同時に稼働させるアクティブ-アクティブ構成の高可用性 (HA) デプロイメントをサポートしています。各インスタンスは、UI リクエスト、API 呼び出し、スケジュールされたジョブ、タスク実行のすべてを処理できます。1 つのインスタンスに障害が発生しても、残りのノードが中断なく動作を継続します。
アーキテクチャ
一般的なアクティブ-アクティブ構成のデプロイメントは、次のコンポーネントで構成されます。
ロードバランサー — ユーザーはロードバランサー (NGINX、HAProxy、クラウドのロードバランサーなど) を経由して接続します。ロードバランサーは、HTTP および WebSocket トラフィックを利用可能な Semaphore ノードに分散します。
Semaphore ノード — 各ノードは Semaphore UI の同一のインスタンスを実行します。どのノードでもユーザーリクエストの受信、自動化ジョブの開始、スケジュールされたタスクの処理、リアルタイム更新の送信が可能です。すべてのノードは対等であり、プライマリノードやスタンバイノードは存在しません。
共有データベース — すべてのインスタンスは共有の PostgreSQL または MySQL データベースに接続します。データベースは、プロジェクト、テンプレート、インベントリ、スケジュール、タスク履歴、ユーザーアカウント、RBAC 設定に関する唯一の信頼できる情報源 (single source of truth) として機能します。
SQLite と BoltDB は HA デプロイメントではサポートされていません。PostgreSQL または MySQL を使用してください。
Redis — Redis は、複数のノードを 1 つのシステムとして動作させるための調整レイヤーを提供します。Redis には次の 3 つの役割があります。
- 分散ロック により、特定のジョブを同時に実行するインスタンスが 1 つだけになることを保証し、タスクの重複実行を防ぎます。
- 共有タスクキューの状態 により、タスクキューが維持され、ジョブは必ず 1 つのワーカーだけに取得されます。すべてのノードが同じキューを参照し、実行を調整します。
- Pub/Sub メッセージング により、ノードはタスクの更新、クラスター通知、キャッシュの無効化、UI 状態の変更などのイベントをブロードキャストできます。これにより、すべてのノードがリアルタイムで同期されます。
前提条件
HA を設定する前に、次のものが必要です。
- Semaphore Enterprise のサブスクリプションキー。
- すべてのノードからアクセスできる共有の PostgreSQL または MySQL データベース。
- すべてのノードからアクセスできる Redis サーバー、または Redis Sentinel 構成。Redis Cluster はサポートされていません。
- HTTP および WebSocket トラフィックをサポートする ロードバランサー。
- Semaphore インスタンスを実行する 2 台以上のサーバー。
すべての Semaphore ノードは、同じデータベース、同じ Redis バックエンド、同じ設定を使用する必要があります (ノードごとに一意でなければならない ha.node_id を除く)。