13.5.4 恢复与重加入策略

恢复与重加入策略#

恢复与重加入策略决定后端从故障中恢复时的平滑性与业务稳定性,目标是避免抖动、雪崩重连与流量瞬时回灌。需通过检查间隔、阈值与权重渐进实现稳态恢复。

原理草图(慢恢复、快失败)

文章图片

关键策略与参数
- inter:健康检查间隔,恢复阶段不宜过短。
- rise:从 DOWN 到 UP 需要的连续成功次数。
- fall:从 UP 到 DOWN 需要的连续失败次数。
- slowstart:恢复后逐步提升权重,避免瞬时涌入。
- on-marked-down shutdown-sessions:标记 DOWN 时主动关闭会话。
- weight:恢复后配合 slowstart 使用,先低权重再升高。


配置示例(含恢复策略)#

文件路径:/etc/haproxy/haproxy.cfg

global
    log /dev/log local0
    maxconn 20000

defaults
    mode http
    log global
    timeout connect 5s
    timeout client  30s
    timeout server  30s
    option httpchk GET /health

frontend fe_web
    bind *:80
    default_backend be_app

backend be_app
    balance roundrobin
    default-server inter 2000 rise 3 fall 2 slowstart 30s on-marked-down shutdown-sessions
    server app1 10.0.0.1:8080 check weight 10
    server app2 10.0.0.2:8080 check weight 10

预期效果
- app1/app2 若故障,连续 2 次失败后摘除。
- 恢复需连续 3 次成功后进入 slowstart 30s 渐进放量。


启动/重载与验证#

检查配置语法

haproxy -c -f /etc/haproxy/haproxy.cfg
  • 说明:-c 校验配置,-f 指定配置文件。

平滑重载

systemctl reload haproxy
  • 说明:避免断链,保留现有连接。

验证健康状态(stats socket)
1) 启用 socket(加入 global

global
    stats socket /run/haproxy/admin.sock mode 660 level admin

2) 查询后端状态

echo "show servers state" | socat stdio /run/haproxy/admin.sock

预期输出关键字段
- srv_state2 表示 UP,1 表示 DOWN。


手动重加入与权重调整#

临时将节点加入并逐步放量

echo "set server be_app/app1 state ready" | socat stdio /run/haproxy/admin.sock
echo "set server be_app/app1 weight 5"    | socat stdio /run/haproxy/admin.sock
sleep 20
echo "set server be_app/app1 weight 10"   | socat stdio /run/haproxy/admin.sock
  • 说明:state ready 允许接收流量,先低权重再升高。

故障排查清单(含命令)#

1) 频繁上下线(抖动)

# 查看日志是否频繁出现 DOWN/UP
journalctl -u haproxy -n 200 | egrep "DOWN|UP"
  • 处理:增大 interrise,减少误判。

2) 恢复后流量暴增

# 查看后端当前权重与状态
echo "show servers state" | socat stdio /run/haproxy/admin.sock | grep be_app
  • 处理:设置 slowstart,并降低初始 weight

3) 健康检查路径误配

curl -I http://10.0.0.1:8080/health
  • 处理:确保 option httpchk 与应用健康接口一致。

练习与实操#

练习 1:模拟恢复慢放量
1) 将 slowstart 改为 60s,重载。
2) 手动 set server be_app/app1 state drain,观测流量下降。
3) 再 state ready,观察 60s 内权重逐步生效。

练习 2:调优 rise/fall
1) 设置 rise 5 fall 2,模拟后端间歇失败。
2) 观察上下线次数是否下降。

练习 3:检查间隔与误判
1) 设置 inter 500inter 3000 对比。
2) 记录日志中的 DOWN/UP 次数,选择更稳配置。