Skip to content

蓝绿部署与灰度发布

HAProxy 支持多种发布策略,可实现不停机的平滑更新和精细的流量控制。

蓝绿部署基础

haproxy
frontend web_front
    bind *:80
    bind *:443 ssl crt /etc/ssl/certs/

    acl is_green var(txn.deploy_target) -m str green

    use_backend web_green if is_green
    default_backend web_blue

backend web_blue
    server app1 10.0.0.11:8080 check

backend web_green
    server app1 10.0.0.21:8080 check

灰度发布(基于权重)

haproxy
backend web_backend
    balance roundrobin
    
    # 旧版本 90%,新版本 10%
    server app_old 10.0.0.11:8080 weight 90 check
    server app_new 10.0.0.21:8080 weight 10 check

按用户比例灰度

haproxy
    acl is_beta_user cook(BETA_VERSION) -m str true
    acl is_vip_user cook(USER_TIER) -m str vip
    use_backend web_new if is_beta_user
    use_backend web_new if is_vip_user

金丝雀发布脚本

bash
for pct in 5 10 20 30 50 100; do
    echo "set server web_backend/app_new weight $pct" | socat /run/haproxy-admin.sock stdio
    sleep 60
done

A/B 测试配置

haproxy
    acl group_a cook(AB_GROUP) -m str A
    acl group_b cook(AB_GROUP) -m str B
    use_backend web_variant_a if group_a
    default_backend web_variant_b