如何在Ubuntu 24.04上通过配置Nginx与Keepalived实现高可用负载均衡集群

在构建高可用、高性能的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 监控告警,可在现有架构基础上继续迭代。

相关推荐
岚天start9 小时前
Docker部署NGINX实现服务四层转发方案
服务器·nginx·docker
oMcLin10 小时前
如何在 Ubuntu 22.04 服务器上实现分布式数据库 Cassandra 集群,优化数据一致性与写入吞吐量
服务器·分布式·ubuntu
DigitalOcean11 小时前
Ubuntu服务器快速上手:初始配置与安全设置教程
ubuntu
云飞云共享云桌面11 小时前
非标自动化工厂的设计云桌面为什么要选云飞云智能共享云桌面?
大数据·运维·服务器·网络·自动化·负载均衡
习惯就好zz12 小时前
在 Ubuntu 18.04 旧系统上部署新版 GitHub Actions Runner 的终极方案
linux·ubuntu·github·cicd·action
微凉的衣柜12 小时前
Windows Server 使用 Nginx 反向代理实现域名访问内网 Gradio 应用
运维·windows·nginx
白驹过隙^^12 小时前
VitrualBox及ubuntu系统安装
linux·运维·ubuntu
PoppyBu12 小时前
Ubuntu20.04版本上安装最新版本的scrcpy工具
android·ubuntu
上去我就QWER12 小时前
什么是反向代理?
后端·nginx
烤鱼骑不快12 小时前
ubuntu系统安装以及设置
linux·数据库·ubuntu