1.
概述与目标
- 目标:在云主机环境下使用台湾原生公网IP,构建对外稳定的负载均衡;包含托管LB与自建方案。
- 输出:可用于网站或应用的台灣來源IP池、健康检查、会话保持与故障切换策略。
2.
准备工作与前置条件
- 账号与机房选择:准备支持台湾区域或台北节点的云厂商账号(如 GCP asia-east1、Vultr 台北机房等)。
- 资源规划:至少两台台湾机房的后端实例(建议最少2台)、一组静态公网IP或弹性IP、域名管理权限。
3.
- 步骤:在控制台选择台湾/台北地域,新建虚拟机并分配静态外网IP;记录IP与所属子网信息。
- 网络设置:确认实例的安全组/防火墙允许 80/443、LB健康检查端口(如 8080)以及 SSH(仅限管理IP)。
4.
后端应用部署与健康检查配置
- 部署应用:在每台实例上安装并启动应用(如 Nginx 或应用服务)。示例:sudo apt update && sudo apt install -y nginx;sudo systemctl start nginx。
- 健康检查:在实例上创建简单的健康页面 /health 返回 200;设置防火墙允许云厂商健康检查源IP访问该路径。
5.
托管云负载均衡(推荐快速上线)
- 创建LB:在云厂商控制台新建负载均衡,选择台湾区域的前端 IP(可选择分配台湾弹性IP),添加后端实例组并指定健康检查路径。
- TLS与会话:上传证书或使用 managed cert;开启会话粘滞(若需要);配置转发规则(L7 HTTP/HTTPS 或 L4 TCP)。
6.
自建高可用负载均衡:HAProxy + Keepalived 方案
- 环境:两台或多台位于台湾的负载均衡节点,外网各自拥有台湾弹性IP(或使用浮动VIP)。
- Keepalived 配置(示例):在 /etc/keepalived/keepalived.conf 指定 VRRP 实例和 floating_ipaddress;示例:vrrp_instance VI_1 { state MASTER; interface eth0; virtual_router_id 51; priority 100; authentication { auth_type PASS; auth_pass 1234; } virtual_ipaddress { 1.2.3.4 } }。
- HAProxy 安装与示例 haproxy.cfg:frontend http-in bind 1.2.3.4:80 mode http default_backend servers; backend servers mode http balance roundrobin option httpchk GET /health server s1 10.0.0.2:80 check server s2 10.0.0.3:80 check。启动:sudo systemctl enable --now haproxy。
7.
防火墙、源IP与透明传递
- 安全组规则:允许 LB 节点互相 VRRP(协议 112)、健康检查请求、后端端口。
- 保留客户端IP:若使用托管LB,启用 X-Forwarded-For;若自建并使用 SNAT,考虑配置 proxy_protocol 并在后端启用解析。
8.
DNS、测试与验收
- DNS 指向:将域名的 A 记录指向台湾负载均衡的弹性IP(或托管LB的IP),可使用较短 TTL 方便切换。
- 测试方法:使用台湾节点或 VPN 做 curl -I https://your.domain,检查返回的 X-Forwarded-For;使用 traceroute 确认路由到台湾IP;在 GeoIP 服务(如 ipinfo.io)验证出口IP归属台湾。
9.
监控、日志与故障演练
- 监控:启用云监控(CPU/响应时间/错误率)与 HAProxy stats 页面;设置报警(健康检查失败、延迟突变)。
- 灾备演练:定期模拟单节点宕机,确认 Keepalived 切换和 DNS 切换流程可用。
10.
问:如何确认我的公网IP是真正“台湾原生IP”?
- 答:使用多个独立的 GeoIP 服务(ipinfo.io、MaxMind、ipapi)及路由追踪(traceroute)确认出口归属地为台湾;同时向云厂商确认该IP分配自台湾机房。
11.
问:托管负载均衡 vs 自建 HAProxy,我该如何选择?
- 答:若追求快速上线与简化运维,采用云托管 LB;若需要细粒度流量控制、最低网络延迟或自定义会话策略,选择自建 HAProxy+Keepalived。
12.
问:如何做故障切换最小化用户感知?
- 答:使用浮动 VIP(Keepalived)或云厂商的快速健康检测与自动移除后端,结合短 TTL 的 DNS 与会话复用(或共享会话存储),可将用户感知降到最低。