我正在努力在几个应用程序服务器前设置一个 Apache httpd 负载平衡器。这是我的配置:
ProxyRequests off
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080
BalancerMember http://remote-svr:8080
ProxySet lbmethod=bybusyness
ProxySet stickysession=JESSIONIDSSO
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
ProxyPassReverseCookieDomain http://127.0.0.1:8080 localhost
ProxyPassReverseCookieDomain http://remote-svr:8080 localhost
我不确定最后两行是否有任何作用,尽管我在网上查看的众多示例之一使用了它们,所以我添加了它们以查看它是否解决了我的问题(它没有)。
问题是,如果我注释掉任何一个 BalancerMember 行,例如:
#BalancerMember http://127.0.0.1:8080
BalancerMember http://remote-svr:8080
那么从用户的角度来看行为是好的,但是当两个成员都活跃时,行为是错误的。
该应用程序最初显示一个登录屏幕,但是当两个负载均衡器都处于活动状态时,提交用户名和密码的用户再次被重定向回登录屏幕,可能会话在某处丢失。有谁知道问题可能是什么?
编辑 - 现在工作
作为参考,这个设置现在似乎有效:
ProxyRequests off
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080 route=localServer
BalancerMember http://remote-svr:8080 route=remoteServer
ProxySet lbmethod=bybusyness
ProxySet stickysession=ROUTEID
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
请注意,需要在节点本身上设置各个节点的“路由”属性(在本例中为 server.xml,因为服务器运行 JBoss)。JSESSIONID 作为单个应用程序的粘性会话 cookie 工作正常,但每台服务器上有多个应用程序,用户需要对所有应用程序使用相同的节点。