LVS(Linux Virtual Server)负载均衡实战详解

LVS(Linux Virtual Server)负载均衡实战详解

一、概述

LVS(Linux Virtual Server)是Linux内核级4层负载均衡组件,基于ip_vs内核模块实现流量转发,性能远超7层负载均衡;通过ipvsadm命令行工具、Keepalived配置文件管理,是高并发生产环境核心负载均衡方案。

二、核心知识点

2.1 负载均衡项目选型(STAR法则)

STAR法则定义

  • S(Situation):场景/业务背景
  • T(Task/Target):任务/目标
  • A(Action):执行操作
  • R(Result):最终结果

STAR法则简易示例

S:又到了午饭时间,不知道和谁吃、不知道吃什么
T:吃饱
A:抓阄选1个
R:吃了东西,吃饱了

负载均衡选型实战案例

  • S:公司用户量激增,单点Web服务器瓶颈,需搭建集群+负载均衡
  • T:选型适配业务的负载均衡服务
  • A:梳理硬件/开源负载均衡→对比优缺点→结合业务选型
  • R:完成负载均衡部署,支撑高并发访问

2.2 生产高频故障:磁盘空间不足

统一故障格式

  • 现象:创建文件/添加用户失败,提示no space left on device
  • 原因:磁盘Block/Inode耗尽;文件被删除但进程占用(硬链接数0、进程调用数非0)
  • 方案:逐层排查目录、Inode、进程占用文件
  • 预防:定期清理日志、监控磁盘使用率、避免暴力删除进程占用文件

2.3 常见负载均衡对比

类型 优势 缺点
硬件F5/A10 性能极强、原厂技术支持 价格昂贵、需主备冗余
LVS 4层转发、性能极致、内核级 部署/维护成本高
Nginx/OpenResty 4/7层兼容、配置简单、支持缓存/流量镜像 高并发(1w+)性能下降
HAProxy 4/7层兼容、支持动态加载配置 配置相对复杂
云CLB 4/7层托管、无需运维 仅支持域名/URL转发
云ALB 7层精细化转发、支持请求头/流量镜像 仅云环境使用

2.4 4层 vs 7层负载均衡

  • 4层负载均衡:工作在传输层,仅识别IP+端口,纯转发
  • 7层负载均衡:工作在应用层,识别URL/URI/HTTP头,支持代理转发

2.5 反向代理 vs 负载均衡

  • 反向代理(Nginx/HAProxy):代理客户端请求,2次请求+2次响应

image-20260330223600474

  • LVS负载均衡:仅转发流量,不代理、不拆解请求

image-20260330223619084

2.6 LVS vs Nginx核心区别

维度 LVS Nginx
工作层 仅4层 4层+7层
流量处理 DR模式直接转发 代理模式(2次收发)
性能 万级/十万级并发 万级内并发
易用性 配置复杂 配置简单

2.7 ARP协议预备知识

  • 作用:IP地址→MAC地址解析,3层协议工作在2层
  • 流程:广播请求→单播响应→缓存ARP记录
  • ARP欺骗:恶意设备伪造ARP响应,篡改网关/目标IP的MAC映射
  • 防护:IP+MAC绑定、网络设备屏蔽非法MAC

2.8 LVS核心术语

  • CIP:Client IP,客户端IP
  • VIP:Virtual IP,虚拟IP(对外提供服务)
  • DIP:Director IP,LVS负载均衡服务器自身IP
  • RS:Real Server,后端真实业务服务器
  • RIP:Real Server IP,后端服务器IP

2.9 LVS 4种工作模式

  1. DR(Direct Routing):直接路由模式,生产最常用
  2. NAT:网络地址转换模式
  3. TUN:隧道模式
  4. Full NAT:完全NAT模式

2.10 LVS核心管理工具

  • 内核模块:ip_vs(LVS核心驱动)
  • 命令行:ipvsadm(LVS规则增删改查)
  • 高可用:Keepalived(管理VIP+LVS规则+健康检查)

三、实操步骤与命令⭐️

3.1 磁盘空间不足故障 原文全命令/输出

# 故障排查核心命令
df -h
du -sh
df -i
find / -type f |xargs dirname |uniq -c |sort -rn |head
lsof|grep delete

# 原文实操命令+完整输出
[root@web01 ~]# lsof |grep oldboy.txt
7771   root    3r   REG    253,0     7 134318493 /root/oldboy.txt
[root@web01 ~]# \rm -f /root/oldboy.txt
[root@web01 ~]# lsof |grep oldboy.txt
7771   root    3r   REG    253,0     7 134318493 /root/oldboy.txt (deleted)
[root@web01 ~]# ls /root/oldboy.txt
ls: 无法访问/root/oldboy.txt: 没有那个文件或目录
[root@web01 ~]# lsof |grep delete
7771   root    3r   REG    253,0     7 134318493 /root/oldboy.txt (deleted)

3.2 LVS-DR模式环境准备

# 服务器规划
lb01: 10.0.0.5    # LVS主负载均衡
lb02: 10.0.0.6    # LVS备负载均衡
VIP: 10.0.0.3     # 虚拟IP
web01: 10.0.0.7   # 后端RS1
web02: 10.0.0.8   # 后端RS2

# 关闭LB节点Nginx/Keepalived(避免冲突)
systemctl stop keepalived nginx
systemctl disable keepalived nginx

# 安装LVS管理工具⭐️
yum install -y ipvsadm

# 检查ip_vs内核模块是否加载
lsmod |grep ip_vs

3.3 Web服务器配置与测试 原文全命令

# web01 Nginx配置查看
cat /etc/nginx/conf.d/lvs.oldboylinux.com.conf
server {
listen 80;
server_name lvs.oldboylinux.cn;
root /app/code/lvs;
location / {
index index.html ;
}
}

# Web服务测试命令
curl -H Host:lvs.oldboylinux.com 172.16.1.7
curl -H Host:lvs.oldboylinux.com 10.0.0.7
curl -H Host:lvs.oldboylinux.com 172.16.1.8
curl -H Host:lvs.oldboylinux.com 10.0.0.8

3.4 LVS-DR模式:负载均衡服务端配置

3.4.1 手动配置VIP⭐️

ip addr add 10.0.0.3/24 dev eth0 label eth0:0

3.4.2 ipvsadm基础命令⭐️

# 查看LVS规则
ipvsadm
# 清空LVS规则(清空前务必备份)
ipvsadm -C
# 设置TCP超时时间
ipvsadm --set 30 5 60
# 查看LVS详细规则(数字格式)
ipvsadm -ln

3.4.3 添加LVS集群规则⭐️

# 添加VIP服务:-t TCP协议 -s 调度算法wrr加权轮询 -p 会话保持20秒
ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
# 添加RS节点:-r RS地址 -g DR模式 -w 权重1
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1

# 原文ipvsadm -ln 完整输出
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  Forward Weight ActiveConn InActConn
TCP 10.0.0.3:80 wrr persistent 20
  -> 10.0.0.7:80 Route 1 0 0
  -> 10.0.0.8:80 Route 1 0 0

3.4.4 LVS规则备份与恢复⭐️

# 备份LVS规则到文件
ipvsadm-save -n > /root/ipvs.txt
ipvsadm-save -n > /root/ipvsadm.conf
# 清空规则后恢复
ipvsadm -C
ipvsadm-restore < /root/ipvsadm.conf

# 原文备份规则输出
-A -t 10.0.0.3:80 -s wrr -p 20
-a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
-a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1

3.5 LVS-DR模式:后端RS服务器配置

3.5.1 lo网卡绑定VIP⭐️

# 临时配置VIP
ip addr add 10.0.0.3/32 dev lo label lo:1

# 永久配置(创建lo:1子接口配置文件)
cat > /etc/sysconfig/network-scripts/ifcfg-lo:1 << EOF
DEVICE=lo:1
IPADDR=10.0.0.3
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
EOF
# 重启网络生效
systemctl restart network

# 查看网卡配置
ip a s lo

3.5.2 抑制ARP解析(DR模式核心)⭐️

# 配置内核参数,禁止RS响应VIP的ARP请求
cat > /etc/sysctl.conf << EOF
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
EOF
# 加载内核参数
sysctl -p

3.6 LVS+Keepalived高可用配置⭐️

# /etc/keepalived/keepalived.conf 原文完整配置
global_defs {
router_id lb01
}

vrrp_instance oldboy {
state MASTER
interface eth0
virtual_router_id 62
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:0
}
}

virtual_server 10.0.0.3 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 20
protocol TCP

real_server 10.0.0.7 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}

real_server 10.0.0.8 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

3.7 LVS负载均衡排错流程⭐️

# 1. 命令行测试VIP
curl 10.0.0.3
# 2. 网络连通性检查
ping 10.0.0.3
telnet 10.0.0.3 80
# 3. 直接访问RS测试
curl 10.0.0.7
curl 10.0.0.8
# 4. 检查RS配置、LVS规则、抓包分析

3.8 负载均衡通用故障处理 原文配置命令

# 故障1:虚拟主机仅显示第一个站点 → 解决方案
proxy_set_header Host $host;

# 故障2:RS无法记录客户端真实IP → 解决方案
proxy_set_header X-Forwarded-For $remote_addr;

四、原理白话说明

4.1 LVS-DR模式核心原理

  1. 客户端请求目标为VIP,LVS仅修改目标MAC地址为RS的MAC
  2. LVS不修改IP地址、不拆解请求,直接转发流量
  3. RS直接响应客户端,不经过LVS,性能极致
  4. 要求:LVS与RS必须在同一局域网(依赖ARP解析)

4.2 LVS-NAT模式原理

  1. 流量进出都经过LVS,LVS修改源/目标IP
  2. LVS与RS可不在同一局域网
  3. 性能低于DR模式,支持端口映射

4.3 Full NAT模式原理

  • 流量入站同NAT模式,出站同DR模式,兼顾跨网段与性能

4.4 ARP抑制原理

  • RS绑定VIP但不响应ARP请求,避免客户端直接访问RS,保证流量先到LVS

五、注意事项(原文完整要求)

  1. LVS-DR模式禁止在LVS本机测试,小流量下转发不生效,需外部客户端测试
  2. DR模式LVS与RS必须同网段,否则ARP解析失败
  3. RS端VIP必须配置32位掩码,仅本机识别
  4. LVS规则清空前必须备份,避免配置丢失
  5. Keepalived主备virtual_router_id、认证密码必须一致
  6. LVS会话保持时间persistence_timeout根据业务调整,避免会话错乱
  7. RS健康检查必须配置,避免故障节点接收流量
  8. LVS应对高并发,访问量少时不会像nginx 1:1转发,建议抓包验证

六、总结 + 避坑指南

6.1 核心总结

  1. LVS是内核级4层负载均衡,DR模式生产首选,性能最高
  2. 部署核心:LVS端配置VIP+ipvsadm规则;RS端绑定VIP+抑制ARP
  3. 高可用依赖Keepalived,自动管理VIP、LVS规则、RS健康检查
  4. 故障排查遵循:连通性→RS本地→LVS配置→抓包流程
  5. 负载均衡选型:高并发用LVS-DR,中小并发用Nginx,预算充足用硬件F5

6.2 生产避坑指南

  1. ❌ 禁止DR模式下LVS与RS跨网段部署
  2. ❌ 禁止RS端不配置ARP抑制,导致VIP冲突
  3. ❌ 禁止清空LVS规则前不备份
  4. ✅ 必须配置RS健康检查,自动剔除故障节点
  5. ✅ 必须部署LVS主备,避免单点故障
  6. ✅ 高并发场景优先LVS-DR,中小并发用Nginx即可
  7. ✅ 代理场景必须配置Host头与真实IP透传
posted @ 2026-03-24 23:33  gzjwo  阅读(32)  评论(0)    收藏  举报