我们正在使用带有 4 个后端 JBoss 的 Apache mod_proxy_loadbalancer,以下是后端服务器的配置:
<Proxy balancer://www>
Allow from all
BalancerMember x.11:8080/APP route=node11 timeout=600 ttl=7200
BalancerMember x.12:8080/APP route=node12 timeout=600 ttl=7200
BalancerMember x.12:8081/APP route=node122 timeout=600 ttl=7200
BalancerMember x.14:8080/APP route=node14 timeout=600 ttl=7200
ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid nofailover=On
</Proxy>
ProxyPass /APP balancer://www/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse /APP balancer://www/
我们的问题是请求不是平衡器,大多数请求都转到“node12”,以下是平衡器管理器的状态:
LoadBalancer Status for balancer://www
StickySession Timeout FailoverAttempts Method
JSESSIONID|jsessionid 0 3 byrequests
Worker URL Route RouteRedir Factor Set Status Elected To From
x.11:8080/APP node11 1 0 Ok 6500 8.3M 33M
x.12:8080/APP node12 1 0 Ok 5690 38M 8.2M
x.12:8081/APP node122 1 0 Ok 6886 8.8M 35M
x.14:8080/APP node14 1 0 Ok 6272 7.5M 35M
这是否意味着当我们使用 StickySessions 时负载平衡器不起作用?我们如何确保每个服务器都有相同的请求?
顺便说一句:请将 x 替换为 192.168.1,因为 serverfault 不允许添加多个链接。谢谢,
唐
答案1
如果您根据请求进行负载平衡,但根据 sessionid 进行持久化,那么您实际上不会看到均匀分布的负载平衡器统计信息。每个用户会话包含可变数量的请求(一些用户可能只浏览了网站上的 3 或 4 个页面,一些用户可能浏览了 15 个页面,一些用户个人资料的数据比其他用户多,等等)。
话虽如此,看看你的 lb stats 输出(并假设 node12 的值是相反的),你的请求做考虑到持久性是活跃的,看起来相当平衡。