Hermes による高度な高可用性転送
通常の運用、Advanced High Availability (AHA) 転送、フェイルオーバーのシナリオで、Hermes でメッセージがどのように生成および消費されるかについて説明します。
ServiceNow 本番インスタンスは、地理的に離れたデータセンターで動作します。各データセンターは別のデータセンターとペアリングされ、フェイルオーバーサポートによる冗長性を提供します。1 つのデータセンターをアクティブ側として指定し、もう 1 つをスタンバイ側として指定します。たとえば、インスタンスを DC1 と DC2 データセンターに構成し、DC1 をアクティブ側として設定するとします。
StreamConnect、LES、または IDR を有効にすると、両方のデータセンターで新しい Hermes Kafka クラスターがプロビジョニングされます。高可用性を確保し、フェイルオーバーをサポートするために、Hermes は各データセンターに 1 つずつ、アクティブ/アクティブ 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 でのトピックの定義方法に依存することに注意してください。