web-dev-qa-db-ja.com

ロードバランサーを介したJMSセッションの分散

フォールしたノードの1つが回復した場合、バランサーを介したセッションの分散には非常に深刻な問題があります。

2つのモジュールの相互作用がどのように配置されているかを簡単に説明します。

一方では、WebShere Application Server(以下、単にWASと呼びます)上のアプリケーション

一方、どのアプリケーションかは不明です

それらの間-2つのWebSphereMQサーバー

WASアプリケーションはバランサーを介してWebShereMQに接続します

2番目の側はMQサーバーに直接接続します(それ自体で接続を分散できるため)

schema

問題が発生したとき:

  1. MQサーバーの1つがクラッシュします。この時点で、すべてのセッションはバランサーによって残りのMQサーバーの1つに分散されます。 2番目のアプリケーションも引き続き1つのMQサーバーでのみ機能します。問題はない。
  2. しばらく時間がかかり、MQサーバーが機能するように復元されます。 2番目のアプリケーションは、2番目のMQサーバーへの接続を即座に復元します。このJMSと接続プールで十分であるため、バランサーは引き続きすべてのセッションを1つのノードに保持します(ここでは、アプリケーションはキュー接続ファクトリを介してのみ機能し、アクティベーション仕様はありません)。したがって、WASサーバーは、接続プールが不十分で、バランサーによって2番目のMQに既に配布されている新しいセッションが開かれるまで、アプリケーション2がサーバーMQに配置するメッセージを読み取りません。ただし、この期間は非常に長くなる可能性があり、メッセージの50%がタイムアウトになります(アプリケーション2による)。

それで質問です。

2番目のMQを復元するときに、バランサー上のセッションの一部が2番目のMQサーバーに転送されるか、WAS側からの新しいセッションが(即座に)生成されるように、プロセスを何らかの方法で編成することは可能ですか?たとえば、アクティベーション仕様を使い始めたら)?

1
TheDESTROS

図の左側のアプリが右側のアプリからの要求のみを処理している場合、現在のIBM MQ v9.1 LTS以下のオプションでは、各インスタンスが接続するように構成されている各WASサーバーにアプリケーションを2回デプロイします。ロードバランサーをバイパスして、単一のIBMMQキューマネージャーに直接接続します。このようにして、1つのMQサーバーがダウンした場合、各Websphereアプリケーションサーバーは、1つのアプリケーションインスタンスから別のMQサーバーへの接続を維持し、使用可能なMQサーバーへの要求を処理します。 Websphereアプリケーション・サーバーは、そのキュー・マネージャーに再接続し、接続を処理します。


MQ v9.1 CD(継続的デリバリー)では、IBMは、キュー・マネージャーとクライアントが連携して、使用可能なキュー・マネージャー間で接続の負荷分散を維持する、ユニフォーム・クラスターと呼ばれる新機能を追加しています。この新機能により、2番目のキュー・マネージャーが復元されると、1番目のキュー・マネージャーは、接続されているクライアントの半分に切断を通知し、2番目のキュー・マネージャーに再接続します。


IBMナレッジセンターのページを参照してください IBM MQ 9.1.x> IBM MQ>計画>複数のキューマネージャーに基づくアーキテクチャ>分散キューとクラスターの計画>クラスターの設計>均一クラスター>自動アプリケーションバランシング

同じアプリケーションのインスタンスがキューマネージャーの数と少なくとも同じ数ある場合、ユニフォームクラスターは、すべてのキューマネージャーにアプリケーションのインスタンスが少なくとも1つ接続されていることを常に確認します。

1
JoshMc