1. 方案规划与架构选择
- 明确目标:将全球流量根据延迟/地理位置分发到新加坡(SG)与日本(JP)VPS;实现自动故障切换与会话粘性。
- 推荐两条可行路径:A)DNS级地理/延迟路由(Route53/Cloudflare Load Balancer/GeoDNS)B)反向代理集群(HAProxy/Nginx)+任意任播/全局DNS。中小规模优先选A,能快速上手。
2. 准备工作(前提条件)
- 域名并能管理DNS(支持Geo或API)。
- 两台VPS(SG和JP)已配置公网IP、SSH密钥、开放80/443端口。
- 已安装基本软件:nginx或应用程序;root或sudo权限。
3. 在两台VPS上部署相同应用与SSL
- 安装Nginx(Ubuntu示例):sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx。
- 配置站点并测试:在两边放置相同内容并在index.html中注明机房(e.g. "SG node" / "JP node")。
- 使用Certbot申请证书:sudo certbot --nginx -d example.com(注意:若使用Cloudflare代理,需采用DNS验证)。
4. 方案A:使用Cloudflare Load Balancer(推荐快速方案)
- 登录Cloudflare,选择Traffic → Load Balancing → Create Load Balancer。
- 添加Pool:Pool1(SG)填入SG VPS的IP及健康检查URL(/health),设置阈值与间隔;Pool2(JP)同理。
- 配置Load Balancer:选择Geo Steering或Latency Steering,设置故障切换顺序与会话持久性(Cookie)。把DNS记录指向Cloudflare LB域名,TTL设短(如 30s)。
5. 方案B:使用Route53延迟路由+健康检查(AWS)
- 在Route53创建两个Record Set(A记录),为同一域名配置延迟路由策略,分别指向SG和JP公共IP。
- 为每个目标创建Health Check(HTTP /health 返回200),配置失败阈值。Route53会自动将流量切到健康节点。
6. 方案C:自建HAProxy作为全局反向代理
- 在一台或多台LB节点上安装HAProxy:sudo apt install -y haproxy。
- haproxy.cfg简要示例:
frontend http-in bind *:80 mode http default_backend webservers
backend webservers balance leastconn mode http option httpchk GET /health
server SG 1.2.3.4:80 check
server JP 5.6.7.8:80 check
- 将域名A记录指向LB节点IP,LB负责转发并做健康检查与故障切换。
7. 配置健康检查与故障演练
- 在每台VPS配置简单健康页:/health 返回200。Nginx示例:location /health { return 200 "OK"; }。
- 验证:使用curl -I http://LB或直接curl -I http://VPS_IP/health查看返回。
- 故障演练:停止SG上的Nginx(sudo systemctl stop nginx),观察Cloudflare/Route53/HAProxy是否在设定时间切换。
8. 会话粘性与状态同步
- 如需会话粘性:Cloudflare支持Cookie持久,HAProxy使用cookie或stick-table:server SG 1.2.3.4:80 cookie s1。
- 若应用有状态(session、文件、数据库),建议把会话存储迁到Redis或数据库主从复制,并使用rsync/Unison同步静态文件。
9. 性能调优与安全建议
- 在Nginx/HAProxy上设置keepalive、gzip、缓存头,连接数限制和超时(timeout http-request 10s)。
- 防火墙:仅开放必需端口;使用fail2ban限制SSH暴力;开启HTTPS并启用HSTS。
- 监控:Prometheus + Grafana或Cloudflare/Route53内置监控,设置告警(健康检查失败、延迟上升)。
10. 日志、部署与自动化
- 使用集中化日志(ELK/Fluentd)收集两边访问日志,便于问题定位。
- 自动化部署:用Ansible脚本在SG/JP同步配置、证书续期与应用发布,示例任务:apt、nginx配置文件模板、systemd reload。
11. 小规模成本与扩展建议
- 小团队建议:优先使用Cloudflare或商用DNS(低成本、无需运维BGP)。Monthly cost: Cloudflare Load Balancer按流量+健康检查计费,Route53按健康检查计费但总体可控。
- 扩展:未来可接入CDN、Anycast或多区域数据库主从以降低跨境延迟。
12. 问:如何判断应该用DNS路由还是反向代理?
- 答:DNS级(Cloudflare/Route53)适用于跨地域高可用与按延迟分发,部署简单、无需额外LB节点;但切换有DNS缓存延时。反向代理(HAProxy/Nginx)适用于需要统一SSL终端、细粒度会话控制或自定义流量策略的场景,但需自建LB节点与运维。
13. 问:如何保证会话粘性与无缝故障切换?
- 答:优先将会话态迁移到集中存储(Redis、数据库)以实现无状态前端;若必须粘性,可用Cloudflare的持久cookie或HAProxy的cookie/stick-table;结合短TTL的DNS与健康检查可缩短故障切换窗口。
14. 问:针对新加坡和日本两节点,推荐的快速实施流程是什么?
- 答:快速路径:在两台VPS部署相同应用并启用/health;使用Cloudflare Load Balancer创建两个Pool并启用Latency/Geo Steering,开启健康检查与Cookie持久;把域名指向Cloudflare。验证故障切换与SSL。此方案实现速度快、运维简单,适合中小规模全球流量分发。
来源:如何通过负载均衡整合新加坡和日本的vps 实现全球流量分发