1) 确认云厂商支持台湾原生公网IP,准备至少3台实例(2台应用节点+1台负载均衡或2台LB做HA);2) 准备SSH密钥、内网网段、子网与安全组(开放80/443/22和后端服务端口);3) 准备域名并能修改A记录、TTL设置;4) 本指南以Ubuntu 20.04为例,命令以sudo开头。
1) 在控制台创建VPC、子网A/子网B分区部署跨可用区实例;2) 为每台实例绑定原生公网IP(或使用云厂商的弹性IP/浮动IP);3) 配置路由表允许互通,安全组放通内网后端端口和负载均衡健康检查端口;4) 确保反向路径过滤(rp_filter)不会阻止浮动IP,请在/etc/sysctl.conf设置 net.ipv4.conf.all.rp_filter=0 并sysctl -p。
1) 更新系统 sudo apt update && sudo apt -y upgrade;2) 安装基本工具 sudo apt -y install curl git unzip vim ufw;3) 关闭不必要服务,设置时区,启用NTP;4) 调整内核参数:打开IP转发 sysctl -w net.ipv4.ip_forward=1,并加入sysctl.conf持久化。
1) 在两台或多台后端实例安装你的应用(示例:Docker方式 docker run -d --name app -p 8080:80 your-image);2) 健康检查URI例如 /health 返回200;3) 配置防火墙仅允许负载均衡和管理IP访问后端端口;4) 配置日志和本地监控(如prometheus node_exporter)。
1) 推荐优先使用云厂商的托管负载均衡(支持原生IP、自动故障转移、健康检查);2) 如果自建,常见组合为HAProxy + Keepalived(实现VIP漂移)或Nginx+Keepalived;3) 自建适合需要完全控制或厂商LB成本高的场景。
1) 安装:sudo apt -y install haproxy;2) 编辑/etc/haproxy/haproxy.cfg示例(将后端IP替换为你的服务器):
global
log /dev/log local0
maxconn 20000
defaults
mode http
timeout connect 5s
timeout client 50s
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
option httpchk GET /health
server srv1 10.0.1.10:8080 check
server srv2 10.0.2.10:8080 check;3) 重启服务 sudo systemctl restart haproxy。
1) 安装:sudo apt -y install keepalived;2) 在两台LB上配置/etc/keepalived/keepalived.conf(示例):
vrrp_instance VI_1 {
state MASTER # 后一台为 BACKUP
interface eth0
virtual_router_id 51
priority 100 # 主节点更高,备份90
advert_int 1
authentication { auth_type PASS; auth_pass yourpass }
virtual_ipaddress { 203.0.113.10 } # 漂移IP
}
3) 在BACKUP节点设置priority较低并同样配置;4) 启动 keepalived sudo systemctl enable --now keepalived 并验证VIP在主备间漂移(ip addr show)。
1) HAProxy内置httpchk用于后端健康检查;2) 对于更复杂检查可写脚本放在/opt/healthcheck.sh,检查返回码并通过socket通知Keepalived改变路由或将节点下线;3) HAProxy统计页启用并保护:在haproxy.cfg加入stats uri /haproxy?stats auth admin:密码;4) 测试:人为使后端服务返回500,观察HAProxy剔除并回收流量。
1) 在LB做SSL终端可减轻后端负担:使用certbot获取证书(sudo apt -y install certbot; sudo certbot certonly --standalone -d yourdomain);2) 将证书合并为haproxy.pem并在haproxy.cfg中 bind *:443 ssl crt /etc/ssl/private/haproxy.pem;3) 设置OCSP和强制HTTP->HTTPS跳转;4) 记得设置certbot续期脚本并reload haproxy。
1) 若应用需要粘滞会话,HAProxy支持cookie持久化:在backend里增加 cookie SERVERID insert indirect nocache;并为每个server添加 cookie srv1 / srv2;2) 若使用分布式会话,推荐使用Redis或数据库共享Session以避免粘滞;3) 测试会话在故障切换时的表现并确认用户体验。
1) 数据库采用主从或主主复制(例如MySQL主从+MHA或Group Replication);2) 使用专门的数据库VIP或代理(ProxySQL)做读写分离与故障切换;3) 对于共享文件,使用对象存储或NFS/Gluster合理搭配备份;4) 定期备份并演练恢复流程。
1) 部署Prometheus+Grafana监控HAProxy/Keepalived指标并配置告警(CPU、连接数、后端健康);2) 集中化日志(ELK/EFK)便于故障排查;3) 定期演练:切断主节点网络、重启后端服务、模拟高并发,验证漂移、剔除和回流是否正常;4) DNS TTL设置低(如60s)以便备用场景下快速切换。
1) 评估云厂商原生IP带宽计费和弹性IP规则,避免意外成本;2) 使用最小权限的安全组+私有子网,启用日志审计;3) 运维自动化:使用Ansible/Terraform模板定义实例、网络、LB和证书续期;4) 定期进行安全扫描和补丁更新。
问:在台湾云上使用Keepalived会不会因为云平台限制而无法漂移公网IP?
答:多数云平台对layer2广播不支持,但支持"浮动IP/弹性IP"的API或路由表调整实现漂移。实践中应使用云厂商提供的弹性IP绑定API或配置云厂商支持的VIP方案;若无此功能,采用云厂商托管LB是更稳妥的选择。
问:如何保证HAProxy健康检查不会误判应用短暂抖动?
答:通过调整check间隔与fall/rise参数,例如server ... check inter 2000 rise 2 fall 3,结合后端更宽松的超时和业务层面健康接口(检查数据库连接),可降低误判。
问:若需要自动扩缩容,如何与本方案结合?
答:利用云厂商的自动伸缩组结合配置管理(Ansible/Terraform),新增节点启动后自动注册到HAProxy后端(通过自动化脚本或服务发现如Consul),并确保健康检查和配置模板支持动态加入/移除。