OK、私はこの 3 日間、無駄に頭を悩ませてきました。
背景
私は明らかに単純なセットアップを機能させようとしています - 私は2つのJBossノード(つまり、単一の非マルチホームサーバー上の2つのノード)をセットアップしたいCentOSボックスを持っています。フェールオーバー シナリオ。私はApacheのmod_jkモジュールがそれを達成するのに役立つだろうと読みました.
私は熱心にJBoss 5.1 Clustering Guideに従おうとしましたが、それでも、どういうわけか、どこかで失敗したようです。
問題
Apache 経由
で接続できずnode2
、常に503 Service Unavailableメッセージが表示されます。
構成
以下は詳細です。
CentOS 6 アパッチ 2.2.15 mod_jk 1.2.35 JBoss 5.1.0 GA
httpd.conf
最後に次の行があります。
#mod_jk の特定の構成ファイルを含める conf/mod_jk.conf を含める
mod_jk.conf
次の行が含まれています (とりわけ):
JkMountFile conf/uriworkermap.properties
uriworkermap.properites
次のようになります。
# 簡単なワーカー設定ファイル # サーブレット コンテキストを ajp13 ワーカーにマウントする /jmx-console=ロードバランサー /jmx-console/*=ロードバランサー /web-console=ロードバランサー /web-console/*=ロードバランサー /jspHello=ロードバランサー /jspHello/*=ロードバランサー
workers.properties
:
# 使用されるワーカーのリストを定義します # リクエストのマッピング用 worker.list=ロードバランサー,ステータス # Node1 を定義 # ホストをホスト IP または DNS 名に変更します。 worker.node1.port=8009 worker.node1.host=127.0.0.1 worker.node1.type=ajp13 worker.node1.lbfactor=1 # Node2 を定義 # ホストをホスト IP または DNS 名に変更します。 worker.node2.port=8109 worker.node2.host=127.0.0.1 worker.node2.type=ajp13 worker.node2.lbfactor=1 # 負荷分散動作 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 worker.loadbalancer.sticky_session=1 # ロードバランサーを管理するステータスワーカー worker.status.type=ステータス
次のコマンドを使用してnode1
andを呼び出しnode2
ます。
./run.sh -c node1 -g DocsPartition -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default -b 0.0.0.0 ./run.sh -c node2 -g DocsPartition -Djboss.messaging.ServerPeerID=2 -Djboss.service.binding.set=ports-01 -b 0.0.0.0
また、各ディレクトリserver.xml
内のファイルを変更し、対応するパラメーターをタグに追加しました。node
jvmRoute
Engine
観察
以下にmod_jk
ログを示します。
最初に、node1、node2、および httpd を起動したとき
... [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] do_shm_open::jk_shm.c (561): 共有メモリを 1856 に切り捨てました [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] do_shm_open::jk_shm.c (606): 初期化された共有メモリ /var/run/httpd/mod_jk.shm.14695 size=1856 free=1728 addr=0x7fe7cb7c3000 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] do_shm_open_lock::jk_shm.c (476): 共有メモリ ロック /var/run/httpd/mod_jk.shm.14695.lock を開きました [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'ServerRoot' -> '/etc/httpd' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.list' -> 'loadbalancer,status' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node1.port' -> '8009' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node1.host' -> '127.0.0.1' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node1.type' -> 'ajp13' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node1.lbfactor' -> '1' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node2.port' -> '8109' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node2.host' -> '127.0.0.1' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node2.type' -> 'ajp13' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.node2.lbfactor' -> '1' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.loadbalancer.type' -> 'lb' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.loadbalancer.balance_workers' -> 'node1,node2' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.loadbalancer.sticky_session' -> '0' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_map_dump::jk_map.c (589): マップのダンプ: 'worker.status.type' -> 'status' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] build_worker_map::jk_worker.c (241): ワーカー ロードバランサーの作成 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (145): lb のインスタンス ロードバランサーを作成しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (158): ロードバランサーを検証して初期化しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (145): ajp13 のインスタンス node1 を作成しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (158): node1 を検証して初期化しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_validate::jk_ajp_common.c (2679): ワーカー node1 の連絡先は '127.0.0.1:8009' です [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2877): エンドポイント オプションの設定: [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2880): キープアライブ: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2884): ソケット タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2888): ソケット接続タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2892): バッファ サイズ: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2896): プールのタイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2900): ping タイムアウト: 10000 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2904): 接続タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2908): 応答タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2912): prepost タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2916): 回復オプション: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2920): 再試行: 2 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2924): 最大パケット サイズ: 8192 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2928): 再試行間隔: 100 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_create_endpoint_cache::jk_ajp_common.c (2737): 最小 1 で接続プール サイズを 1 に設定し、タイムアウト 200 を取得する [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (145): ajp13 のインスタンス node2 を作成しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (158): node2 を検証して初期化しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_validate::jk_ajp_common.c (2679): ワーカー node2 の連絡先は '127.0.0.1:8109' です [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2877): エンドポイント オプションの設定: [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2880): キープアライブ: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2884): ソケット タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2888): ソケット接続タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2892): バッファ サイズ: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2896): プールのタイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2900): ping タイムアウト: 10000 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2904): 接続タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2908): 応答タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2912): prepost タイムアウト: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2916): 回復オプション: 0 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2920): 再試行: 2 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2924): 最大パケット サイズ: 8192 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_init::jk_ajp_common.c (2928): 再試行間隔: 100 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] ajp_create_endpoint_cache::jk_ajp_common.c (2737): 最小 1 で接続プール サイズを 1 に設定し、タイムアウト 200 を取得する [Thu Sep 06 02:21:54 2012][14695:140633527957472] [debug] validate::jk_lb_worker.c (1702): バランスの取れたワーカー 0 の名前は node1 で、ドメイン内にルート node1 があります [Thu Sep 06 02:21:54 2012][14695:140633527957472] [debug] validate::jk_lb_worker.c (1702): バランスワーカー 1 の名前は node2 で、ドメイン内のルートは node2 です [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] update_mult::jk_lb_worker.c (262): ワーカー node1 が多重度 1 を取得 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] update_mult::jk_lb_worker.c (262): ワーカー node2 が多重度 1 を取得 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] jk_lb_push::jk_lb_worker.c (353): mem から lb 'loadbalancer' の shm を同期中 (0->1) [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] build_worker_map::jk_worker.c (241): ワーカー ステータスの作成 [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (145): status のインスタンス ステータスを作成しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] wc_create_worker::jk_worker.c (158): ステータスを検証して初期化しようとしています [Thu Sep 06 02:21:54 2012][14695:140633527957472] [デバッグ] init::jk_status.c (5078): ステータス ワーカー 'status' は読み取り/書き込みであり、css '(null)'、接頭辞 'worker' があります'、ネーム スペース 'jk:'、xml ネーム スペース 'xmlns:jk="http://tomcat.apache.org"'、ドキュメント タイプ '(null)' [Thu Sep 06 02:21:54 2012][14695:140633527957472] [debug] init::jk_status.c (5129): ステータス ワーカー 'status' は '0000000f' の評価が高く、'00ff1010' の評価が悪い [Thu Sep 06 02:21:54 2012][14695:140633527957472] [info] init_jk::mod_jk.c (3365): mod_jk/1.2.35 初期化 ...
そして、アプリケーションにアクセスしようとすると
... [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] find_match::jk_uri_worker_map.c (949): ワイルド文字一致 '/jspHello/*=loadbalancer' が見つかりました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_handler::mod_jk.c (2621): ハンドラ jakarta-servlet worker=loadbalancer に r->proxyreq=0 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] wc_get_worker_for_name::jk_worker.c (115): ワーカー ロードバランサーが見つかりました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] wc_maintain::jk_worker.c (338): ワーカー ロードバランサーのメンテナンス [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] wc_get_name_for_type::jk_worker.c (292): ワーカー タイプ 'lb' が見つかりました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [debug] init_ws_service::mod_jk.c (1097): Service protocol=HTTP/1.1 method=GET ssl=false host=(null) addr=:: 1 name=localhost port=80 auth=(null) user=(null) laddr=::1 raddr=::1 uri=/jspHello/ [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] service::jk_lb_worker.c (1192): service sticky_session=0 id='empty' [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] get_most_suitable_worker::jk_lb_worker.c (1061): メソッド 'Request' を使用して最適なワーカー node2 (node2) が見つかりました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] service::jk_lb_worker.c (1237): service worker=node2 route=node2 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_get_endpoint::jk_ajp_common.c (3146): 0 回の再試行後に接続プール スロット = 0 を取得 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_marshal_into_msgb::jk_ajp_common.c (626): ajp マーシャリング完了 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_service::jk_ajp_common.c (2441): 2 回の再試行で node2 を処理する [Thu Sep 06 02:24:42 2012][14700:140633527957472] [debug] ajp_send_request::jk_ajp_common.c (1615): (node2) すべてのエンドポイントが切断されています。 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_open_socket::jk_connect.c (485): ソケット TCP_NODELAY がオンに設定されました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_open_socket::jk_connect.c (609): ソケット 14 を 127.0.0.1:8109 に接続しようとしています [Thu Sep 06 02:24:42 2012][14700:140633527957472] [info] jk_open_socket::jk_connect.c (627): 127.0.0.1:8109 への接続に失敗しました (errno=13) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [info] ajp_connect_to_endpoint::jk_ajp_common.c (992): (127.0.0.1:8109) へのソケットのオープンに失敗しました (errno=13) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [エラー] ajp_send_request::jk_ajp_common.c (1621): (node2) バックエンドへの接続に失敗しました。Tomcat が起動していないか、間違ったポートでリッスンしている可能性があります (errno=13) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [info] ajp_service::jk_ajp_common.c (2614): (node2) tomcat へのリクエストの送信に失敗しました (回復可能)。リクエストの送信中にエラーが発生したためです (試行 = 1) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_service::jk_ajp_common.c (2463): 再試行 1、再試行する前に 100 ミリ秒スリープ [Thu Sep 06 02:24:42 2012][14700:140633527957472] [debug] ajp_send_request::jk_ajp_common.c (1615): (node2) すべてのエンドポイントが切断されています。 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_open_socket::jk_connect.c (485): ソケット TCP_NODELAY がオンに設定されました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_open_socket::jk_connect.c (609): ソケット 14 を 127.0.0.1:8109 に接続しようとしています [Thu Sep 06 02:24:42 2012][14700:140633527957472] [info] jk_open_socket::jk_connect.c (627): 127.0.0.1:8109 への接続に失敗しました (errno=13) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [info] ajp_connect_to_endpoint::jk_ajp_common.c (992): (127.0.0.1:8109) へのソケットのオープンに失敗しました (errno=13) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [エラー] ajp_send_request::jk_ajp_common.c (1621): (node2) バックエンドへの接続に失敗しました。Tomcat が起動していないか、間違ったポートでリッスンしている可能性があります (errno=13) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [info] ajp_service::jk_ajp_common.c (2614): (node2) tomcat へのリクエストの送信に失敗しました (回復可能)。リクエストの送信中にエラーが発生したためです (試行 = 2) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [エラー] ajp_service::jk_ajp_common.c (2634): (node2) tomcat への接続に失敗しました。 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [debug] ajp_reset_endpoint::jk_ajp_common.c (786): (node2) ソケット -1 でエンドポイントをリセット中 (ソケットのシャットダウン) [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_done::jk_ajp_common.c (3077): ワーカー ノード 2 とソケット -1 の接続プールのリサイクル [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] service::jk_lb_worker.c (1455): ワーカー node2 がローカル エラーをグローバル エラーにエスカレートする [Thu Sep 06 02:24:42 2012][14700:140633527957472] [info] service::jk_lb_worker.c (1469): サービスに失敗しました。ワーカー node2 はエラー状態です [Thu Sep 06 02:24:42 2012][14700:140633527957472] [debug] service::jk_lb_worker.c (1480): 回復可能なエラー... 他のワーカーで回復を試みます [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] get_most_suitable_worker::jk_lb_worker.c (1061): メソッド 'Request' を使用して最適なワーカー node1 (node1) が見つかりました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] service::jk_lb_worker.c (1237): service worker=node1 route=node2 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_get_endpoint::jk_ajp_common.c (3146): 0 回の再試行後に接続プール スロット = 0 を取得 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_marshal_into_msgb::jk_ajp_common.c (626): ajp マーシャリング完了 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_service::jk_ajp_common.c (2441): node1 を 2 回の再試行で処理する [Thu Sep 06 02:24:42 2012][14700:140633527957472] [debug] ajp_send_request::jk_ajp_common.c (1615): (node1) すべてのエンドポイントが切断されています。 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_open_socket::jk_connect.c (485): ソケット TCP_NODELAY がオンに設定されました [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_open_socket::jk_connect.c (609): ソケット 14 を 127.0.0.1:8009 に接続しようとしています [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] jk_open_socket::jk_connect.c (635): ソケット 14 [127.0.0.1:38909 -> 127.0.0.1:8009] 接続 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_connection_tcp_send_message::jk_ajp_common.c (1175): ajp13 に送信 pos=4 len=570 max=8192 [Thu Sep 06 02:24:42 2012][14700:140633527957472] [デバッグ] ajp_connection_tcp_send_message::jk_ajp_common.c (1175): 0000 12 34 02 36 02 02 00 08 48 54 54 50 2E ...HTTP/1.1 ...
ご覧のとおり、node1 経由でリクエストを処理する前に、node2 への接続を 2 回試行します。時間切れまではこのままですnode1
。削除するとすぐに、アクセスしようとすると503エラーが発生し始めます。
それが問題なのか、何か不足しているのかはわかりませんmod_jk
。
助言がありますか?
更新: 2 つの別々の (物理) ノードで動作していますが、別々のポート (8009 と 8109) を持つ同じボックスで動作させることはできませんでした。