You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache HTTPD负载均衡配置:粘性会话与故障转移技术问询

Apache HTTPD负载均衡器配置问题解答

配置文件

<VirtualHost _default_:80>
RewriteEngine On
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https" env=HTTPS

<Proxy "balancer://webtop">
    BalancerMember "http://internalsite:7003" route=web1 ping=2
    BalancerMember "http://internalsite:7006" route=web2 ping=2
    ProxySet lbmethod=byrequests 
</Proxy>

<Location /webtop>
    ProxyPass balancer://webtop/webtop stickysession=ROUTEID nofailover=On
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/webtop" env=BALANCER_ROUTE_CHANGED
</Location>
</VirtualHost>

问题与解答

问题1:首次连接时,客户端无ROUTEID Cookie,负载均衡器能否先检查BalancerMember的状态,再进行节点分配,避免分配至已下线的BalancerMember?

可以。你配置里的ping=2参数已经为每个BalancerMember启用了健康检查,Apache的mod_proxy_balancer会每隔2秒向节点发送健康探测请求。一旦某个节点被检测为下线,会被标记为不可用状态,负载均衡器在分配首次请求时,只会从处于正常状态的节点中挑选,不会将请求转发到已下线的节点。

问题2:当客户端持有指向web1的ROUTEID Cookie,但该BalancerMember已故障时,发起新请求后,HTTPD能否自动将Cookie切换为web2并转发至该节点?

当前配置下不能,因为你在ProxyPass里设置了nofailover=On。这个参数的作用是:当绑定的会话节点故障时,拒绝进行故障转移,直接返回错误给客户端。

如果想要实现自动切换,需要将nofailover=On改为nofailover=Off(或者直接删除这个参数,因为默认值就是Off)。修改后,当web1节点故障时,负载均衡器会忽略该节点,自动将请求转发到健康的web2节点,同时因为路由发生了变化,BALANCER_ROUTE_CHANGED环境变量会被触发,Header指令会向客户端发送新的ROUTEID Cookie,将后续请求绑定到web2节点。

内容的提问来源于stack exchange,提问作者Vladimir Povyshev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:55:42