一、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:
- 纯 TCP/UDP 服务负载:MySQL 主从负载、Redis 集群入口、RabbitMQ、游戏 TCP 网关、FTP 服务等(Nginx 虽能做,但 LVS 性能更高、更适配);
- 超大流量入口:日活百万级、QPS 超 5 万的 Web 服务(用 LVS 做第一层 4 层转发,后面挂 Nginx 集群);
- 跨机房 / 跨网段转发:需要内核级低延迟转发,不涉及 HTTP 业务逻辑;
- 无 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)
仅修改 state 和 priority,其余和主节点一致:
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 管业务 |
五、关键提醒(避坑)
- LVS DR 模式必须关闭 ARP 响应,否则会出现 VIP 冲突;
- Keepalived 既可以做 VIP 漂移,也可以直接管理 LVS 规则(推荐),无需手动用 ipvsadm;
- 你的 Web 场景(有前端、API)永远优先选 Nginx,LVS 只会增加复杂度;
- ipvsadm 仅用于配置 LVS 规则,无 LVS 则完全不用装。