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

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

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

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

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

    通常の操作

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

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

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

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

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

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

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

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

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

    注文の維持

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