
1. 在开始前,确认VPS能互通(ping/tcp),有固定内网或公网IP;确认云提供商是否支持浮动IP或允许VRRP(gratuitous ARP)。准备两台或以上应用节点、一台或两台负载均衡节点(可合并),并准备SSH访问与sudo权限。
2. 推荐组合:前端HAProxy/Nginx做七层/四层负载,配合keepalived做VRRP虚拟IP实现主备故障切换;或者使用云厂商的负载均衡(若支持)。数据库用主从或主主复制,静态文件用对象存储或共享存储(NFS/OSS)。
3. 执行:sudo apt update && sudo apt install -y haproxy keepalived nginx。确保系统时钟同步:sudo apt install -y chrony && sudo systemctl enable --now chronyd。关闭不必要防火墙或开放端口:TCP 80/443/(协议检查端口)和VRRP使用的UDP 112。
4. 编辑 /etc/haproxy/haproxy.cfg,最简示例: global daemon defaults mode tcp timeout connect 5s frontend fe_http bind *:80 default_backend be_web backend be_web balance roundrobin server web1 10.0.0.11:80 check server web2 10.0.0.12:80 check 保存后 sudo systemctl restart haproxy。逐步增加 health check、timeout、maxconn 配置以满足业务。
5. 在两台负载均衡节点上编辑 /etc/keepalived/keepalived.conf,示例(主): vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS; auth_pass 1111; } virtual_ipaddress { 192.168.10.100/24 } } 在备机将 state 改为 BACKUP,priority 100。注意:若云平台不支持ARP抛出或浮动IP,需要使用云控制台的浮动IP或BGP/NAT方式实现VIP。
6. 对于会话黏性,若使用HAProxy可配置 cookie 或 source;若为Nginx可用ip_hash或sticky模块。SSL建议做在负载端(终止SSL)或使用TCP转发到后端。配置健康检查频率(check inter 2000 rise 2 fall 3),并在后端应用增加轻量化健康页(/healthz 返回200)。
7. 先在低峰或测试环境演练:1) 启动两台LB,确认VIP在主机;2) 在后台用ab/siege对VIP并发压测;3) 强制停止主LB的keepalived或断网,确认VIP漂移到备机并不中断请求(观察session);4) 模拟后端单点故障,确认健康检查将其剔除并恢复后重新加入。
8. 关键注意:许多VPS/云(含台湾节点)会屏蔽GRATUITOUS ARP或限制广播,导致keepalived VRRP不工作。在这种情况下使用:云提供的弹性IP/浮动IP、云LB或使用BGP/路由表变更方案。务必与云厂商确认网络能力。
9. 部署Prometheus+Grafana或云监控,监控VIP、连接数、后端响应、keepalived状态。建立自动告警(VIP丢失、后端失败率上升)。部署变更使用蓝绿或灰度发布,回滚脚本包括:恢复keepalived配置、把VIP绑定回主机、快速调整HAProxy后端权重。
10. 答:可改用云厂商的浮动/弹性IP或云负载均衡服务;若需自建,可用BGP路由或在控制平面通过API快速将弹性IP从主机移到备机。此外也可以采用DNS短TTL的轮询与健康检查,但DNS切换比VRRP慢且不保证会话。
11. 答:使用主从同步(异步/半同步)或Galera/MariaDB主主集群;应用层尽量设计幂等重试。关键是定期备份、延迟监控,故障切换前确认复制延迟在可接受范围。复杂场景建议引入专用数据库高可用组件(如MHA、Patroni)。
12. 答:验证清单示例:VIP能在主备间漂移;健康检查能识别异常后端;会话粘性/登录在切换后正常;SSL证书及链路测试通过;监控报警正常;文档与回滚脚本可用。