我正在努力设置几台应用服务器前的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
我不确定最后两行代码是否有用,虽然我在网上查看了许多示例,并发现其中一个使用了这些代码,所以我尝试添加它们以查看是否可以解决我的问题(但实际上并没有作用)。
问题在于,如果我注释掉BalancedMember的任一行,例如:
#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/
注意对于每个节点而言,'route'属性需要在节点本身上设置(在该情况下为server.xml,因为服务器运行的是JBoss)。 JSESSIONID可以作为单个应用程序的黏性会话cookie正常工作,但每个服务器上有不止一个应用程序,并且用户需要使用相同的节点来访问所有应用程序。