アプリノードが停止しても Semaphore を利用可能に

アクティブな Semaphore ノードを 1 つのサービスアドレスの背後に配置します。共有データベースと Redis による調整で、アプリケーションノードの保守中も UI と API へアクセスできます。

アプリケーションノードが 1 台利用できなくなっても、別の Semaphore ノードが自動化を継続します。

インフラは、自動化が利用できることに依存しています

インシデントの発生時、チームには復旧ジョブやインフラ変更を実行するための Semaphore へのアクセスが必要です。アプリケーションノード 1 台の停止によって、そのアクセスが失われるべきではありません。

アプリノード 1 台がオフライン
UI を開く API を使用 ジョブを開始

Enterprise の HA で Semaphore の可用性を維持

Enterprise の HA は、あるノードが停止しても、正常なアプリケーションノードを通じて UI と API を利用可能に保ちます。

別のアプリケーションノードがサービスを継続
UI を開く API を使用 ジョブを開始

Semaphore の HA に必要なもの

01

2 台以上の Semaphore ノード

同等の Semaphore インスタンスを少なくとも 2 台稼働させます。共有設定を一致させ、各ノードに一意の値を指定します: ha.node_id.

02

HTTP と WebSocket の負荷分散

異常なノードをプールから除外できるロードバランサーで、HTTP と WebSocket の両方の接続を振り分けます。

03

共有 SQL データベースと Redis

すべてのノードを同じ PostgreSQL または MySQL データベースと Redis バックエンドに接続します。これらの共有サービスも障害から保護してください。HA では SQLite はサポートされません。

HTTP と WebSocket のトラフィックは、ロードバランサーを経由して 2 台のアクティブな Semaphore ノードに届きます。両ノードは PostgreSQL または MySQL データベースと、調整に使う Redis を共有します。

本番構成の残りの部分も計画

インフラの近くで実行

プライベートネットワークと独立した実行能力のためにランナーを使います。

ランナー

チームに必要なアクセスを付与

デプロイ構成に、プロジェクトロールと Enterprise のアクセス制御を組み合わせます。

アクセス制御

デプロイ全体の可用性を計画

共有状態をアーキテクチャ上で明確に

文書化された構成はアクティブ・アクティブです。対等な Semaphore ノードが、1 つの共有 PostgreSQL または MySQL データベースと、Redis による調整を利用します。データベースはアプリケーション状態を保持し、Redis は分散ロック、キューの状態、ノード間の更新を支えます。この HA 設計では SQLite と BoltDB はサポートされません。

リクエストとライブ更新の両方に対応

ロードバランサーは HTTP と WebSocket のトラフィックを扱い、クライアントが正常なアプリケーションノードに接続し、ライブ更新を受け取れる必要があります。ロードバランサー自体の冗長化、TLS 設定、ヘルスチェック、運用動作もデプロイの一部です。アプリケーションノードを追加しても、それらは自動設定されません。

アプリケーションと実行経路を別々に拡張

アプリケーションノードは Web/API と調整のレイヤーを提供します。ランナーは、それとは独立してタスクの実行場所と能力を拡張できます。これにより、アプリケーションノードを追加すれば 3 つの問題がすべて解決すると考えず、能力の変更がユーザー/API の負荷、タスクの同時実行、別のネットワークへのアクセスのどれに関わるかを整理できます。

障害ドメインごとに復旧計画を用意

アプリケーションノードの可用性、データベースの復旧、Redis の可用性、拠点単位の災害復旧は、それぞれ別の責任範囲です。バックアップ、復元テスト、復旧目標、バージョン互換性を考慮したアップグレード手順は引き続き必要です。ある種類の障害に耐えられる構成でも、別の障害には弱い場合があります。

Redis Sentinel で調整機能の可用性を維持

調整機能にもフェイルオーバーが必要なら、Redis Sentinel バックエンドを使います。各 Semaphore ノードは Sentinel からアクティブな Redis マスターを検出し、再起動せずに昇格したレプリカへ追従します。共有データベースとロードバランサーの可用性計画と併せ、アプリケーションノード全体に同じ Sentinel 構成を設定してください。

共有の依存サービスを可用性計画に含める

SQL データベース、Redis、ロードバランサーはすべてのアプリケーションノードで使われます。Semaphore ノードと併せて、これらのサービスの冗長化と復旧を設定してください。

データの復旧経路を確保

アプリケーションの冗長化とデータ復旧は異なる問題を解決します。自動化が依存するデータベースと設定のバックアップを維持し、復元をテストしてください。

FAQ

Semaphore の高可用性にはどのコンポーネントが必要ですか?

文書化されたアクティブ・アクティブ構成では、複数の Semaphore アプリケーションノード、共有の PostgreSQL または MySQL データベース、Redis による調整、HTTP と WebSocket に対応したロードバランサーを使います。各ノードには適切な共有設定と、一意の HA 識別子が必要です。アプリケーションノードと併せて依存サービスの可用性も計画してください。プロセスを 1 つ追加するだけでは、構成全体に必要な共有状態と調整機能は提供されません。

Semaphore の HA はアクティブ・アクティブですか、アクティブ・パッシブですか?

ここで説明するのは、対等なアプリケーションノードがサービスに参加するアクティブ・アクティブ構成です。専用のプライマリノードとパッシブな待機ノードには依存しません。現在の HA ガイドで対応する設計を設定し、可用性に関する一般的な表現から、別のアクティブ・パッシブ参照構成を推測しないでください。別の構成が必要な場合は、デプロイ前に状態管理とフェイルオーバーの動作を解決してください。

HA 構成で SQLite や BoltDB を使えますか?

いいえ。文書化された HA 設計では、共有の PostgreSQL または MySQL データベースと Redis が必要です。データベースは、参加ノードに共通のアプリケーション状態の保存元です。別のストレージを使った単一ノード構成から移行する場合は、移行、バックアップ、検証を別の作業として計画します。必要なデータが共有データベースに保存され、提供されることは、アプリケーションノードの追加前にテストしてください。

アプリケーションの HA は、データベース、Redis、ロードバランサーも保護しますか?

それらのコンポーネントには、個別の耐障害性戦略が必要です。Semaphore の複数ノード設計が、データベースのフェイルオーバー、冗長ロードバランサー、高可用な Redis を自動で作成するわけではありません。各依存サービスの障害ドメイン、復旧手順、能力要件を特定してください。クライアントのリクエストからタスク結果までの全経路をテストし、アプリケーションノードの台数だけでなく、利用者が使うサービスを可用性計画でカバーします。

実行中のタスクは、アプリケーションノードの障害やアップグレード時も継続しますか?

アプリケーションノードが複数あるだけで、進行中の実行が途切れないと考えないでください。動作は実行経路、障害が起きたコンポーネント、運用しているリリースによって異なります。ステータス報告やランナーの関与を含め、依存するタスクのライフサイクルをテストしてください。同様に、すべてのバージョン変更を無停止のローリング更新が保証された操作として扱わず、アップグレードの互換性とマイグレーションを計画してください。UI の可用性とタスクの継続性は異なる要件です。

HA はどのプランに含まれ、どう評価すべきですか?

高可用性は Enterprise の機能です。必要な稼働時間、保守手順、復旧目標、既存のデータベースとロードバランサーのサービスから検討を始めてください。文書化された構成で不足を特定し、代表的な環境でノードの切り離し、依存サービスの復旧、バックアップをテストします。これらが事業上重要な要件である場合、アーキテクチャの相談が役立ちます。結果を決めるのは単一機能の切り替えではなく、デプロイ全体だからです。

アプリケーションノードを停止しても、ユーザーは同じ URL を使い続けられますか?

そのために、アクティブなアプリノードを負荷分散された 1 つのサービスアドレスの背後に配置します。ロードバランサーは、利用不能なノードへのリクエストを停止し、HTTP と WebSocket の両方に対応する必要があります。稼働を続けるノードも、プロジェクトを提供するには共有データベース、Redis、一致するアプリケーション設定へのアクセスが必要です。

複数のプライベートネットワークでタスクを実行するには HA が必要ですか?

いいえ。複数の実行場所はランナーが担います。高可用性は Semaphore のアプリケーション層を対象とし、ランナーはタスクの実行場所と到達できるシステムを対象とします。本番構成では、共有 UI と API のための HA アプリノードと、プライベートインフラの近くのプロジェクトランナーを併用できます。