在构建高可用、高性能的Web服务架构时,负载均衡与故障转移是基础能力。A5数据的教程以真实运维实践为出发,详细讲解如何在 Ubuntu 24.04 上使用 Nginx 作为反向代理负载均衡节点 ,结合 Keepalived 实现虚拟IP漂移(VRRP),构建一套高可用的负载均衡集群。全流程包括环境规划、软硬件配置、参数调优、代码示例、验证测试与性能数据评估,适合生产环境部署与运维参考。
一、整体架构与方案概览
本方案设计如下三层架构:
| 层级 | 功能 | 软件/角色 |
|---|---|---|
| 表现层 | 外部流量统一入口 | Keepalived + Nginx(VIP) |
| 负载节点 | 后端服务负载分发 | Nginx upstream |
| 应用业务层 | 实际业务处理 | Web/应用服务器 |
架构图:
+------------------+
Internet -> | VIP: 192.168.100.100 | (由Keepalived漂移)
+----------+-------+
|
+---+---+
| Nginx |
+---+---+
|
+--------------+---------------+
| |
upstream:app1 upstream:app2
(192.168.100.11) (192.168.100.12)
核心目标:
- 虚拟IP漂移:Keepalived 实现主/备节点漂移,高可用性;
- 负载分发调度:Nginx 配置 upstream 动态分配请求;
- 故障自动恢复:节点失效自动切换无人工干预;
- 监控健康检查:HTTP/TCP 探测确保节点可用性。
二、软硬件环境与前置条件
1. 香港服务器www.a5idc.com硬件配置(推荐)
| 服务器角色 | CPU | 内存 | 硬盘 | 网络 |
|---|---|---|---|---|
| Nginx Keepalived 主 | 4 核 | 8 GB | 100 GB SSD | 1 Gbps / BGP/MPLS |
| Nginx Keepalived 备 | 4 核 | 8 GB | 100 GB SSD | 1 Gbps / BGP/MPLS |
| 应用 Server (x2) | 8 核 | 16 GB | 200 GB SSD | 1 Gbps |
推荐至少两台负载节点、两台后端业务节点。负载节点强烈建议放置于不同物理交换域/数据中心以避免单点故障。
2. 软件版本
| 软件 | 推荐版本 |
|---|---|
| Ubuntu | 24.04 LTS |
| Nginx | 1.24(主线或稳定) |
| Keepalived | 2.2.x |
| HTTP 服务 | 任意(例:Apache, Node.js, NGINX) |
测试工具:ab, wrk, mtr, netcat, curl, systemctl
三、节点角色与IP规划
示例内网规划:
| 名称 | IP | 作用 |
|---|---|---|
| load01 | 192.168.100.101 | Keepalived Master |
| load02 | 192.168.100.102 | Keepalived Backup |
| vip (漂移虚拟IP) | 192.168.100.100 | 流量入口 |
| app01 | 192.168.100.11 | 后端服务节点 |
| app02 | 192.168.100.12 | 后端服务节点 |
四、环境准备
1. 系统基础设置
在所有节点上设置主机名、更新系统软件、关闭不必要服务:
bash
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo apt install -y net-tools curl vim git build-essential
2. 配置静态IP(示例)
编辑 Netplan 配置 /etc/netplan/00-installer-config.yaml:
yaml
network:
version: 2
ethernets:
ens160:
addresses:
- 192.168.100.101/24
gateway4: 192.168.100.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
应用:
bash
sudo netplan apply
五、安装与配置Nginx
1. Nginx 安装
bash
sudo apt install -y nginx
确保启用:
bash
sudo systemctl enable nginx
sudo systemctl start nginx
2. Nginx Upstream 配置
在 /etc/nginx/conf.d/upstream.conf:
nginx
upstream backend_servers {
server 192.168.100.11:80 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.100.12:80 weight=2 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
参数说明:
| 参数 | 含义 |
|---|---|
| weight | 权重分布,高权重获取更多请求 |
| max_fails | 失败次数超过即标记不可用 |
| fail_timeout | 失败状态保持时长 |
Test & Reload:
bash
sudo nginx -t
sudo systemctl reload nginx
六、安装与配置Keepalived
1. 安装
bash
sudo apt install -y keepalived
2. Keepalived 主/备配置
主节点(load01)/etc/keepalived/keepalived.conf:
bash
vrrp_script chk_nginx {
script "pidof nginx"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 42Keepalived
}
virtual_ipaddress {
192.168.100.100/24
}
track_script {
chk_nginx
}
}
备节点(load02)/etc/keepalived/keepalived.conf:
bash
vrrp_script chk_nginx {
script "pidof nginx"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 42Keepalived
}
virtual_ipaddress {
192.168.100.100/24
}
track_script {
chk_nginx
}
}
关键参数说明:
| 参数 | 含义 |
|---|---|
| virtual_router_id | VRRP 实例唯一ID |
| priority | 节点优先级,主>备 |
| advert_int | 广播间隔(秒) |
| track_script | 健康检查脚本,影响权重 |
3. 启动与验证
bash
sudo systemctl enable keepalived
sudo systemctl start keepalived
查看VIP是否生效:
bash
ip a show ens160
应出现 192.168.100.100。
七、后端健康检查增强
推荐使用 Nginx 内置 health_check 或使用第三方工具(如 [nginx_upstream_check_module])实现 HTTP 响应检测。
示例使用 proxy_next_upstream:
nginx
upstream backend_servers {
server 192.168.100.11:80 max_fails=2 fail_timeout=20s;
server 192.168.100.12:80 max_fails=2 fail_timeout=20s;
keepalive 32;
}
server {
...
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
八、验证与压力测试
1. VIP 故障切换测试
在主节点上停掉 Nginx:
bash
sudo systemctl stop nginx
观察 Keepalived 状态切换:
bash
sudo journalctl -fu keepalived
备节点应自动抢占虚拟IP。
2. 压力测试
使用 ab:
bash
ab -n 10000 -c 200 http://192.168.100.100/
使用 wrk:
bash
wrk -t4 -c500 -d30s http://192.168.100.100/
评估数据示例:
| 工具 | 并发 | 请求总数 | 平均延时 | QPS |
|---|---|---|---|---|
| ab | 200 | 10000 | 32 ms | 850 |
| wrk | 500 | - | 28 ms | 950 |
九、常见问题与调优建议
1. Keepalived 不漂移 VIP
可能原因:
- 接口名称错误(确认
interface配置); virtual_router_id与备节点不一致;- 防火墙阻断 VRRP 协议(UDP 112,协议号 112)。
2. Nginx Upstream 健康检测不足
默认 Nginx 仅 TCP 检查,建议开启 HTTP 检查或结合外部脚本:
bash
server 192.168.100.11:80 max_fails=2 fail_timeout=10s;
3. 性能瓶颈调优
worker_processes auto;worker_connections 10240;keepalive_timeout 65;proxy_buffering off(动态内容根据业务调整)。
十、总结
本教程从架构设计、软硬件配置、细节参数、代码示例、验证测试到性能数据评估提供了完整实现路径。在 Ubuntu 24.04 环境下结合 Nginx 和 Keepalived 可以构建 高可用、可扩展、可监控 的负载均衡集群,适用于业务流量入口的重要服务节点。
如需进一步扩展到 HTTPS/TLS 终止、动态服务发现(Consul、Etcd)、自动证书管理(Certbot + DNS API)或 Prometheus 监控告警,可在现有架构基础上继续迭代。