我正在尝试使用 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 在同一台机器上。(我甚至尝试将其放在两台不同的机器上)。
我已将 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
/etc/apache2/workers.conf
我已经在 lb1 机器上创建了该文件
# 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
答案1
我看到了这样的潜在错误:
根据
workers.conf
文件,您希望使用 AJP 协议连接到端口 8080。如果您想要使用 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
Engine
文件中的标签缺少定义server.xml
。在每个服务器上,您都应该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
。你可以使用以下命令进行检查netstat
:netstat -ltnp
您还可以使用
-b
参数运行 JBoss:run.sh -b 192.168.1.12
答案2
以下是使用 mod_jk 对 jboss App 服务器和 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">
对于 server2 来说也是一样,使用 worker2 而不是 worker1。
现在启动 jboss 和 apache。在 lb1 机器上的浏览器中尝试 localhost,它将重定向到在 server1 上运行的 jboss 页面(在端口 8080 上)。
为了获得最佳效果,请尝试使用三台不同的机器。我在 ubuntu-11.04 和 centos 上尝试过,效果很好。
就是这样。
谢谢.............