Apache Tomcat负载均衡未按轮询方式工作问题求助
Apache Tomcat负载均衡未生效/不符合预期的解决方案
问题定位
从你的worker.properties配置来看,存在几个核心问题导致负载均衡不符合预期:
- 仅配置了2个Tomcat节点,但你实际部署了3个,第三个节点完全未加入负载池
- 负载均衡方法设置为
Busyness(基于节点繁忙度分配),而非你需求的轮询(Round Robin) - 开启了
sticky_session=1(会话粘性),会导致同一用户的请求固定发往同一个节点,直观上看起来轮询未生效
具体修复步骤
添加第三个Tomcat节点的配置
在配置中加入第三个节点的worker定义,保持参数与前两个一致:worker.COMPUTER3_usmview.port=8009 worker.COMPUTER3_usmview.host=COMPUTER3 worker.COMPUTER3_usmview.type=ajp13 worker.COMPUTER3_usmview.lbfactor=10修改负载均衡方法为轮询
将worker.loadbalancerview.method=Busyness替换为轮询模式,或者直接删除该行(默认即为Round Robin):worker.loadbalancerview.method=RoundRobin调整会话粘性设置
- 如果不需要会话粘性(允许同一用户的请求分发到不同节点),将
sticky_session=1改为:worker.loadbalancerview.sticky_session=0 - 如果必须保留会话粘性,轮询仅会作用于新会话的初始分配,同一用户后续请求仍会固定到该节点,这是正常行为,需确认是否符合你的业务需求。
- 如果不需要会话粘性(允许同一用户的请求分发到不同节点),将
更新负载池节点列表
将第三个节点加入balance_workers:worker.loadbalancerview.balance_workers=COMPUTER1_usmview,COMPUTER2_usmview,COMPUTER3_usmview
修改后的完整配置示例
worker.list=loadbalancerview worker.loadbalancerview.method=RoundRobin worker.loadbalancerview.type=lb worker.loadbalancerview.balance_workers=COMPUTER1_usmview,COMPUTER2_usmview,COMPUTER3_usmview worker.loadbalancerview.sticky_session=0 worker.COMPUTER1_usmview.port=8009 worker.COMPUTER1_usmview.host=COMPUTER1 worker.COMPUTER1_usmview.type=ajp13 worker.COMPUTER1_usmview.lbfactor=10 worker.COMPUTER2_usmview.port=8009 worker.COMPUTER2_usmview.host=COMPUTER2 worker.COMPUTER2_usmview.type=ajp13 worker.COMPUTER2_usmview.lbfactor=10 worker.COMPUTER3_usmview.port=8009 worker.COMPUTER3_usmview.host=COMPUTER3 worker.COMPUTER3_usmview.type=ajp13 worker.COMPUTER3_usmview.lbfactor=10
验证步骤
- 重启Apache服务,使配置生效
- 使用不同浏览器/清空Cookie的方式访问
mysite.com,查看三个Tomcat节点的访问日志(如localhost_access_log.*.txt),确认请求是否按轮询方式依次分发
内容的提问来源于stack exchange,提问作者8Bits
相关产品推荐
相关产品推荐

