1. 概述与目标
本段说明目标:在不改动现有负载均衡器(LB)的大前提下,接入香港三网 CN2 加速节点(CDN),实现主动回源到现有 LB、智能调度、快速故障切换和最小化 DNS 变更。要求零停机或可控灰度,保留原有会话保持与日志链路。
2. 准备工作与前提清单
确认:1) CDN 提供商支持香港三网 CN2 Anycast 节点并提供 CNAME;2) 有回源白名单/鉴权方式(IP/Token);3) 当前 LB(如 Nginx/HAProxy/F5/云厂商 SLB)能接受 CDN 回源;4) 有短 TTL 的 DNS 服务用于灰度切换;5) 监控与日志可接入(Prometheus/Grafana/ELK)。
3. 架构设计(推荐两段回源模式)
说明两种模式:A. CDN 正向代理(CNAME 指向 CDN,CDN 回源到 LB)——最常见;B. CDN 作为旁路缓存(边缘直接缓存,回源依旧走 LB)。选择 A 时需配置回源白名单与真实 IP 转发(X-Forwarded-For / true-client-ip)。
4. DNS 与 CNAME 配置步骤
步骤:1) 在测试子域(如 cdn-test.example.com)创建 CNAME 到 CDN 提供的域名;2) 设置低 TTL(例如 60s);3) 上午低流量时段做灰度 5%-100%(用权重 DNS 或流量分发);4) 验证:dig +short cdn-test.example.com,curl -I --resolve 测试头部。示例命令:dig +short cdn-test.example.com CNAME;curl -H "Host: your.host" http://cdn-test.example.com/path -v。
5. 回源端(LB)配置实操:Nginx 示例
在 Nginx 上允许 CDN 回源并记录真实 IP:1) 在防火墙允许 CDN 回源 IP 段(供应商给出)2) Nginx 配置示例:
real_ip_header X-Forwarded-For;
set_real_ip_from 203.0.113.0/24; # CDN 回源网段
server {
listen 80;
server_name example.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend_upstream;
}
}
启用访问日志记录原始客户端 IP。
6. 回源端(LB)配置实操:HAProxy 示例
HAProxy 示例片段:
frontend http-in
bind *:80
acl from_cdn src 203.0.113.0/24
use_backend backend_cdn if from_cdn
backend backend_cdn
balance roundrobin
option forwardfor
server app1 10.0.0.11:80 check
server app2 10.0.0.12:80 check
在防火墙及 ACL 中放行 CDN 回源网段并开启 healthcheck。
7. 缓存策略与回源鉴权
配置 CDN 缓存规则:按路径设置缓存 TTL(静态资源长缓存,如 1d,API 短缓存或不缓存)。回源鉴权常用 token 或特殊 header:1) CDN 在回源请求添加 X-CDN-Token:
;2) LB 或应用校验该 token,避免绕过 CDN。示例 Nginx:if ($http_x_cdn_token != "mytoken") { return 403; }
8. 健康检查与故障切换
为确保故障时 CDN 自动回源到备用节点或直连后端,配置:1) CDN 的回源健康检查路径(/healthz),返回 200;2) LB 的后端健康 check(TCP/HTTP);3) DNS 备用解析:当 CDN 全面不可用时,短 TTL + DNS 切回原 A 记录。测试命令:curl -I http://your.origin/healthz;traceroute / mtr 验证路由。
9. 性能验证与路由确认(CN2 验证)
验证 CN2 路径可用性:1) 使用 mtr/traceroute -T -p 80 到 CDN 节点与 origin,比对 AS 路径;2) 使用 tcping 或 hping3 测量延迟与丢包;3) 在目标香港三网用户处做实测(或用第三方节点)。命令示例:mtr -r -w cdn-hk.example.com;tcping -t 80 cdn-hk.example.com。
10. 监控、日志与告警配置
监控项:回源失败率、缓存命中率、P95 响应时间、带宽与 QPS。CDN 提供商通常有统计 API,拉取数据到 Prometheus 或 ELK。设置告警阈值(比如回源 5min 失败率>5%);对日志做链路追踪(在请求 header 中注入 request-id 并在 CDN/应用端记录)。
11. 灰度上线与回滚流程
灰度流程:1) 在测试子域验证功能;2) 采用按比例 DNS(或 CDN 控制台流量分配)逐步放量 5% -> 25% -> 100%;3) 每步 30-60 分钟观察指标;4) 出问题时立即回滚到上一阶段或直接改回 A 记录(TTL 短)。回滚命令示例:修改 DNS 并观察 TTL 生效。
12. 常见问题与排错步骤
排错清单:1) 404/403:检查回源 Host header 和鉴权 token;2) 客户 IP 不正确:检查 real_ip 设置与 X-Forwarded-For;3) 结算流量异常:核对 CDN 报表和 origin 日志;4) 路由非 CN2:联系 CDN 支持并提供 traceroute 与 BGP AS 路径。
13. 问:为什么要把香港三网 CN2 CDN 与现有 LB 结合而不是直接替换?
答:直接替换风险高,可能导致会话丢失、证书重配、日志链断。结合方式能保留原有流量控制与监控,提供灰度与快速回滚路径,同时利用 CN2 的网络优势降低延迟与抖动。
14. 问:上线后如何验证请求真正走了 CN2 节点?
答:用 traceroute/mtr 看 AS 路径是否进入 CN2 AS(CDN 可提供节点 IP),或检查 CDN 响应头(X-Cache, Via)。也可在多个地域做 curl 并比对延迟与路径,或向 CDN 支持索取路由凭证。
15. 问:在突发故障时快速切回原有负载均衡需要哪些准备?
答:提前准备短 TTL DNS、备用 A 记录、自动化脚本(修改 DNS/监控阈值触发),并确保回源白名单与防火墙规则已包含备用路径。演练回滚流程并保证团队可在 5-10 分钟内完成切换。
来源:整合方案 将香港三网cn2 cdn 与现有负载均衡策略结合使用