Keepalived 与 Nginx 高可用部署方案详解
Keepalived 与 Nginx 高可用部署方案详解
Nginx 作为高性能 Web 服务器和反向代理,在生产环境中通常需要高可用(High Availability, HA)部署以避免单点故障。结合 Keepalived 可以实现主备切换或双活模式。以下是几种主流的高可用方案:
1. 基于 Keepalived + VIP 的主备高可用方案
(1)架构
客户端 → 虚拟IP (VIP)├── Nginx 主节点(Active)└── Nginx 备节点(Backup)
- VIP (Virtual IP):客户端访问的浮动 IP,由 Keepalived 管理。
- Keepalived:通过 VRRP 协议实现主备切换,检测 Nginx 健康状态。
(2)部署步骤
① 安装 Nginx 和 Keepalived
# Ubuntu/Debian
sudo apt install nginx keepalived# CentOS/RHEL
sudo yum install nginx keepalived
② 配置 Nginx
/etc/nginx/nginx.conf
(主备节点配置相同):
http {upstream backend {server 192.168.1.101:80; # 后端服务器 1server 192.168.1.102:80; # 后端服务器 2}server {listen 80;location / {proxy_pass http://backend;}}
}
③ 配置 Keepalived
/etc/keepalived/keepalived.conf
(主节点):
vrrp_script chk_nginx {script "/usr/bin/pgrep nginx" # 检查 Nginx 进程interval 2weight 2
}vrrp_instance VI_1 {state MASTER # 主节点interface eth0 # 网卡virtual_router_id 51 # VRRP 组 ID(必须相同)priority 100 # 主节点优先级(备节点设为 50)advert_int 1authentication {auth_type PASSauth_pass 1234 # 主备节点密码一致}virtual_ipaddress {192.168.1.100/24 # VIP}track_script {chk_nginx # 关联健康检查}
}
备节点 只需修改 state BACKUP
和 priority 50
。
④ 启动服务
sudo systemctl start nginx
sudo systemctl start keepalived
sudo systemctl enable nginx keepalived
(3)故障切换测试
- 手动停止主节点 Nginx:
sudo systemctl stop nginx
- 观察 VIP 是否漂移到备节点:
ip addr show eth0
2. 基于 Keepalived 的双活模式(多 VIP)
(1)架构
客户端 → DNS 轮询├── Nginx 节点 1(VIP1)└── Nginx 节点 2(VIP2)
- 两个 VIP:每个 Nginx 节点绑定一个 VIP,DNS 轮询分发流量。
- 无单点故障:两个节点同时工作,故障时 DNS 自动切换。
(2)配置方式
- 节点 1(VIP1: 192.168.1.100):
vrrp_instance VI_1 {state MASTERvirtual_router_id 51priority 100virtual_ipaddress {192.168.1.100/24} }
- 节点 2(VIP2: 192.168.1.101):
vrrp_instance VI_2 {state MASTERvirtual_router_id 52priority 100virtual_ipaddress {192.168.1.101/24} }
- DNS 配置:
example.com → 192.168.1.100 example.com → 192.168.1.101
(3)优缺点
- 优点:无 VIP 争抢,适合高并发场景。
- 缺点:DNS TTL 影响切换速度。
3. 基于云厂商 LB + Nginx(AWS ALB/NLB)
(1)架构
客户端 → AWS ALB/NLB├── Nginx 节点 1└── Nginx 节点 2
- 云负载均衡器(如 AWS ALB) 作为入口,分发流量到多个 Nginx 实例。
- Nginx 负责反向代理、缓存等高级功能。
(2)部署示例(AWS)
- 创建 Target Group,注册 Nginx 实例。
- 配置 ALB/NLB 监听 80/443,指向 Target Group。
- 每个 Nginx 节点独立运行相同配置。
(3)优缺点
- 优点:云厂商 LB 自带高可用,无需维护 VIP。
- 缺点:成本较高,依赖云服务。
4. 最佳实践总结
方案 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
Keepalived + VIP(主备) | 传统服务器 | 简单可靠 | 备节点闲置 |
Keepalived 双活(多 VIP) | 高并发需求 | 无单点故障 | DNS 依赖 |
云 LB + Nginx | AWS/Azure/GCP | 免维护 LB | 成本高 |
推荐选择
- 大多数场景:
Keepalived + VIP
(简单高效)。 - 云环境:直接使用
云厂商 LB
。 - 超高可用需求:
双活 + DNS 轮询
。
5. 监控与维护
- Nginx 健康检查:
curl -I http://localhost
- Keepalived 日志:
tail -f /var/log/syslog | grep Keepalived
- Prometheus + Grafana:使用
nginx-exporter
监控 Nginx 状态。
通过以上方案,可以确保 Nginx 在故障时自动切换,保障业务连续性。