我在同一个网络上有 2 个后端服务器,两台机器上都有 2 个 Tomcat,它们都运行同一个应用程序。此外,我还有一台主机,我把应用程序加载到该主机上,它决定请求应该发给哪个工作进程。问题是,无论如何,负载均衡器机器总是选择第二个工作进程,当我操纵应用程序使其在第二台机器上不工作时,我在主机上加载应用程序,即使工作进程 1 正在工作,应用程序也不会加载,但是当我关闭第二台机器上的 Tomcat 时,它会将请求重定向到第一个工作进程,这样它就可以正常工作了。如何让它工作?为什么它总是选择第二个工作进程?
工人.属性:
worker.list=jkstatus,router
worker.jkstatus.type=status
worker.router.type=lb
worker.router.balance_workers=worker1,worker2
worker.router.method=B
worker.router.sticky_session=true
worker.template.type=ajp13
worker.template.lbfactor=1
worker.template.recovery_options=3
worker.template.socket_keepalive=true
worker.template.connection_pool_timeout=180
worker.worker1.reference=worker.template
worker.worker1.host=firstmachine.abc.com
worker.worker1.port=8009
worker.worker1.redirect=worker2
worker.worker2.reference=worker.template
worker.worker2.host=secondmachine.abc.com
worker.worker2.port=8009
worker.worker2.redirect=worker1
答案1
如果你的应用程序不需要它,请尝试更改worker.router.sticky_sessions
为false
。以下是来自文档的解释:
sticky_session 指定是否应将带有 SESSION ID 的请求路由回创建会话的同一 Tomcat 实例。当 Tomcat 使用可以在多个 Tomcat 实例之间共享会话数据的会话管理器时,或者当您的应用程序是无状态的时,您可以将 sticky_session 设置为 false。默认情况下,sticky_session 设置为 true。 https://tomcat.apache.org/connectors-doc/common_howto/loadbalancers.html