Nginx 高可用集群与 LVS 负载均衡实战指南(场景选型对比 + 完整配置步骤 + 主备漂移部署实操)

一、Nginx vs LVS+ipvsadm 核心场景对比表(终极对照)

对比维度 Nginx(你的高可用方案) LVS+ipvsadm(4 层负载方案)
核心定位 7 层应用层负载均衡 4 层内核级负载均衡
适用协议 HTTP/HTTPS(Web、API、前端) TCP/UDP(MySQL、Redis、MQ、游戏网关)
性能 单台扛 1-5 万 QPS(满足中小项目) 单台扛 10 万 + QPS(超大流量)
核心功能 部署前端、跨域、URL 重写、SSL、SPA 路由适配 仅 IP + 端口转发,无业务逻辑
配置复杂度 低(新手易上手) 高(需配 DR 模式、ARP 抑制、ipvsadm 规则)
依赖工具 Keepalived(仅 VIP 漂移) Keepalived(VIP 漂移 + 管理 LVS)+ ipvsadm(配置规则)
健康检查 Nginx 自带(upstream) LVS+Keepalived 联动(或单独配置)
你的场景是否需要 ✅ 必须选(有前端、Web 业务) ❌ 完全不需要
典型生产场景 前后端分离项目、中小流量 Web 服务、企业业务系统 数据库负载、Redis 集群、超大流量入口、纯 TCP 服务

二、LVS+ipvsadm 核心适用场景(什么时候必须用)

只有满足以下任意一条,才需要部署 LVS+ipvsadm:

  1. 纯 TCP/UDP 服务负载:MySQL 主从负载、Redis 集群入口、RabbitMQ、游戏 TCP 网关、FTP 服务等(Nginx 虽能做,但 LVS 性能更高、更适配);
  2. 超大流量入口:日活百万级、QPS 超 5 万的 Web 服务(用 LVS 做第一层 4 层转发,后面挂 Nginx 集群);
  3. 跨机房 / 跨网段转发:需要内核级低延迟转发,不涉及 HTTP 业务逻辑;
  4. 无 Nginx 的纯后端服务集群:比如只有 3 台 Tomcat,无前端,需 4 层端口转发。

三、LVS+ipvsadm 完整配置步骤(DR 模式,生产最常用)

以「LVS+Keepalived 做 MySQL 负载」为例(典型 TCP 服务场景),给你可直接复制的配置:

环境规划(示例 IP)

角色 IP 地址 作用
VIP 192.168.1.200 统一入口
LVS 主节点 192.168.1.20 4 层负载主节点
LVS 备节点 192.168.1.21 4 层负载备节点
MySQL 节点 1 192.168.1.30:3306 后端数据库 1
MySQL 节点 2 192.168.1.31:3306 后端数据库 2

核心前提

  • 所有机器关闭防火墙 / 放行 VRRP 协议(Keepalived 心跳):systemctl stop firewalld && systemctl disable firewalld
  • 所有机器关闭 SELinux:setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  • DR 模式要求:所有机器在同一网段,且网卡为桥接模式(无 NAT)。

步骤 1:安装 LVS+ipvsadm+Keepalived(LVS 主 / 备都执行)

复制代码
# CentOS/RHEL
yum install -y ipvsadm keepalived
# 加载ipvs内核模块(开机自启)
echo "modprobe ip_vs" >> /etc/rc.local
chmod +x /etc/rc.local
modprobe ip_vs
# 验证模块加载
lsmod | grep ip_vs

步骤 2:配置 LVS 主节点(192.168.1.20)

2.1 Keepalived 配置(集成 LVS 规则)

复制代码
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf

global_defs {
    router_id LVS_MASTER
}

# 配置LVS负载规则(替代手动ipvsadm命令)
virtual_server 192.168.1.200 3306 {
    delay_loop 6  # 健康检查间隔6秒
    lb_algo wrr   # 加权轮询
    lb_kind DR    # DR模式(最常用)
    persistence_timeout 0  # 关闭会话保持(MySQL无需)
    protocol TCP  # TCP协议

    # 后端MySQL节点1
    real_server 192.168.1.30 3306 {
        weight 1  # 权重
        # 健康检查(检测MySQL端口)
        TCP_CHECK {
            connect_port 3306
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    # 后端MySQL节点2
    real_server 192.168.1.31 3306 {
        weight 1
        TCP_CHECK {
            connect_port 3306
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

# VIP漂移配置
vrrp_instance VI_1 {
    state MASTER
    interface eth0  # 实际网卡名
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200/24 dev eth0  # 绑定VIP到网卡
    }

2.2 配置 DR 模式 ARP 抑制(主 / 备都执行,关键!)

复制代码
vi /etc/sysctl.conf

添加以下内容:

复制代码
net.ipv4.ip_forward = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

生效配置:

复制代码
sysctl -p

步骤 3:配置 LVS 备节点(192.168.1.21)

仅修改 statepriority,其余和主节点一致:

复制代码
global_defs {
    router_id LVS_BACKUP
}

virtual_server 192.168.1.200 3306 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.1.30 3306 {
        weight 1
        TCP_CHECK {
            connect_port 3306
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.31 3306 {
        weight 1
        TCP_CHECK {
            connect_port 3306
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

vrrp_instance VI_1 {
    state BACKUP  # 备节点
    interface eth0
    virtual_router_id 52
    priority 80   # 优先级低于主
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200/24 dev eth0
    }
}

步骤 4:配置后端 Real Server(MySQL 节点 1/2 都执行)

DR 模式要求后端节点绑定 VIP 到回环网卡(lo):

复制代码
# 绑定VIP到lo
ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 up
# 永久生效(写入开机脚本)
echo "ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 up" >> /etc/rc.local
chmod +x /etc/rc.local

# 配置ARP抑制(和LVS节点一致)
vi /etc/sysctl.conf

添加:

复制代码
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

生效:sysctl -p

步骤 5:启动服务并验证(LVS 主 / 备都执行)

复制代码
# 启动Keepalived(自动加载LVS规则)
systemctl start keepalived && systemctl enable keepalived

# 查看ipvsadm规则(验证LVS配置)
ipvsadm -Ln
# 正常输出:
# IP Virtual Server version 1.2.1 (size=4096)
# Prot LocalAddress:Port Scheduler Flags
#   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
# TCP  192.168.1.200:3306 wrr
#   -> 192.168.1.30:3306           Route   1      0          0
#   -> 192.168.1.31:3306           Route   1      0          0

# 测试VIP漂移:停主节点Keepalived,VIP自动飘到备节点
systemctl stop keepalived
ip addr | grep 192.168.1.200  # 备节点能看到VIP

步骤 6:手动管理 ipvsadm 规则(备用,了解即可)

如果不用 Keepalived 自动配置,可手动用 ipvsadm 命令:

复制代码
# 添加VIP虚拟服务
ipvsadm -A -t 192.168.1.200:3306 -s wrr
# 添加后端节点
ipvsadm -a -t 192.168.1.200:3306 -r 192.168.1.30:3306 -g  # -g=DR模式
ipvsadm -a -t 192.168.1.200:3306 -r 192.168.1.31:3306 -g
# 保存规则(开机自启)
ipvsadm -S > /etc/sysconfig/ipvsadm
systemctl enable ipvsadm

四、终极选择总结(你该怎么选)

你的业务类型 首选方案 是否需要 ipvsadm 核心配置要点
前后端分离 Web 项目 Nginx+Keepalived ❌ 不需要 upstream 负载、VIP 漂移、前端部署
MySQL/Redis/MQ 等 TCP 服务 LVS+ipvsadm+Keepalived ✅ 必须要 DR 模式、ARP 抑制、VIP 漂移
超大流量 Web 入口 LVS (4 层)+Nginx 集群 (7 层) ✅ 必须要 两层负载、LVS 管分发、Nginx 管业务

五、关键提醒(避坑)

  1. LVS DR 模式必须关闭 ARP 响应,否则会出现 VIP 冲突;
  2. Keepalived 既可以做 VIP 漂移,也可以直接管理 LVS 规则(推荐),无需手动用 ipvsadm;
  3. 你的 Web 场景(有前端、API)永远优先选 Nginx,LVS 只会增加复杂度;
  4. ipvsadm 仅用于配置 LVS 规则,无 LVS 则完全不用装。
相关推荐
llm大模型算法工程师weng4 小时前
负载均衡做什么?nginx是什么
运维·开发语言·nginx·负载均衡
fTiN CAPA5 小时前
服务器无故nginx异常关闭之kauditd0 kswapd0挖矿病毒 CPU占用200% 内存耗尽
运维·服务器·nginx
lKWO OMET7 小时前
查看 nginx 是否已经启动
运维·数据库·nginx
ywlovecjy9 小时前
【Nginx 】Nginx 部署前端 vue 项目
前端·vue.js·nginx
hutengyi10 小时前
四、nginx的优化和location匹配规则
运维·nginx
eEKI DAND11 小时前
一个比 Nginx 还简单的 Web 服务器
服务器·前端·nginx
Watermelo6171 天前
理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
前端·javascript·vue.js·chrome·nginx·正则表达式·seo
Cyber4K1 天前
【Nginx专项】高级进阶架构篇-Location、Rewrite及HTTPS
服务器·nginx·架构·https
博风1 天前
nginx:前后端分离常用配置
nginx
Gofarlic_oms11 天前
制定企业Citrix虚拟化软件资产管理政策框架
运维·服务器·开发语言·matlab·负载均衡