新しく発見されたApacheモジュールmod_clusterは、 mod_jkと比較して多くの利点を提供するようです。 これは、新しいApache/Jboss環境で使用できます。
次の機能がリストされています。
–httpdワーカーの動的構成
–サーバー側の負荷分散係数の計算
–きめ細かいWebアプリのライフサイクル制御
–AJPはオプションです
–JBoss4.2.x以降を見つめる互換性
その他の役立つリンク:
http://www.jboss.org/mod_cluster
http://anonsvn.jboss.org/repos/mod_cluster/tags/release/
http://docs.jboss.org /mod_cluster/1.2.0/html/
起動手順は次の場所にあります:
http://docs.jboss.org/mod_cluster/1.2.0/html/Quick_Start_Guide.html#d0e357
テスト環境:
テスト環境のコンポーネントのリスト:
新しくコンパイルされたApacheとmod_clusterを備えた1つのVM
同一のJBossアプリケーションを備えた2つのVM
次のように3つのVMを作成しました: Hostname Function IP HTTP-Port AJP-Port
testweb APACHE 192.168.100.1 80 n/a
backend1 JVM1 192.168.100.2 6003 6001
backend2 JVM2 192.168.100.3 6003 6001
バックエンドへの直接アクセスの手動テスト:
http://backend1.mydomain.srv:6003/sysnode/
http://backend2.mydomain.srv:6003/sysnode/
次のように新しいApache仮想ホストを作成します:
########################
# Relevant part of httpd.conf
#######################
# Extra modules needed for mod_cluster
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule advertise_module modules/mod_advertise.so
/ etc / hostsのコンテンツに追加する
192.168.100.1 vhost-01
コンテンツ vhosts.conf
LogLevel debug
Listen vhost-01:80
NameVirtualHost vhost-01:80
#
#------------ Directives for mod_cluster only---------------
<ifmodule proxy_cluster_module>
# Displays the first 100 sessions IDs in manager interface
# Turn on the session ID display of 100 in the mod_cluster-manager page
MaxsessionId 10000
CreateBalancers 2
MaxContext 10000
</ifmodule>
#
# ------ Build the MCPM Connector and advertize connector on Web server
<ifmodule manager_module>
Listen vhost-01:8081
<Virtualhost vhost-01:8081>
# MCPM configuration
KeepAliveTimeout 60
MaxKeepAliveRequests 0
EnableMCPMReceive
#
CustomLog /www/http_logs/MCPM_connector_acc.log j_common
ErrorLog /www/http_logs/MCPM_connector_err.log
</virtualhost>
</ifmodule>
#
#---------- Managemant console interface ----------------------
<ifmodule manager_module>
Listen vhost-01:8000
<Virtualhost vhost-01:8000>
# mod_cluster Manager interface
<Location /mcm>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from env=IP_ALLOWED
# Displays verbose extra info about the mod_cluster config
AllowDisplay On
</Location>
CustomLog /www/http_logs/cluster_manager_acc.log j_common
ErrorLog /www/http_logs/cluster_manager_err.log
</virtualhost>
</ifmodule>
#
# --------------------- CLIENT Virtual Host 1----------------------------
#
# http://test1.mydomain.srv
<Virtualhost vhost-01:80>
ServerName test1.mydomain.srv
DocumentRoot /www/htdocs1
#
#------------ Directives for mod_cluster ---------------
<ifmodule proxy_cluster_module>
ProxyRequests Off
UseCanonicalName On
ProxyPreserveHost On
# Allowing all proxy requests
<proxy balancer://jboss.web1>
AddDefaultCharset off
Order deny,allow
Allow from All
</proxy>
ProxyPass / balancer://jboss.web1/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://jboss.web1/
</ifmodule>
#
CustomLog /www/http_logs/test1.mydomain.srv_acc.log j_common
ErrorLog /www/http_logs/test1.mydomain.srv_err.log
</virtualhost>
#
# --------------------- CLIENT Virtual Host 2----------------------------
# http://test2.mydomain.srv
<virtualhost vhost-01:80>
ServerName test2.mydomain.srv
DocumentRoot /www/htdocs2
#
#------------ Directives for mod_cluster ---------------
<ifmodule proxy_cluster_module>
ProxyRequests Off
UseCanonicalName On
ProxyPreserveHost On
# Allowing all proxy requests
<proxy balancer://jboss.web2>
AddDefaultCharset off
Order deny,allow
Allow from All
</proxy>
ProxyPass / balancer://jboss.web2/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://jboss.web2/
</ifmodule>
#
CustomLog /www/http_logs/test2.mydomain.srv_acc.log j_common
ErrorLog /www/http_logs/test2.mydomain.srv_err.log
</virtualhost>
mod-clusterは、次の条件でテストされています。
–アプリの起動が完了すると、Apacheがアプリを登録するまでに約3〜5秒かかります
–その後、Apacheに送信されたリクエストは、登録されたAPP間でバランスが取れており、vhostによって割り当てられたAPPscusterに送信されました。
バックエンドAPPサーバーのライブアップグレード:
4つのAPPをすべて同じクラスターに登録し、新しいAPPの登録と実行中のAPPの登録解除がどのように実行されているかをテストします。
APPのアップグレードを行うために提案された方法。
–新しいアプリを起動し、すべてが正常に動作するまで待ちます。
–新しいリクエストは古いアプリと新しいアプリに送信されます。
–管理内から古いアプリを適切に無効にしますコンソール。これにより、新しいリクエストが古いアプリに送信されなくなります。
–この時点から、すべての新しいリクエストは新しいアプリにのみ送信されます。
–その後、古いアプリへのまだ開いている接続の数は動的に送信されます古いアプリが新しいリクエストを受け取らないまで表示されます。
–すべての古いアプリのこれらの数値が「0」になったら、古いアプリを削除できます。
注1:
テスト中に、SSIDを提供する古いノードが使用できなくなったときに、古いSSIDを新しいノードにリダイレクトする際に問題が発生しました。
mod_clusterが「サービスを利用できません」エラーを作成していました。
これを修正するために、次のJBOSSプロパティ(postSetEnv.sh)が設定されています。
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionRemove=true"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionForce=false"
mod_clusterに関連するプロパティの完全なセットは次のとおりです。export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.balancer=jboss.web1"
(value here has to be modified to a node name variable)
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.proxyList=192.168.100.1:8081"
(values to be set to the proper web server's internal LAN IP)
固定値
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.enable=true"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.advertise=false"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.excludedContexts="
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionRemove=true"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionForce=false"