笔记说明:本文档旨在系统性地梳理LVS的核心概念、工作原理、调度算法,并提供NAT与DR模式的详细实验步骤,作为学习和配置LVS的参考手册。
一、LVS 核心概念与原理
1.1 LVS是什么
LVS (Linux Virtual Server) 是集成于Linux内核的高性能、高可用的负载均衡集群解决方案,由章文嵩博士发起。其核心作用是将客户端的大量请求,根据指定的策略,智能地分发到后端的多台真实服务器(Real Server,RS) 上,从而提升整个系统的并发处理能力和整体可用性。
1.2 核心术语
理解以下IP地址角色是掌握LVS的基础:
-
CIP (Client IP):客户端的IP地址。
-
VIP (Virtual IP):虚拟IP地址,是负载均衡集群对外提供服务的统一IP。
-
DIP (Director IP):调度器(LVS服务器)与内网真实服务器通信所使用的IP。
-
RIP (Real Server IP):后端真实服务器的IP地址。
-
VS (Virtual Server):虚拟服务器,即运行LVS的调度器本身。
-
RS (Real Server):真实服务器,实际处理请求的服务器。
一个完整的请求流转路径通常为:CIP -> VIP (VS) -> DIP -> RIP (RS)。
1.3 LVS的四种工作模式深度解析
LVS根据报文转发和响应方式的不同,主要有四种工作模式:
-
LVS-NAT (网络地址转换)
-
原理:调度器作为网关。请求进入时,VS将报文目标地址从VIP改为选中的RIP (DNAT);响应返回时,VS再将源地址从RIP改回VIP (SNAT) 返回客户端。
-
数据流 :
Client -> VS (DNAT) -> RS -> VS (SNAT) -> Client -
特点:
-
RS的网关必须指向VS的DIP。
-
请求和响应报文都必须经过VS,VS容易成为性能瓶颈。
-
支持端口映射。
-
-
-
LVS-DR (直接路由) ------ 【生产环境最常用】
-
原理 :VS仅将请求报文的目标MAC地址修改为选中RS的MAC地址,并将报文转发出去。RS处理后,直接将响应报文发送给客户端,不再经过VS。
-
数据流 :
Client -> VS (改写MAC) -> RS -> Client -
关键配置:
-
RS必须在lo接口上绑定VIP。
-
RS必须进行ARP抑制,防止其网卡直接响应客户端的ARP请求。推荐内核参数如下:
bashecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # 仅回答目标IP为接收网卡IP的ARP请求 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # 通告ARP时使用最合适的本地地址
-
-
特点:性能极高,响应流量不经过VS。但要求VS与RS必须在同一物理网络(广播域),且不支持端口映射。
-
-
LVS-TUN (IP隧道)
-
原理:VS将原始的IP报文封装在一个新的IP报文中(源为DIP,目标为RIP),通过IP隧道发送给RS。RS解封装后,直接响应客户端。
-
特点:支持跨地域部署(RIP和VIP可以为公网IP),但RS需支持并配置IP隧道协议。
-
-
LVS-FULLNAT
-
原理:VS同时修改请求报文的源地址(CIP -> DIP)和目标地址(VIP -> RIP)。响应报文同样经过VS,进行相反的地址转换。
-
特点 :部署最灵活,RIP和DIP可以跨网络。但双向流量均经过VS,且需要内核补丁支持(非内核原生)。
-
-
四种模式对比表
| 特性 | NAT | DR | TUN | FULLNAT |
|---|---|---|---|---|
| RS与VS网络要求 | 同一网络 | 同一广播域 | 可跨网络 | 可跨网络 |
| RS网关指向 | 必须指向VS | 指向网关路由器 | 指向网关路由器 | 指向网关路由器 |
| 响应路径 | 经过VS | 直连客户端 | 直连客户端 | 经过VS |
| 端口映射 | 支持 | 不支持 | 不支持 | 支持 |
| 主要瓶颈 | VS(双向流量) | VS(仅处理请求) | 隧道封装开销 | VS(双向流量) |
1.4 调度算法
调度算法决定了VS如何选择后端RS。
-
静态算法 (不考虑RS当前负载)
-
RR (轮询):请求依次平均分配。
-
WRR (加权轮询):根据权重比例分配,权重高的RS获得更多请求。
-
SH (源地址哈希):来自同一CIP的请求始终发往同一RS,实现会话保持。
-
DH (目标地址哈希):根据请求的目标IP(如不同URL)进行哈希分发。
-
-
动态算法 (考虑RS当前连接数等负载)
-
LC (最少连接):将请求分配给当前活动连接数最少的RS。
-
WLC (加权最少连接) :在LC基础上加入权重因素,是LVS的默认调度算法。
-
SED (最短期望延迟):基于WLC优化,避免权重低的RS长期空闲。
-
NQ (永不排队):对SED的改进,如果有RS空闲,请求直接分配过去。
-
1.5 ipvsadm 命令速查
ipvsadm是用户空间用来配置LVS规则的工具。
-
集群服务管理
bashipvsadm -A|E -t|u|f <服务地址> [-s 调度器] # 添加/修改虚拟服务(-t TCP, -u UDP, -f 防火墙标记) ipvsadm -D -t|u|f <服务地址> # 删除虚拟服务 ipvsadm -C # 清空所有配置规则 ipvsadm -S > /etc/sysconfig/ipvsadm # 保存当前规则到文件 ipvsadm -R < /etc/sysconfig/ipvsadm # 从文件恢复规则 -
真实服务器管理
bashipvsadm -a|e -t|u|f <服务地址> -r <RS地址> [-g|i|m] [-w 权重] # 添加/修改RS(-g DR, -i TUN, -m NAT) ipvsadm -d -t|u|f <服务地址> -r <RS地址> # 删除指定RS ipvsadm -L -n [--rate] [--stats] [--timeout] # 查看规则、连接数、统计信息等
二、LVS-NAT 模式集群实验
2.1 实验环境规划
-
VS (调度器):双网卡
-
eth0:172.25.254.100(对外VIP,连接客户端网络) -
eth1:192.168.0.100(对内DIP,连接RS网络)
-
-
RS1 (真实服务器) :
192.168.0.10,网关指向192.168.0.100,提供Web服务。 -
RS2 (真实服务器) :
192.168.0.20,网关指向192.168.0.100,提供Web服务。 -
客户端 :
172.25.254.99,通过访问VIP172.25.254.100来测试。
2.2 实验步骤
-
VS主机配置
-
配置两个网卡的IP地址。
-
开启内核IP转发功能:
bashecho 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf && sysctl -p
-
-
RS1与RS2配置
-
配置网卡IP地址,并设置网关为
192.168.0.100。 -
安装并启动HTTP服务,创建内容不同的测试页面。
bash# RS1 echo "RS1 - 192.168.0.10" > /var/www/html/index.html # RS2 echo "RS2 - 192.168.0.20" > /var/www/html/index.html
-
-
在VS上配置LVS规则
bash# 清空现有规则 ipvsadm -C # 添加一个VIP的TCP服务,使用加权轮询算法 ipvsadm -A -t 172.25.254.100:80 -s wrr # 添加两台RS,使用NAT模式(-m),并设置权重 ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1 ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1 # 查看配置结果 ipvsadm -Ln -
验证与持久化
-
在客户端多次访问
http://172.25.254.100,应看到两个RS页面轮询出现。 -
修改RS1权重为2,再次测试,RS1出现的频率应约为RS2的两倍。
-
保存规则并设置开机自启:
bashipvsadm -S > /etc/sysconfig/ipvsadm systemctl enable --now ipvsadm
-
三、LVS-DR 模式集群实验
3.1 实验环境规划
-
路由器 (router):连接内外网,并配置SNAT。
-
eth0:172.25.254.100(连接客户端) -
eth1:192.168.0.100(连接VS和RS)
-
-
VS (调度器) :
eth0配置DIP和VIP。-
DIP:
192.168.0.50/24 -
VIP:
192.168.0.200/24(作为地址2添加)
-
-
RS1 :
192.168.0.10/24,网关指向192.168.0.100,lo接口绑定VIP。 -
RS2 :
192.168.0.20/24,网关指向192.168.0.100,lo接口绑定VIP。 -
客户端 :
172.25.254.99/24,网关指向172.25.254.100。
3.2 实验步骤
-
路由器 (router) 配置
-
配置双网卡IP,开启IP转发。
-
配置SNAT,确保内网服务器能访问外网,并让响应包能正确返回客户端。
bashiptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100 iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100
-
-
调度器 (vsnode) 配置
-
配置DIP
192.168.0.50和 网关192.168.0.100。 -
在同一网卡上添加VIP
192.168.0.200/24作为辅助地址(配置方法参考原文中的address2)。
-
-
RS1 / RS2 配置
-
基础网络 :配置RIP
192.168.0.x,网关指向路由器192.168.0.100。 -
在lo接口绑定VIP :创建一个loopback类型的连接,并添加地址
192.168.0.200/32。bash# 示例:复制eth0配置并修改为loopback类型 cp /etc/NetworkManager/system-connections/eth0.nmconnection /etc/NetworkManager/system-connections/lo.nmconnection # 编辑 lo.nmconnection,修改 type=loopback, interface-name=lo, address1=127.0.0.1/8, address2=192.168.0.200/32 -
ARP抑制 :这是DR模式成功的关键。 必须配置,防止RS的网卡响应针对VIP的ARP请求。
bashecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # 可写入 /etc/sysctl.conf 永久生效
-
-
在VS上配置LVS规则 (使用DR模式)
bashipvsadm -C ipvsadm -A -t 192.168.0.200:80 -s rr # VIP为192.168.0.200 ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g # -g 表示DR模式 ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g ipvsadm -Ln -
验证
- 在客户端
172.25.254.99上多次访问http://192.168.0.200,应看到RS1和RS2的页面内容轮询出现。可以通过在RS上抓包或查看VS统计信息 (ipvsadm -Ln --stats) 来确认流量分发。
- 在客户端
总结
LVS是构建高性能Linux服务器集群的强大工具。在生产环境中,DR模式 因其卓越的性能而应用最广,但其配置也相对复杂,关键在于ARP抑制 。NAT模式配置简单,适合小型或对性能要求不高的场景。掌握 ipvsadm 命令和四种模式的原理,是灵活运用LVS的基础。