1. 目标:在香港地域对站群(大量域名)同时使用 cn1 和 cn2 两条出口线路实现负载分担、冗余和稳定性。
2. 成果:实现自动健康检测、流量分发、会话保持、证书自动续期与故障切换,且能快速回滚。
2. 准备:A. 两组公网出入口(cn1、cn2)的公网 IP 或节点列表;B. DNS 提供商支持 API 操作(如 Cloudflare、DNSPod);C. 反向代理服务器(建议 Nginx/HAProxy)若干;D. 管理权限的 SSH 账号与监控账号。
3. 步骤:1) 对每个域名设置双 A 记录指向 cn1 与 cn2 的反代节点,TTL 设为 60s;2) 如支持,可用 GeoDNS 将香港地区优先指向最近线路;3) 若需快速切换,准备 DNS API Key 与脚本。
4. 示例配置:1) 在 Nginx 增加两个 upstream 集合,分别列出 cn1、cn2 后端;2) 使用 ip_hash 或 sticky session 保持会话;3) proxy_pass 指向 upstream。示例:
upstream backend_cn1 { server 10.0.1.10:80; server 10.0.1.11:80; }
upstream backend_cn2 { server 10.0.2.10:80; }
server { location / { proxy_pass http://backend_cn1; } }
5. 实操:1) 写一个健康检查脚本 check_backends.sh,定期 curl 后端健康页(/health),若单条线路全部异常则标记为 down;2) 切换方法 A:通过修改 Nginx include 文件(例如 include upstream_active.conf)并 nginx -s reload;方法 B:通过 DNS API 移除/新增 A 记录;3) 将脚本放入 systemd timer 或 crontab,每 30s 检查。
6. 脚本要点:1) 并发检测后端,超时 3s,连续 3 次失败才判定 down;2) 日志记录到 /var/log/health_check.log;3) 切换时先 notify 运维群(通过 webhook),再操作 Nginx 或 DNS;4) 操作完成后做二次验证。
7. 建议:1) 若站群域名数量大,使用 DNS-01 验证申请通配符证书或批量证书(certbot + DNS 插件);2) 自动续期通过 cron + reload(certbot renew --deploy-hook "systemctl reload nginx");3) 将私钥与证书存放在统一目录并限制权限。
8. 实践:1) 若业务依赖会话,优先使用集中式会话存储(Redis/Memcached),避免依赖 ip_hash;2) 若短平快的站群可用 ip_hash 保持会话;3) 前端开启正确的 Cache-Control,后端设置 Vary 头避免缓存污染。
9. 建议步骤:1) 在边缘反代做限流(limit_req、limit_conn);2) 使用 fail2ban 与 iptables 限制异常流量;3) 对管理接口加白名单,仅允许运维 IP;4) 定期更新系统与 Nginx。
10. 实施:1) 部署简单的可用性监控(Prometheus + Alertmanager 或 Uptime Kuma);2) 后端与 Nginx 的 access/error 日志集中到 ELK 或 Loki;3) 告警策略:线路完全不可用触发电话短信,单节点异常发邮件/IM。
11. 切换样例:1) 预备:确认两条线路节点健康,各节点配置一致;2) 原地测试:向 cn1 节点发流量,观察 1 小时无错误;3) 开启双 A 记录分发流量(TTL 60);4) 启动健康检查脚本并观察 10 分钟;5) 如 cn1 故障,脚本自动从 upstream 列表移除 cn1 并 reload Nginx;6) 故障恢复后逐步回流并验证状态。
12. 风险与对策:1) DNS 缓存导致切换延迟——用短 TTL 并记录上游 ISP 缓存;2) 配置错误导致大面积故障——变更前先在灰度节点测试并保留回滚脚本;3) 回滚:使用版本控制的 upstream 文件 quick-rollback.sh 一键恢复并 reload。
13. 答:混合使用能分散单线路故障风险、减轻拥堵并提高可用性;当一条线路出现网络质量下降或被封锁时,另一条可承载流量,保证业务连续性和更稳定的访问体验。
14. 答:优先使用反向代理层的健康切换(修改 upstream + reload)实现几秒级切换;同时将 DNS TTL 设低并结合 DNS API 自动化更新;对关键客户可考虑走专线或 BGP 多线。
15. 答:对大量域名建议使用 DNS-01 验证批量签发或通配符证书,配合自动化脚本(certbot + DNS API 插件)定期 renew 并在 deploy-hook 中自动 reload 反代,减少人工干预导致的失误。