1.
概述与准备
准备两台或以上CN2韩国服务器(建议不同机房/不同机型),一台作为主节点一台作为备份;准备一个域名并能管理DNS(建议Cloudflare或支持API的DNS)。小分段:确认系统(Ubuntu 20.04或CentOS7+)、开放端口(80/443/TCP健康检查端口)、拥有sudo权限。
2.
架构选择说明
推荐两套可选方案:A:同机房可使用Keepalived+HAProxy实现VIP热备;B:跨机房使用双活HAProxy+DNS故障切换(Cloudflare Load Balancer或自建监控切换)。小分段:同机房延迟低用VIP,跨机房用DNS+健康检查。
3.
安装基础软件
以Ubuntu为例:sudo apt update && sudo apt install -y haproxy keepalived certbot curl。小分段:确认haproxy版本>=2.0,keepalived用于VRRP;若跨机房跳过keepalived安装。
4.
HAProxy基础配置示例
/etc/haproxy/haproxy.cfg 示例:global/Defaults段省略,frontend www_front bind *:80 mode http default_backend web_back;backend web_back balance roundrobin option httpchk GET /health server app1 10.0.0.1:80 check server app2 10.0.0.2:80 check。小分段:将IP替换为内网或公网IP,httpchk指明健康检查路径。
5.
Keepalived实现VIP(同机房)
/etc/keepalived/keepalived.conf 示例: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 } }。小分段:在备节点将state改为 BACKUP并降低priority;测试使用ip addr show确认VIP漂移。
6.
健康检查脚本与服务挂载
若需更细粒度健康判定,可写脚本/usr/local/bin/check_app.sh:curl -sSf http://127.0.0.1:8080/health || exit 1 并在haproxy配置中使用 external-check 或在keepalived中配置 notify脚本。小分段:脚本加上日志输出并设置为可执行chmod +x。
7.
SSL与证书自动续期
使用certbot在两台负载均衡节点上获取证书:certbot certonly --standalone -d example.com,获取后将证书路径在haproxy中配置bind *:443 ssl crt /etc/letsencrypt/live/example.com/fullchain.pem。小分段:设置renew钩子certbot renew --deploy-hook "systemctl reload haproxy"。
8.
DNS故障切换(跨机房)
在Cloudflare或DNS提供商创建两个健康池:A池指向Korea-node-1,B池指向Korea-node-2,设TTL为60s并启用自动故障转移。小分段:配置探测端点为 /health,失败阈值设置为3次连续失败。
9.
会话保持与粘性设置
若应用需粘性session,HAProxy中backend添加 cookie SERVERID insert 或 balance source;若用DNS双活,考虑将session存储外置(Redis、DB)以免切换丢失。小分段:测试登录流程并切换节点验证会话无丢失。
10.
监控与告警配置
部署Prometheus Node Exporter与Grafana监控HAProxy(haproxy-exporter)与服务器指标,设置CPU、负载、5xx、健康检查失败告警(通过Alertmanager推送到钉钉/邮件)。小分段:配置报警阈值举例:5分钟内5xx>5,触发告警并自动执行故障转移脚本。
11.
压力测试与演练步骤
使用ab或wrk进行流量与故障演练:ab -n 10000 -c 200 http://example.com/;演练断电或停掉主节点的haproxy服务,观察VIP漂移或DNS切换时间并记录恢复时间。小分段:多次演练并调整healthcheck频率与阈值以平衡误判与切换速度。
12.
安全与运维建议
限制管理端口通过防火墙、开启fail2ban、定期更新系统补丁、对外暴露管理界面使用内网或VPN。小分段:保留访问日志并定期审计,证书与密钥权限设置为600。
13.
常见问题1:如何判断使用Keepalived还是DNS故障切换?
答:同机房且网络可互通、需要秒级切换优先使用Keepalived+VIP;跨机房或不同ISP无法共享VIP时使用DNS+外部健康检查。
14.
常见问题2:健康检查失败导致误切换如何避免?
答:增加探测路径冗余(多个/health端点)、使用外部探针结合本地脚本、把阈值设置为短时间内多次失败才切换,同时记录并回滚误判。
15.
常见问题3:如何验证CN2线路稳定性和路由问题?
答:使用mtr -c 100
与持续ping监控,比较不同机房RTT与丢包率;若发现跳点异常,可向云厂商或运营商提供mtr/traceroute结果申请路由优化。
来源:利用容灾与负载均衡提升cn2韩国服务器稳定性的实用案例