4

2 つのノード (a と b) + mod_cluster (別のサーバーの apache) として機能する 1 つの apache を持つ jboss クラスターがあります。

nodeA の 1 つがダウンすると、mod クラスターは別のノードに接続できなくなります。

そのため、nodeA がクラッシュした場合、http://apache_server/myappではjboss アプリケーションにアクセスできませんが、 http ://nodeb/myapp ではアクセスでき、その逆も同様です。

私が見つけたほとんどすべてをグーグルで掘り下げて、それがセッションに関連していると言っていますが、私の設定で何が問題なのかを見つけることができません。(このツールで構成された Mod_cluster Load Balancer Configuration Tool

ノード A ログ

15/05/2016 07:45:22,741 ERROR [org.jgroups.protocols.TCP] (http-/nodeA:8080-90) failed sending message to jbossnodeb:jbossnodeb/web (4148 bytes): java.net.SocketException: Socket closed, cause: null
15/05/2016 07:45:22,790 ERROR [org.jgroups.protocols.TCP] (OOB-6464,shared=tcp) failed sending message to jbossnodeb:jbossnodeb/web (4141 bytes): java.net.SocketException: Broken pipe, cause: null

ノード B ログ

15/05/2016 07:45:23,126 ERROR [org.jgroups.protocols.TCP] (OOB-4949,shared=tcp) failed sending message to jbossnodea:jbossnodea/web (79 bytes): java.net.SocketException: Broken pipe, cause: null
15/05/2016 07:45:53,457 WARN  [org.jgroups.protocols.TCP] (Timer-1,shared=tcp) null: no physical address for jbossnodea:jbossnodea/web, dropping message

Apache mod_cluster サーバー ログ

[Sun May 15 07:45:04 2016] [error] (70007)The timeout specified has expired: proxy: read response failed from (null) (nodeA_IP)
[Sun May 15 07:45:34 2016] [error] (70007)The timeout specified has expired: ajp_cping_cpong: apr_socket_recv failed
[Sun May 15 07:45:38 2016] [error] ajp_handle_cping_cpong: ajp_ilink_receive failed
[Sun May 15 07:45:38 2016] [error] (70007)The timeout specified has expired: proxy: AJP: cping/cpong failed to (null) (nodeA_IP)
[Sun May 15 07:45:44 2016] [error] (70007)The timeout specified has expired: ajp_cping_cpong: apr_socket_recv failed
[Sun May 15 07:45:44 2016] [error] (70007)The timeout specified has expired: proxy: dialog to nodeA_IP:8009 (nodeA_IP) failed
[Sun May 15 07:45:44 2016] [error] ajp_read_header: ajp_ilink_receive failed
[Sun May 15 07:45:44 2016] [error] (70007)The timeout specified has expired: proxy: dialog to nodeA_IP:8009 (nodeA_IP) failed
[Sun May 15 07:45:44 2016] [error] (70007)The timeout specified has expired: proxy: dialog to nodeA_IP:8009 (nodeA_IP) failed
[Sun May 15 07:45:45 2016] [error] ajp_read_header: ajp_ilink_receive failed
[Sun May 15 07:45:45 2016] [error] (70007)The timeout specified has expired: proxy: dialog to (null) (nodeA_IP) failed
[Sun May 15 07:45:45 2016] [error] ajp_read_header: ajp_ilink_receive failed
[Sun May 15 07:45:45 2016] [error] (70007)The timeout specified has expired: proxy: dialog to (null) (nodeA_IP) failed
[Sun May 15 07:45:45 2016] [error] ajp_read_header: ajp_ilink_receive failed
[Sun May 15 07:45:45 2016] [error] proxy: CLUSTER: (balancer://clusterjboss). All workers are in error state

Apache mod_cluster の設定

AdvertiseGroup 225.0.1.107:23364
KeepAliveTimeout 60
ManagerBalancerName clusterjboss
ServerAdvertise On
AdvertiseFrequency 5
EnableMCPMReceive
CreateBalancers 0
AllowDisplay On

ProxyPass / balancer://clusterjboss/ stickysession=JSESSIONID|jsessionid nofailover=On
4

2 に答える 2

1

視認性

  • JBoss ワーカー インスタンスは、```EnableMCPMReceive`` VirtualHost に接続できる必要があります
  • JBoss ワーカー インスタンスは、IP アドレスと AJP ポートを Apache HTTP サーバーに報告します。
  • Apache HTTP サーバーは、報告されたアドレス ProxyPass でそれらに連絡できる必要があります。

JGroups、Infinispan、ドメイン、クラスタリング

mod_cluster、つまり modcluster サブシステムは前述のものとは何の関係もありません。サブシステムは、クラスターが形成されていること、またはインスタンスがドメイン内にあることを完全に認識しません。これは、インスタンスが最初にクラスター内にあることとは無関係です。mod_cluster の設定を調査している間は、JGroups メッセージを気にしないでください。

ただし、JGroups クラスターが壊れている場合は...

Infinispan - つまり、この場合の Web セッション データの分散または複製されたキャッシュは、クラスターを形成し、このクラスター内でメッセージを交換するために JGroups に依存しています。インスタンスがクラスターに対応できない場合、またはメッセージの交換に失敗した場合、フェイルオーバー時にセッション データが失われる可能性があります。

例: Apache HTTP サーバー mod_cluster balacner は、worker-1 がダウンしているため、JSESSIONID yadayadaXXX.worker-1 を持つ要求を worker-2 に送信することを決定します。ネットワーク構成エラーにより、worker-1 と worker-2 は正しくクラスターを形成していないため、worker-2 には worker-1 のセッション データがありません。その結果、新しいセッションが作成された Web アプリケーションが作成されます。つまり、クライアントは、ショッピング カート (人気のあるショーケース) などのコンテキストを失いました。

プロキシパス

何か特別な意図がない限り、使用しないでください。mod_cluster の要点は、すべてのプロキシ ディレクティブをメモリ内に作成し、ワーカー ノードとその Web アプリケーションが行き来するときに動的にオンザフライで作成することです。次のような場合は、追加の ProxyPass ディレクティブをいじり始めます。

  • 特別な Web アプリケーションからの特別なエラー コードに反応します。たとえば、エラーを意味するはずの HTTP コードを有効なものとして扱い、その逆も同様です。
  • ワーカーノードからではなく、Apache HTTP Server から直接静的コンテンツを提供するため (写真など)。
  • 一部のコンテキストを mod_cluster 対応の JBoss ワーカー ノードに負荷分散し、一部のコンテキストを非 mod_cluster サーバー (PHP で Drupal を実行している別の Apache HTTP サーバーなど) に負荷分散する...

ManagerBalancerName

なぜそれを変更する必要があるのか​​ 、私には明らかではありません。デフォルト値を変更する場合balancer="new_value"は、Jboss modcluster サブシステム構成も変更する必要があります。が実際に行っていることは、Apache HTTP Server の mod_cluster に、名前付きの個別の ProxyPass Balacner を内部でさらに作成するように指示することです。次に、ProxyPass ディレクティブを使用して、それらを個別に微調整できます。それらを微調整する必要がありますか?あなたの設定の残りの部分によると、そうではないと確信しています。たとえば、セッション スティッキネスは mod_cluster サブシステムの JBoss ノードで設定されます - ワーカー ndoesはこれを Apache HTTP Server バランサーに報告します。

HTH、-K-

于 2016-05-31T10:40:37.413 に答える