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 则完全不用装。
相关推荐
光影少年2 小时前
跨域问题如何解决?
前端·nginx·前端框架
**蓝桉**2 小时前
Keepalived+Nginx+Tomcat 高可用负载均衡(续)
nginx·tomcat·负载均衡
创世宇图15 小时前
阿里云Alibaba Cloud Linux 4 LTS 64位生产环境配置-Nginx
linux·nginx
一勺菠萝丶1 天前
芋道项目部署时,前端和门户网站如何通过 Nginx 转发后台接口,而不直接暴露后端地址
运维·前端·nginx
好多渔鱼好多1 天前
【IPC】Nginx 技术介绍
人工智能·nginx
桌面运维家1 天前
Nginx+Keepalived:Linux高可用负载均衡配置实战
linux·nginx·负载均衡
Carsene1 天前
Docsify + Nginx 部署指南:解决 404 路由与 Markdown 加载失败问题
nginx
雪碧聊技术1 天前
前端项目部署到服务器
服务器·nginx·ubuntu·前端项目部署
FJW0208141 天前
LVS+Keepalived+HAProxy双主高可用负载均衡集群
运维·负载均衡·lvs·高可用