0
点赞
收藏
分享

微信扫一扫

LVS原理与配置全解析:四层负载均衡核心技术揭秘

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模式为例)
  1. 客户端发起请求
    数据包目标地址为VIP(Virtual IP):目标IP=192.168.1.200, 目标MAC=LVS的MAC
  2. LVS接收请求
  • IPVS根据调度算法(如wrr)选择一台真实服务器(如RS1)
  • 修改数据帧的目标MAC地址为RS1的MAC
  • 源/目标IP地址保持不变
  1. 真实服务器处理请求
  • RS1的网卡发现目标MAC是自己,接收数据包
  • 由于VIP绑定在lo接口,内核认为该请求合法,交给应用处理
  1. 直接响应客户端
    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无法访问

ipvsadm -Ln

规则未正确配置

RS接收不到请求

tcpdump -i eth0 host VIP

ARP抑制失败或VIP未绑定

负载不均衡

ipvsadm -Lnc

调度算法选择不当

部分请求超时

conntrack -L

连接跟踪表溢出

六、扩展:其他模式配置示例
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作为四层负载均衡的标杆,在超高性能场景下无可替代。关键实施要点:

  1. 模式选择铁律
  • 首选DR模式:追求极致性能
  • 次选NAT模式:简化网络架构
  • 慎选TUN模式:除非需要跨机房
  1. 必须验证的环节
  • ARP抑制是否生效
  • VIP绑定是否正确
  • 调度算法流量分布
  1. 监控指标
  • ipvsadm -Ln --stats 中的ActiveConn/InActConn
  • /proc/net/ip_vs_stats 中的总流量统计

终极建议:在正式上线前,使用tcpreplay工具模拟生产流量进行压力测试,确保LVS配置能够承载预期并发量。

举报

相关推荐

0 条评论