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