1.1 确保至少两台香港 nwt VPS(建议3台以上),实例系统以 Ubuntu 20.04/22.04 为例。
1.2 准备一台或多台作为负载均衡层(LB),以及若干应用节点(App)。LB 上需公网IP并开放 80/443/管理端口。
1.3 准备域名并可修改 DNS、准备 SSH 访问、root 或 sudo 权限,服务器时间同步(ntp 或 chrony)。
2.1 拓扑建议:公共 DNS(或 Cloudflare)做全球/区域级流量分配 -> 一组 LB 节点(HAProxy/Nginx)做应用分发 -> 后端 App 节点。若同一区域多机使用 Keepalived 做 VIP 高可用。
2.2 IP、端口规划:LB: 80/443 前端,内部与 App 通过私网或防火墙白名单 8080/3000。
2.3 健康检查策略:每 5-10s 一次 HTTP GET /health,超时 2s,连续失败 3 次剔除。
3.1 如果使用 Cloudflare,将域名接入后,创建 A 记录指向多个 LB 的公网 IP 并启用负载(可使用负载平衡服务)。
3.2 若用普通 DNS,设置多个 A 记录(轮询),并增加 TTL 为 60-120 秒以便快速生效;或使用 GeoDNS 将特定地区流量导向最近 LB。
4.1 安装:sudo apt update && sudo apt install -y haproxy
4.2 编写基本配置:编辑 /etc/haproxy/haproxy.cfg,示例配置要点如下:
frontend http_front bind *:80 mode http option httplog default_backend app_pool
backend app_pool mode http balance roundrobin option httpchk GET /health server app1 10.0.0.11:8080 check inter 5000 rise 2 fall 3 server app2 10.0.0.12:8080 check inter 5000 rise 2 fall 3
4.3 重启并开启:sudo systemctl enable --now haproxy;查看状态 sudo systemctl status haproxy。
5.1 推荐在 HAProxy 做 SSL 终止,先在 LB 上用 certbot 获取证书:sudo apt install certbot && sudo certbot certonly --standalone -d yourdomain.com
5.2 在 haproxy.cfg 中 bind *:443 ssl crt /etc/letsencrypt/live/yourdomain.com/fullchain.pem/private.key,并把 80 重定向到 443,确保证书自动续期(cron 或 systemd timer)。
6.1 若应用需会话保持,可使用 cookie:在 backend 添加 cookie SRV insert indirect nocache 名称。
6.2 调整超时时间:frontend/backend 添加 timeout connect 5s timeout client 30s timeout server 30s。
6.3 配置简单限流以防暴力请求:frontend 添加 stick-table type ip size 1m expire 10s store http_req_rate(10s) 并在后续 acl/deny 规则中使用。
7.1 安装:sudo apt install -y keepalived。配置 /etc/keepalived/keepalived.conf,设置虚拟 IP(VIP)并使用 vrrp 同步优先级。
7.2 示例关键项:vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 203.0.113.10 } }
7.3 注意:Keepalived 只适用于同一二层可达的机器,不跨广域。跨地域请用 DNS/Anycast/云 LB。
8.1 在 HAProxy 启用 stats 页面:在 haproxy.cfg 添加 listen stats bind *:9000 stats enable stats uri /stats auth admin:password,访问检查。
8.2 配置 Prometheus + node_exporter 或 haproxy_exporter,设置报警(流量骤增、后端剔除、错误率上升)。
8.3 日志分析:使用 rsyslog 将 haproxy 日志写入 /var/log/haproxy.log,结合 fail2ban 防护异常请求。
9.1 基本验证:curl -I https://yourdomain.com,查看响应头与证书;访问 /stats 检查后端健康状态。
9.2 故障演练:逐台下线后端,观察 HAProxy 是否剔除并平滑切换;模拟高并发压测(ab、wrk)并观察延迟、错误率。
9.3 常见故障排查:连接超时看防火墙(ufw/iptables),后端 502/503 查看应用日志与 keepalive 超时。
问:使用香港 nwt VPS 做多地域负载均衡,是否必须使用第三方 DNS 服务?
答:不必须,但强烈推荐。普通 DNS 多 A 记录能做简单轮询,无法做健康检测和智能分发。第三方(如 Cloudflare、DNSMadeEasy)提供健康检查、GeoDNS、流量调度以及更短 TTL,有利于快速切换与稳定性。
问:我只有两台 VPS,如何保证高可用?
答:建议一台做 LB(HAProxy + SSL),另一台做应用,并在另一地域再购买至少一台备用 App 或 LB。若只能两台,可在两台互为 LB+App(通过 Nginx/HAProxy 反向代理到本机服务),并用 DNS 轮询,但可用性和容灾能力有限。长期建议至少 3 台分布在不同机房。
问:如何设置健康检查以避免误杀后端?
答:采用应用级健康接口(/health),返回 200 并检查依赖(DB、缓存)。将 healthcheck 的超时设置合理(例如 timeout 2s,rise 2,fall 3),避免短暂波动导致剔除;并结合监控报警人工介入。