在Jboss前面配置Apache作为负载均衡器

时间:2016-07-31 20:09:40

标签: apache redirect jboss7.x httpd.conf mod-jk

我在JBoss AS 7.1中部署了我的Web应用程序。用Java编写中间件代码后,我开始编写用户界面。我想过使用Apache httpd访问静态资源,如css,js和html。因此我安装了httpd 2.4.23并进行了配置更改以访问我拥有静态资源的目录。然后我想使用httpd作为负载均衡器。为此,我安装了mod_jk 1.2.41。我创建了workers.property,其中包含以下详细信息:

# for mapping requests 
# The configuration directives are valid 
# for the mod_jk version 1.2.18 and later 
worker.list=loadbalancer,status 
# Define node 
# modify the host as your host IP or DNS name. 
worker.node.port=8009
worker.node.host=127.0.0.1 
#(IP or DNS name of the server on which Jboss is running) 
worker.node.type=ajp13 
worker.node.lbfactor=1 
# Load-balancing behaviour 
worker.loadbalancer.type=lb 
worker.loadbalancer.balance_workers=node 
worker.loadbalancer.sticky_session=1 
worker.status.type=status

这是我的mod-jk.conf

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMount /sb/* loadbalancer
JkMount /sb.web/* loadbalancer

我在httpd.conf的末尾添加了这个配置文件:

Include C:/Apache24/conf/mod-jk.conf

我检查了我的JBoss配置,参考以下内容:

https://docs.jboss.org/author/display/AS71/Using+mod_jk+with+JBoss+AS7#Usingmod_jkwithJBossAS7-Compile%26InstallApacheHttpd

我无法使用httpd URL来访问我的JBoss应用程序。它提供以下错误日志:

::1 - - [01/Aug/2016:01:26:58 +0530] "GET /sb/v1/sc/m/2/ HTTP/1.1" 503 299

mod-jk logs:

 [7132:1928] [info] jk_open_socket::jk_connect.c (817): connect to 127.0.0.1:8009 failed (errno=61)
 [7132:1928] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1068): (node) Failed opening socket to (127.0.0.1:8009) (errno=61)
 [7132:1928] [error] ajp_send_request::jk_ajp_common.c (1728): (node) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=61)
 [7132:1928] [info] ajp_service::jk_ajp_common.c (2773): (node) sending request to tomcat failed (recoverable), because of error during request sending (attempt=2)
 [7132:1928] [error] ajp_service::jk_ajp_common.c (2794): (node) connecting to tomcat failed (rc=-3, errors=4, client_errors=0).
 [7132:1928] [info] service::jk_lb_worker.c (1595): service failed, worker node is in error state
 [7132:1928] [info] service::jk_lb_worker.c (1675): All tomcat instances are busy or in error state
 [7132:1928] [error] service::jk_lb_worker.c (1680): All tomcat instances failed, no more workers left
 [7132:1928] [info] jk_handler::mod_jk.c (2991): Service error=0 for worker=loadbalancer

我能够通过自己的URL访问JBoss应用程序,并且可以使用httpd URL访问静态内容,这意味着这两个服务器都运行良好。 请帮忙。

3 个答案:

答案 0 :(得分:0)

确保Tomcat正在运行并连接到端口8009.请确认端口8009已打开并正在侦听

很抱歉,您正在使用JBoss,但我遇到了与Tomcat相同的问题,这就是我编写Tomcat而不是JBoss的原因。

答案 1 :(得分:0)

JBoss仅使用tomcat容器,mod_jk日志显示以下错误:

[7132:1928] [info] service::jk_lb_worker.c (1595): service failed, worker node is in error state
 [7132:1928] [info] service::jk_lb_worker.c (1675): All tomcat instances are busy or in error state
 [7132:1928] [error] service::jk_lb_worker.c (1680): All tomcat instances failed, no more workers left

因此,它只是意味着您的后端jboss节点已关闭或无法从apache访问。所以,看看您是否能够telnet到jboss ajp端口'从apache机器。如果你的apache和jboss实例在同一台机器上运行,那么就不应该有任何n / w问题。所以在这种情况下,查找server.log获取相同的时间戳,即获得错误时的时间戳& #34;所有tomcat实例都忙或处于错误状态"。

答案 2 :(得分:0)

  
    

但为什么tomcat。我在Apache https后面有JBoss。为什么Tomcat在这里??

  
  • 您可以将任何服务器用作后端服务器。因此,如果您在后端使用JBoss或tomcat并不重要。正如我之前所说;日志包含单词' tomcat'只是因为Jboss在内部使用tomcat容器。所以,在你的情况下你只需要担心8009上的AJP端口监听;因为mod_jk只使用AJP协议。所以,确保你能够从Apache远程登录到后端Jboss实例。 正如你所说;你的JBoss和apache都在同一台机器上运行;所以,确保你使用了正确的端口和ip地址。另外,看看你是否正在使用任何port-offset。如果是,则相应地更改值。 / p>

    [7132:1928] [error] service :: jk_lb_worker.c(1680):所有tomcat实例都失败了,不再有工人离开