Hermes による高度な高可用性転送

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:4分
  • 通常の操作、Advanced High Availability (AHA) 転送、およびフェイルオーバーのシナリオ中に、Hermes でメッセージがどのように生成され、消費されるかについて説明します。

    ServiceNow 本番インスタンスは、地理的に離れたデータセンターで動作します。各データセンターは別のデータセンターとペアになり、フェイルオーバーのサポートによる冗長性を提供します。一方のデータセンターがアクティブ側として指定され、もう一方がスタンバイ側として指定されます。たとえば、インスタンスを DC1 および DC2 データセンターで構成し、DC1 をアクティブ側として設定することができます。

    StreamConnect、LES、または IDR を有効にすると、新しい Hermes Kafka クラスターが両方のデータセンターにプロビジョニングされます。高可用性を確保し、フェイルオーバーのサポートを提供するために、Hermes は各データセンターに 1 つずつ、アクティブ/アクティブ Kafka クラスターのペアを使用します。

    クラスターの近く
    インスタンスと同じデータセンターにある Hermes Kafka クラスターがニアクラスターです。
    遠くのクラスター
    他のデータセンターで実行されているクラスターがファーザークラスターです。他のインスタンスの場合はその逆になります。近くのクラスターはデータセンターにあり、遠くのクラスターはもう一方のデータセンターで実行されています。
    図 : 1. 近くの Hermes Kafka クラスターと遠い Hermes Kafka クラスター
    近くの Hermes Kafka クラスターと遠い Hermes Kafka クラスターは、インスタンスに対する相対的です。

    通常の操作

    通常の動作条件下では、インスタンスまたは外部クライアントによって近くの Hermes クラスターに対してメッセージが生成されます。たとえば、インスタンスが DC1 データセンターで実行されている場合、メッセージは DC1 の近くの Hermes クラスターに対して生成されます。外部クライアントから送信されたメッセージは、プロデューサーブートストラップ URL で定義されている 400x の範囲のポートを使用してクラスターに生成されます。

    Hermes でトピックが作成されると、両方のクラスターに作成されます。両方のクラスターからのメッセージを消費するために 2 つのコンシューマープロセスが使用されますが、通常、アクティブに消費しているのは 1 つのコンシューマーのみです。各コンシューマーは、410 倍の範囲と 420 倍の範囲の個別のブートストラップ URL を使用する必要があります。

    フェイルオーバープロセス

    次の状況では、メッセージが生成されるクラスターが変更される可能性があります。

    インスタンスの高度な高可用性 (AHA) 転送
    インスタンスが AHA 転送されると、スタンバイインスタンスがアクティブになり、以前にアクティブだったインスタンスがスタンバイになります。このシナリオでは、インスタンスは新しくアクティブな側で Hermes クラスターを使用するように切り替わります。

    たとえば、インスタンスが DC1 および DC2 データセンターで実行されており、DC1 を現在のアクティブ側としていて、AHA 転送が発生した場合、インスタンスは DC2 の Hermes クラスターを使用するように切り替わります。

    Hermes フェイルオーバー
    インスタンスは、Hermes クラスターの健全性をアクティブに監視します。クラスターの問題が検出されると、フェイルオーバーモードに入ります。この場合、インスタンスは、近くの Hermes クラスターが復旧したことを検出するまで、スタンバイインスタンスの近くにある Hermes クラスターを使用します。

    たとえば、インスタンスが DC1 および DC2 データセンターで実行されており、DC1 がアクティブ側である場合、DC1 の Hermes クラスターが使用されます。DC1 で Hermes クラスターの問題が検出されると、Hermes フェールオーバー モードになり、DC1 クラスターが再び正常になるまで DC2 クラスターへのメッセージの生成が開始されます。復旧後、DC1 の Hermes クラスターの使用を再開します。

    フェイルオーバーが発生すると、コンシューマーが遅延している場合、どちらかのコンシューマーが処理を終了するまで、両方のコンシューマーがメッセージを消費する可能性があります。たとえば、現在のアクティブな側が DC1 の場合、DC1 から消費するコンシューマーはメッセージをアクティブに処理しています。DC1 クラスターで問題が発生し、DC2 クラスターにフェイルオーバーした場合、DC2 クラスターから消費するコンシューマーはメッセージの処理を開始します。DC1 クラスターからのコンシューマーが遅れていた場合、DC1 コンシューマーが追いつくまで、両方のコンシューマーがメッセージを消費し続けます。

    順序の維持

    メッセージの順序を維持する必要がある場合、これを管理するのはコンシューマーアプリケーションの責任です。メッセージのグローバルな順序は、Kafka でのトピックの定義方法に依存することに注意してください。