Apache負荷分散を使用してJBossクラスターを設定しようとしています。しかし、ブラウザでlocalhost
と入力すると、ポート8080(JBoss)にリダイレクト(プロキシされますか?)されるはずですが、リダイレクトされません。
これが私の環境設定です:
Ubuntu 11.04
JBoss AS 5.1-GA
Apache 2
mod_jk 1.2.30
私のセットアップは次のようになります。
Apache Web Server: 192.168.1.12:80 - lb1
JBoss App Server 1: 192.168.1.12:8080 - app1
JBoss App Server 2: 192.168.1.23:8080 - app2
ロードバランサーとJBoss1は同じマシン上にあります。 (私はそれを2つの異なるマシンに保持しようとさえしました)。
Mod_jk.soファイルを/usr/lib/Apache2/modules/mod_jk.soにコピーし、次の手順を実行しました。
# echo LoadModule jk_module /usr/lib/Apache2/modules/mod_jk.so" > /etc/Apache2/mods-available/jk.load
を実行します# touch /etc/Apache2/mods-available/jk.conf
# touch /etc/Apache2/workers.conf
# a2enmod jk
Lb1マシンにファイル/etc/Apache2/workers.conf
を作成しました
# Defining the workers list:
worker.list=loadbalancer,status
# first worker properties, we use the AJB13 connection type:
worker.worker1.type=ajp13
worker.worker1.connection_pool_size=20
worker.worker1.Host=192.168.1.12
worker.worker1.port=8080
worker.worker1.lbfactor=1
# second worker properties, we use the AJB13 connection type:
worker.worker2.type=ajp13
worker.worker2.connection_pool_size=20
worker.worker2.Host=192.168.1.23
worker.worker2.port=8080
worker.worker2.lbfactor=1
# No we set the load balancing config
worker.loadbalancer.type=lb
worker.loadbalancer.sticky_session=true
worker.loadbalancer.balance_workers=worker1,worker2
worker.status.type=status
そして、ファイル/etc/Apache2/mods-available/jk.conf
を作成しました:
<IfModule mod_jk.c>
# The Jk shared mem location
JkShmFile /var/log/Apache2/mod_jk.shm
# Jk logs
JkLogFile /var/log/Apache2/mod_jk.log
# Jk loglevel
JkLogLevel info
# Jk logformat
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Our workers config
JkWorkersFile /etc/Apache2/workers.conf
# The most important:
# We will send eveything (/*) to our loadbalancer (set in JkWorkersFile)
JkMount /* loadbalancer
</IfModule>
JBossのserve.xmlファイルを変更しました:
<Connector port="8009" address="${jboss.bind.address}"
emptySessionPath="true" enableLookups="false" redirectPort="8443"
protocol="AJP/1.3" connectionTimeout="600000" maxThreads="200"/>
Mod_jkが初期化されていると表示されているログファイルを確認しました。
しかし、jbossの8080ポートにリダイレクトされません。
前もって感謝します。
これは私のmod_jk.logファイルです
[Tue Jul 19 13:17:23 2011] [5505:3079493376] [info] init_jk::mod_jk.c (3183):
mod_jk/1.2.28 initialized
[Tue Jul 19 13:17:23 2011] [5506:3079493376] [info] init_jk::mod_jk.c (3183):
mod_jk/1.2.28 initialized
およびApacheのerror.logファイル
[Tue Jul 19 13:17:23 2011] [notice] Apache/2.2.17 (Ubuntu) mod_jk/1.2.28 configured --
resuming normal operations
[Tue Jul 19 13:22:13 2011] [error] [client 192.168.1.12] File does not exist:
/var/www/favicon.ico
私はそのような潜在的なエラーを見ます:
AJPプロトコルを使用してポート8080で接続するworkers.conf
ファイルに基づいてください。 AJPを使用する場合は、次の定義を使用する必要があります(ポート定義を参照)。
worker.worker1.type=ajp13
worker.worker1.connection_pool_size=20
worker.worker1.Host=192.168.1.12
worker.worker1.port=8009
worker.worker1.lbfactor=1
server.xml
ファイルのEngine
タグに定義がありません。各サーバーで、jvmRoute
パラメーターを定義する必要があります-workrs.conf
ファイルに基づいて:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="worker1">
詳細については、こちらをご覧ください: http://Tomcat.Apache.org/Tomcat-5.5-doc/config/engine.html
JBossをどのように実行しますか?デフォルトでは、JBossはlocalhost
でのみlistineします。 netstat
を使用して確認できます。
netstat -ltnp
-b
パラメーターを指定してJBossを実行することもできます。
run.sh -b 192.168.1.12
これは、mod_jkを使用してjbossアプリケーションサーバーとApacheの負荷分散を行うためのプロセス全体です。
ステップ1:環境のセットアップ
Ubuntu 11.04
JBoss AS 5.1-GA
Apache 2
mod_jk 1.2.30
My setup looks something like the following:
Apache Web Server: 192.168.1.12:80 - lb1
JBoss App Server 1: 192.168.1.53:8080 - app1
JBoss App Server 2: 192.168.1.56:8080 - app2
ステップ2:Apacheを構成する
/ etc/Apache2/confフォルダーに次のファイルを作成します
step -I: create file httpd.conf
# Include mod_jk's specific configuration file
Include conf/mod-jk.conf
このファイルを/ etc/Apacheにあるファイルに置き換えます
step -II: create file mod-jk.conf
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
# Mount your applications
JkMount /application/* loadbalancer
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
# here cluster1 is the name of the test project that i used
JkMountFile conf/uriworkermap.properties
JkMount /cluster1 loadbalancer
JkMount /cluster1/* loadbalancer
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
JkShmFile logs/jk.shm
# Add jkstatus for managing runtime data
<Location /jkstatus/>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
<VirtualHost *:80>
ServerName 192.168.1.53
JkMountFile conf/uriworkermap.properties
</VirtualHost>
ステップ-III:ファイルuriworkermap.propertiesを作成します
# Simple worker configuration file
# Mount the Servlet context to the ajp13 worker
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
/web-console=loadbalancer
/web-console/*=loadbalancer
/*=loadbalancer
ステップ-IV:ファイルworkers.propertiesを作成します
# Define list of workers that will be used
# for mapping requests
worker.list=loadbalancer,status
# Define Node1
# modify the Host as your Host IP or DNS name.
worker.worker1.port=8009
worker.worker1.Host=192.168.1.53
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.worker1.cachesize=10
# Define Node2
# modify the Host as your Host IP or DNS name.
worker.worker2.port=8009
worker.worker2.Host= 192.168.1.56
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker2.cachesize=10
# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2
worker.loadbalancer.sticky_session=1
#worker.list=loadbalancer
# Status worker for managing load balancer
worker.status.type=status
# Simple worker configuration file
# Mount the Servlet context to the ajp13 worker
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
/web-console=loadbalancer
/web-console/*=loadbalancer
/*=loadbalancer
ステップ3:jbossを設定する
jbossのserver.xmlを次のように変更します。
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="worker1">
worker1の代わりにworker2を使用するserver2についても同じです。
ここで、jbossとApacheを起動します。 lb1マシンのブラウザーでlocalhostを試してください。これにより、server1で実行されているjbossページ(ポート8080)にリダイレクトされます。
最良の結果を得るには、3つの異なるマシンを使用してみてください。私はubuntu-11.04でそれを試しましたが、centosは正常に機能しています。
それでおしまい。
ありがとう...........。