0

私の状況を説明します。

背景:

Open Nebula で Debian Jessie を使用して 3 台の仮想マシンを実行しています。1 台はマスター、残りの 2 台はスレーブです。その中で、JBoss AS 7.1 と mod_cluster 1.2 をインストールしました。

目標:

ステートフル アプリを実行すると、マスター サーバーをシャットダウンしても、クラスターにより共有セッションでアプリを使用し続け、変数値を維持できます。

指定された Web アプリケーションでこのガイドに従いました。

エラー:

  • 上記のガイドのように、http://master/cluster-demo/でアプリに直接アクセスすることはできません。ポート (サーバー 3 の場合は 8330) を指定する必要があります。
  • サーバー 3 をシャットダウンすると、スレーブはサーバーがシャットダウンされていることを通知しますが、セッションは共有されず、アプリケーションにアクセスできなくなります。これは、マスターで server-three をシャウトダウンしたときのスレーブの出力です。

構成ファイル

構成ファイルを添付します。

4

1 に答える 1

0

答え

mod_cluster には、メッセージング (JMS、HornetQ) サブシステムとの共通点はありません。mod_cluster 設定には、クラスタリング サブシステム、つまり Infinispan とその主力製品である JGroups との共通点もありません。

AS7 mod_cluster サブシステムが行うことは、Apache HTTP サーバーの mod_cluster モジュールによって発行された UDP マルチキャスト アドバタイジング メッセージをリッスンすることです。このようなメッセージを受信すると、Apache HTTP Server ロード バランサーに自身を登録します。その瞬間から、登録された AS7 の「ワーカー」ノードは、特殊な HTTP メッセージを (TCP 経由で) 送信し続け、Apache HTTP Server に次のことを通知します。

  • その名前 (jvmRoute または生成)
  • 現在の負荷
  • その展開、つまりアプリケーション コンテキスト
  • 別名など

Apache HTTP Server バランサーにワーカー ノードが登録されていない場合、コンテキストがないため、リクエストを転送する場所がありません。

投稿した構成によると、224.0.1.105:23364 との間で送受信される UDP マルチキャスト メッセージに依存しています。

Open Nebula、ファイアウォール、UDP マルチキャスト

Open Nebula がホスト間の UDP マルチキャストを許可していないか、iptables がブロックしている可能性があります。これを試して:

  • ワーカーホストで curl を使用して、バランサーホストにアクセスします。これは、ディレクティブがEnableMCPMReceive定義されている正確な VirtualHost です。
  • うまくいかない場合は、iptables、selinux、httpd の allow/deny などを修正する必要があります。
  • 機能する場合は、ワーカーがバランサーと通信できるという良い兆候です
  • AS7 xml の modcluster サブシステムに移動し、config に属性を追加します: <mod-cluster-config advertise-socket="modcluster" proxy-list="your-httpd-address:port">-- curl で試したもの
  • UDP マルチキャストがなくても動作するようになりました
  • Open Nebula で UDP マルチキャスト設定をデバッグしたい場合は、Advertize.java を試してみてください

1.2.0 は古すぎるため、脆弱なコードを使用しないでください

Apache HTTP サーバーで mod_cluster 1.2.0 を使用しないでください。このバージョンは完全に廃止されており、コード インジェクション CVE や深刻なパフォーマンスの問題など、重大なバグが含まれています。httpd 2.2.x のサポートが必要な場合は、 mod_cluster 1.3.1.Final for httpd 2.4.x をダウンロードするか、ソースから独自にビルドしてください。それについて何か助けが必要な場合は、尋ねてください。

于 2016-01-27T11:54:56.357 に答える