LVS原理与配置全解析:四层负载均衡核心技术揭秘
一、LVS核心架构深度剖析
1. LVS的三大核心组件
LVS(Linux Virtual Server)的负载均衡能力由Linux内核中的三个核心模块协同实现:
- IPVS(IP Virtual Server):
内核态的负载均衡引擎,负责流量分发和会话管理。相比用户态方案(如Nginx),IPVS直接在内核处理数据包,性能提升10倍以上。 - Netfilter框架:
Linux内核的包过滤框架,LVS通过注册Netfilter钩子(HOOK)实现流量拦截和转发。 - 调度算法模块:
内置10余种调度策略,决定如何将请求分配给后端真实服务器(Real Server)。
2. 数据包转发全流程(以DR模式为例)
- 客户端发起请求
数据包目标地址为VIP(Virtual IP):目标IP=192.168.1.200
,目标MAC=LVS的MAC
- LVS接收请求
- IPVS根据调度算法(如wrr)选择一台真实服务器(如RS1)
- 修改数据帧的目标MAC地址为RS1的MAC
- 源/目标IP地址保持不变
- 真实服务器处理请求
- RS1的网卡发现目标MAC是自己,接收数据包
- 由于VIP绑定在lo接口,内核认为该请求合法,交给应用处理
- 直接响应客户端
RS1构造响应包:源IP=VIP
,目标IP=客户端IP
,直接通过默认网关返回客户端
二、三种工作模式技术细节对比
维度 | NAT模式 | DR模式 | TUN模式 |
数据包修改 | 修改目标IP和端口 | 仅修改目标MAC地址 | 封装为IP隧道包 |
响应路径 | 必须经过LVS | 直接返回客户端 | 直接返回客户端 |
服务器位置 | 可跨不同子网 | 必须同一局域网 | 可跨公网部署 |
性能损耗 | 较高(处理双向流量) | 最低(仅处理入站) | 中等(隧道封装开销) |
配置复杂度 | 低(需配置SNAT) | 中(需ARP抑制) | 高(需支持IP隧道) |
典型应用场景 | 小型私有云集群 | 电商大促、直播高并发 | 混合云、异地多活 |
三、DR模式超详细配置指南
1. 实验环境准备
- 网络拓扑
客户端 (192.168.1.100)
|
| 目标VIP: 192.168.1.200
↓
LVS服务器 (192.168.1.10)
| |
↓ ↓
RS1 (192.168.1.101) RS2 (192.168.1.102)
- 关键要求
- 所有RS必须与LVS在同一二层网络
- RS需绑定VIP到lo接口并抑制ARP响应
- 关闭所有节点的rp_filter:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
2. LVS服务器配置分解
(1) 安装IPVS管理工具
# CentOS
yum install ipvsadm -y
# Ubuntu
apt install ipvsadm -y
(2) 绑定虚拟VIP
# 临时生效
ip addr add 192.168.1.200/32 dev eth0
# 永久生效(CentOS)
echo 'IPADDR2=192.168.1.200/32' >> /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
(3) 配置IPVS规则
# 清空旧规则
ipvsadm -C
# 创建虚拟服务(VIP:80,使用加权轮询算法)
ipvsadm -A -t 192.168.1.200:80 -s wrr
# 添加真实服务器(-g表示DR模式,-w设置权重)
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.101:80 -g -w 3
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.102:80 -g -w 1
# 查看当前规则
ipvsadm -Ln --stats
输出示例:
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:80 wrr
-> 192.168.1.101:80 Route 3 0 0
-> 192.168.1.102:80 Route 1 0 0
3. 真实服务器(RS)配置详解
(1) ARP抑制配置
# 修改内核参数
cat > /etc/sysctl.d/lvs.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 /etc/sysctl.d/lvs.conf
(2) 绑定VIP到lo接口
# 临时生效
ip addr add 192.168.1.200/32 dev lo
# 永久生效(CentOS 7+)
cat > /etc/sysconfig/network-scripts/ifcfg-lo:0 <<EOF
DEVICE=lo:0
IPADDR=192.168.1.200
NETMASK=255.255.255.255
ONBOOT=yes
EOF
systemctl restart network
(3) 验证VIP绑定
# 在RS上执行
ip addr show lo | grep 192.168.1.200
# 正确输出:inet 192.168.1.200/32 scope global lo:0
4. 全链路测试与排错
(1) 验证数据包转发
在LVS服务器抓包:
tcpdump -i eth0 host 192.168.1.200 -nn -vv
正常现象:
- 客户端请求包的目标MAC是LVS的MAC
- LVS转发给RS的包目标MAC是RS的MAC
(2) 模拟客户端请求
# 使用curl测试
for i in {1..10}; do curl http://192.168.1.200; done
# 期望输出交替出现:
Server RS1
Server RS2
Server RS1
...
(3) 查看连接统计
ipvsadm -Ln --stats | grep -A 3 "192.168.1.200:80"
关键指标:
- ActiveConn:当前活跃连接数
- InActConn:非活跃连接数
- Weight:权重值是否生效
四、调度算法详解与选择建议
1. 常用算法对比
算法名称 | 缩写 | 特点 | 适用场景 |
轮询 | rr | 均等分配请求 | 服务器性能均等 |
加权轮询 | wrr | 按权重分配请求 | 服务器配置不均 |
最少连接 | lc | 优先选择当前连接最少的服务器 | 长连接服务(如数据库) |
加权最少连接 | wlc | 结合权重和连接数 | 混合硬件环境 |
源地址哈希 | sh | 同一源IP始终转发到同一RS | 需要会话保持 |
目标地址哈希 | dh | 同一目标IP转发到同一RS | 缓存服务器场景 |
2. 算法配置示例
# 修改调度算法为加权最小连接
ipvsadm -E -t 192.168.1.200:80 -s wlc
五、生产环境注意事项
1. 性能调优参数
# 增大连接哈希表
echo "net.ipv4.vs.conn_tab_size=1048576" >> /etc/sysctl.conf
# 调整超时时间(单位:秒)
ipvsadm --set 1800 120 300
# 解释:
# tcp_timeout=1800(TCP空闲超时)
# tcp_fin_timeout=120(FIN_WAIT超时)
# udp_timeout=300(UDP超时)
2. 安全防护配置
# 防止SYN Flood恶意访问
echo 1 > /proc/sys/net/ipv4/vs/synproxy_synack_ttl
# 限制单个IP最大连接数
ipvsadm --add-service --tcp-service 192.168.1.200:80 \
--edit-server --real-server 192.168.1.101:80 \
--max-conn 500
3. 常见故障排查
现象 | 排查命令 | 可能原因 |
VIP无法访问 |
| 规则未正确配置 |
RS接收不到请求 |
| ARP抑制失败或VIP未绑定 |
负载不均衡 |
| 调度算法选择不当 |
部分请求超时 |
| 连接跟踪表溢出 |
六、扩展:其他模式配置示例
1. NAT模式快速配置
# LVS服务器
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
ipvsadm -A -t 192.168.1.200:80 -s rr
ipvsadm -a -t 192.168.1.200:80 -r 192.168.2.101:80 -m # -m表示NAT模式
ipvsadm -a -t 192.168.1.200:80 -r 192.168.2.102:80 -m
2. TUN模式关键配置
# RS服务器
modprobe ipip
ip tunnel add tun0 mode ipip remote LVS_IP local RS_IP
ip link set tun0 up
ip addr add 192.168.1.200/32 dev tun0
七、总结与最佳实践
LVS作为四层负载均衡的标杆,在超高性能场景下无可替代。关键实施要点:
- 模式选择铁律
- 首选DR模式:追求极致性能
- 次选NAT模式:简化网络架构
- 慎选TUN模式:除非需要跨机房
- 必须验证的环节
- ARP抑制是否生效
- VIP绑定是否正确
- 调度算法流量分布
- 监控指标
ipvsadm -Ln --stats
中的ActiveConn/InActConn/proc/net/ip_vs_stats
中的总流量统计
终极建议:在正式上线前,使用tcpreplay
工具模拟生产流量进行压力测试,确保LVS配置能够承载预期并发量。