提问者:小点点

tomcat负载均衡器无法连接到其他电脑上的服务器


我使用以下配置设置了一个简单的负载均衡器

  • PC0(win10)是我实际运行VirtualBox的电脑,有两个PC(PC1和PC2)
  • PC1(win10)正在运行带有mod_jk负载均衡器和tomcat应用程序服务器的ApacheHTTP服务器
  • PC2(win10)正在运行tomcat应用程序服务器

负载均衡器和tomcat服务器正在工作:

  1. 从PC1,如果我浏览到localhost,我看到ApacheHTTP服务器主页
  2. 从PC1,如果我浏览到localhost/jkstatus,我看到JK状态管理器页面
  3. 从PC1,如果我浏览到localhost:8080,我看到tomcat主页
  4. 从PC1,如果我浏览到localhost/examples,我看到tomcat示例页面
  5. 从PC1,如果我浏览到PC2. ipaddres:8080,我看到tomcat主页
  6. 从PC2,如果我浏览到PC1. ipaddres/jkstatus,我会看到JK状态管理器页面
  7. 从PC2,如果我浏览到PC1. ipaddres:8080,我看到tomcat主页
  8. 从PC2,如果我浏览到PC1. ipaddres/示例,我会看到tomcat示例页面

这一切似乎都有效。现在,如果我关闭PC1上的tomcat应用程序服务器,则4和8不再工作:它会抛出503服务不可用页面。负载均衡器似乎无法重定向到PC2。事实上,JK状态管理器页面显示PC2处于ERR/REC状态(PC,但那是因为我在该PC上关闭了Tomcat)。

我在日志中没有看到任何可疑的东西。

接下来,我认为它必须与防火墙有关(阻止端口8009),所以我禁用了所有PC(PC0、PC1和PC2)上的防火墙。但这没有帮助。我假设这排除了防火墙阻止任何东西?

我仍然怀疑有任何东西阻止了连接…

有什么建议吗?

我的版本:

  • Apache超文本传输协议服务器:httpd-2.4.46-win64-VS16(https://www.apachelounge.com/download/)
  • Tomcat: apache-tomcat-9.0.41-windows-x64
  • Tomcat连接器(mod_jk):mod_jk-1.2.48-win64-VS16(https://www.apachelounge.com/download/)

我的配置:

Apache/conf/httpd. conf,添加到底部:

# Load mod_jk module 
LoadModule jk_module modules/mod_jk.so 
<IfModule jk_module>
JkWorkersFile conf/workers.properties 
JkLogFile logs/mod_jk.log 
JkLogLevel info 
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" 
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories 
JkMount /examples balancer 
JkMount /examples/* balancer 
JkMount /jkstatus jkstatus 
</IfModule>

Apache/conf/workers.properties:

worker.list=jkstatus, balancer 
Declare Tomcat server worker1 
worker.worker1.type=ajp13 
worker.worker1.host=localhost
worker.worker1.port=8009 
worker.worker2.type=ajp13 
worker.worker2.host=10.160.85.122
worker.worker2.port=8009 
worker.balancer.type=lb 
worker.balancer.balance_workers=worker1,worker2 
worker.jkstatus.type=status 

Tomcat/conf/server. xml,添加:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secretRequired="false"/> 
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">

(在PC2jvmRoute="worker2"上)


共2个答案

匿名用户

请在worker.properties中使用以下配置。

worker.list=loadbalancer,status
worker.template.port=8009
worker.template.type=ajp13
worker.template.ping_mode=A
worker.template.socket_connect_timeout=10000
worker.worker1.reference=worker.template
worker.worker1.host=127.0.0.1
worker.worker2.reference=worker.template
worker.worker2.host=10.160.85.122
worker.loadbalancer.balance_workers=worker1,worker2
worker.loadbalancer.type=lb
worker.loadbalancer.sticky_session=True
worker.status.type=status

Mod_JK:

JkMount /* loadbalancer
JkMount /jkstatus status 

匿名用户

感谢您的回复。不幸的是,它没有解决问题。问题仍然没有改变。

我也试图让情况变得简单一些。我将HTTP服务器移动到PC0,只在PC1上运行一个tomcat服务器。同样,问题没有改变。我仍然收到503错误。

httpd. conf

LoadModule jk_module modules/mod_jk.so 
<IfModule jk_module>
JkWorkersFile conf/workers.properties 
JkLogFile logs/mod_jk.log 
JkLogLevel info 
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" 
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories 
JkMount /examples worker1
JkMount /examples/* worker1
</IfModule>

workers.properties

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=10.160.85.252
worker.worker1.port=8009