retry参数定义后端节点故障后的冷却期(单位秒),如retry=5表示节点失败后5秒自动恢复参与负载;需与failonstatus、timeout、maxattempts等配合使用,单独配置无效。

retry 参数不是 ProxyPass 指令本身的参数,而是作用于后端节点(BalancerMember 或 ProxySet)的连接恢复控制项。它不决定“重试几次”,而是定义节点失败后多久重新参与流量分发——这才是应对后端瞬间抖动(如短暂503、超时、GC卡顿)最直接有效的容灾手段。
retry 的真实作用机制
- 单位是秒,表示该后端被标记为“失效”后,进入冷却期,期间不接收任何新请求
- 冷却期结束后,Apache 自动将其重新纳入负载池,无需人工干预或重启
- 它配合
failonstatus和timeout才能触发:只有当请求因这些条件失败,节点才会被标记失效,进而启动 retry 计时
例如:
<Proxy balancer://myapp> BalancerMember http://10.0.1.10:8080 retry=5 BalancerMember http://10.0.1.11:8080 retry=5 ProxySet failonstatus=500,502,503,504 timeout=3 </Proxy> ProxyPass / balancer://myapp/
这样配置后,若某台后端在3秒内返回503,它会被立即踢出,但5秒后就自动回归——刚好覆盖大多数瞬时抖动(如Spring Boot健康检查间隙、数据库连接池临时耗尽、JVM STW)。
阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。
合理设置 retry 值的关键依据
- 太短(如 retry=1):可能未等后端真正恢复就重试,反复失败,加重雪崩风险
- 太长(如 retry=60):抖动只持续2秒,却让节点闲置1分钟,浪费容量,降低可用性
-
推荐值范围:
- 纯HTTP服务(无状态):
retry=5–15 - 带会话/事务的后端:
retry=15–30(留足事务清理与连接重建时间) - 配合健康探测更稳:加
ping=3(每3秒主动探活),可比单纯依赖失败请求更快感知恢复
- 纯HTTP服务(无状态):
必须同步配置的配套参数
仅设 retry 不生效,需组合使用:
-
failonstatus=500,502,503,504:把典型错误码显式纳入故障判定 -
timeout=3或ttl=30:避免单次请求卡死太久,拖慢整体响应 -
maxattempts=2(配合lbmethod=byrequests):允许同一请求在不同后端间最多尝试2次,提升单次成功率
验证是否起效的简单方法
- 故意让一台后端短暂返回503(如用
curl -s -o /dev/null -w "%{http_code}" -X GET http://backend/health模拟) - 查看
/balancer-manager页面,对应节点状态应变为down (retry in X sec) - 等待设定秒数后,状态自动变回
OK,且新请求开始命中该节点
不复杂但容易忽略:retry 不是“重试开关”,而是“故障退出再入场”的节奏控制器。用对了,后端抖三秒,用户几乎无感。

















