虚拟主机中用mod_proxy_balancer平滑下线维护的关键是启用status=+d状态,使目标节点停止接收新请求但保留活跃会话,配合权重调整、健康检查与会话保持实现零中断维护。
在虚拟主机中用 mod_proxy_balancer 实现负载平滑下线维护,核心是不中断用户会话、不丢请求、逐步转移流量,而不是直接关停后端节点。关键在于结合健康检查、状态标记、权重调整与会话保持机制。
一、提前准备:确保基础能力就绪
- 确认已启用模块:
proxy,proxy_http,proxy_balancer,proxy_hcheck(推荐 Apache ≥2.4.43) - 后端应用需支持会话粘性(如返回
JSESSIONID或自定义ROUTEIDcookie) - 虚拟主机配置中已启用
stickysession和route参数,保障用户持续访问同一节点
二、维护前:将目标节点设为“只读”并降权
对即将下线的后端(例如 192.168.1.11:8080),不直接移除,而是动态调整其角色:
- 设置
status=+D(Drain):Apache 2.4.43+ 支持该状态,表示不再接受新请求,但允许已有会话继续完成 - 同时将
loadfactor设为1(或更低),大幅降低新连接分配概率 - 配合
retry=300(5分钟),避免短暂故障误判
示例配置片段:
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 route=server1 loadfactor=5
BalancerMember http://192.168.1.11:8080 route=server2 loadfactor=1 status=+D
ProxySet stickysession=JSESSIONID|ROUTEID
ProxySet lbmethod=bybusyness
</proxy>
ProxyPass "/app" "balancer://mycluster/app"
ProxyPassReverse "/app" "balancer://mycluster/app"
✅
status=+D是平滑下线的关键——它让 Apache 自动停止向该节点派发新请求,但保留活跃会话连接,直到超时或客户端自然断开。
FastAPI Flask Proxy下载FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
三、维护中:监控会话收敛与节点空闲
- 访问
/balancer-manager页面,观察server2的 “Busy”、“Ready”、“Elected” 数值是否持续下降 - 检查后端 access log,确认新请求不再进入
server2,而旧会话请求仍在响应 - 若有长连接(如 WebSocket、流式接口),可配合后端主动关闭连接或设置
timeout=60缩短会话生命周期
四、维护后:安全摘除节点
当 server2 的 Busy 连接数归零、且无新 Elected 记录持续 2–3 分钟后:
- 可在配置中临时注释或删除该
BalancerMember行 - 或改用
status=+H+hcexpr主动探测,确认其不可达后再移除(更稳妥) - 重启 Apache 非必需;热重载
sudo systemctl reload apache2即可生效
不复杂但容易忽略











