メッセージドリブンBean

メッセージドリブンBeanではロードバランス/フェイルオーバーはサポートされていません。しかし、クラスタ内のHA-JMS(後述)に対して、 各クラスタノードのMDBがメッセージを処理する場合、それはMDBに期待されるロードバランスといってもよいでしょう。


スマートプロキシ

これまで述べてきたロードバランス/フェイルオーバーはEJBクライアントにより判断、実行されます。このプロキシ機能はEJBクライアントのスタブクラスがメソッドを実行した際、リモートアクセスが起こる前に処理をインターセプトして適切なサーバを決定します。

スマートプロキシ
図2:スマートプロキシ

HA-JNDI

EJBをクラスタリングしていても、JNDIのルックアップに失敗した時にフェイルオーバーができないようでは意味がありません。

JBossではHA(High Availability)-JNDIがサポートされ、ルックアップのフェイルオーバーが可能になっています。クライアントが通常の1099番のかわりに、1100番ポートにアクセスすることでHA-JNDIを使うことができます。HA-JNDIにアクセスした場合、JBossは以下のような順序で検索処理を行います。

  1. クラスタワイドJNDI(後述のHA-JMSのように、特別にデプロイしたもの)を検索
  2. 1で見つからなければ、自身のローカルJNDIを検索
  3. 2で見つからなければ、全クラスタノードのローカルJNDI(通常使っているJNDIのこと)を検索
表3:HA-JNDIにアクセスした場合のJBossの処理の流れ
HA-JNDIにアクセスした場合のJBossの処理の流れ
図3:HA-JNDIにアクセスした場合のJBossの処理の流れ

ところでクライアントがルックアップを行う際、1つのJNDIサーバのURLしか知らなければ、そのサーバが落ちていたときにフェイルオーバーがで きません。この問題に対処するために、"java.naming.provier.url"プロパティには複数のURLを記述することができます。
 

java.naming.provier.url=jboss1:1100,jboss2:1100,jboss3:1100,jboss4:1100

   "InitiaiContext"は1つ目のサーバへのアクセスに失敗すれば、リストされた次のサーバへと順にフェイルオーバーします。

サーバ側でルックアップを行う場合(例えばサーブレットがEJBを使うケース)は、"new InitialContext()"と引数なしのコンストラクタを呼べばローカルJNDIを検索します。これで別ノードに接続して無用なパフォーマンス劣化を起こす事態を防ぐことができます。

HA-JMS

JBossではHA-JMSがサポートされています。HA-JMSは可用性の向上、つまりフェイルオーバーのみを実現しておりロードバランスは含まれません。

"default"サーバ設定と違い、"all"サーバ設定ではJMS機能が"deploy-hasingleton"ディレクトリに配置されています。ここにデプロイされることにより、JMSはただ1つのクラスタノードだけで有効になります(シングルトン)。

JMSクライアントはHA-JNDI(ポート1100)を通してHA-JMSをルックアップします。HA-JNDIはクラスタワイドJNDIに登録されたJMSを発見し、シングルトンとして起動しているノードのJMSを返します。HA-JNDIは常に同じノードのJMSを返しますが、そのノードがダウンしていた場合、別のノードのJMSが有効になり、そのノードが次からシングルトンのJMSサーバとして機能します。このようにしてJMSのフェイル オーバーが達成されます。

JMSのフェイルオーバー
図4:JMSのフェイルオーバー

フェイルオーバーはHA-JNDIを通じて行われますので、JMSクライアントは接続に失敗したときにはHA-JNDIからコネクションを取得しなおす必要があります(EJBクライアントのようなスマートプロキシではありません)。

HA-JMSの信頼性はJMSメッセージをストアするデータベースに依存します。デフォルトではJBossのJMSがメッセージをストアするデータベースは各JBossインスタンスに組み込まれたHSQLDBなので、JMSストアをクラスタノード共通の1つのデータベースに差し替えないと意味があり ません。

いずれにせよ本番稼動ではJMSストアにHSQLDBを使用することは好ましくないため、"hsqldb-jdbc2-service.xml"および"hsqldb-jdbc-state-service.xml"を修正/リプレースし、任意のデータベースにつなげてください。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30