Linux LVS(Linux Virtual Server,Linux 虚拟服务器)是由章文嵩博士开发的内核级负载均衡技术,基于 IP 层(L3/L4)实现请求分发,具有高性能、高稳定性的特点,广泛用于大规模服务集群(如 Web、数据库、API 服务)的流量调度。LVS 支持四种核心工作模式,每种模式的原理、数据流向和适用场景差异显著,需结合业务需求选择。
在讲解模式前,先明确 LVS 的核心组件,避免理解混淆:
- Director(调度器):接收客户端请求,根据调度算法将请求分发到后端 Real Server,是 LVS 集群的 “入口”。
- Real Server(RS,真实服务器):实际处理业务请求的服务器(如 Web 服务器、应用服务器)。
- VIP(Virtual IP):对外暴露的虚拟服务 IP,客户端通过 VIP 访问集群。
- DIP(Director IP):调度器用于与后端 RS 通信的内网 IP。
- RIP(Real Server IP):后端 RS 的内网 IP。
- 调度算法:LVS 通过算法分配请求,如轮询(RR)、加权轮询(WRR)、最小连接(LC)等。
DR 模式是 LVS 最常用的模式,核心特点是调度器仅处理 “请求包”,后端 RS 直接将 “响应包” 发给客户端,避免调度器成为流量瓶颈。
- 客户端发送请求到 VIP(Director 的外网 IP),Director 接收后不修改 IP 地址,仅修改数据帧的MAC 地址(将目的 MAC 改为目标 RS 的 MAC),然后转发给 RS。
- RS 接收请求后,发现目的 IP 是自身配置的 VIP(需在 RS 的回环口配置 VIP),直接处理请求,处理完成后将响应包通过自身网卡直接发给客户端(无需经过 Director)。
客户端 → Director(修改MAC) → RS(请求) → 客户端(响应,直连)
- 高并发、高带宽业务(如 Web 服务、静态资源服务、直播推流)。
- 后端 RS 性能一致且集中部署在同一机房(同一交换机下)。
- RS 的 VIP 配置:在 RS 的回环口(lo)配置 VIP,避免与 Director 的 VIP 冲突,命令示例:
ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
- 网络拓扑:Director 与 RS 接入同一台二层交换机,避免跨路由导致 MAC 转发失效。
- 调度算法:优先选择RR(轮询) 或 WRR(加权轮询)(适合 RS 性能均匀或可通过权重调整负载的场景)。
NAT 模式是最易部署的模式,核心特点是Director 作为客户端与 RS 的 “网关”,所有请求和响应都经过 Director,通过 IP 地址转换实现流量调度。
- 客户端请求到 VIP(Director 的外网 IP),Director 接收后将目的 IP(VIP)转换为目标 RS 的 RIP,同时记录连接跟踪(conntrack),然后转发给 RS。
- RS 处理请求后,将响应包发给网关(必须指向 Director 的 DIP),Director 接收后将源 IP(RIP)转换为 VIP,再转发给客户端。
客户端 → Director(目的IP:VIP→RIP) → RS(请求) → Director(源IP:RIP→VIP) → 客户端(响应)
- 小规模服务集群(如内部 OA 系统、测试环境服务)。
- 流量较低(如峰值带宽 < 1Gbps)、RS 数量较少(<50 台)的场景。
- Director 双网卡配置:需两张网卡(外网卡 + 内网卡),外网卡配置 VIP(对外提供服务),内网卡配置 DIP(与 RS 通信),示例:
ifconfig eth0 10.0.0.100 netmask 255.255.255.0 up
ifconfig eth1 192.168.1.1 netmask 255.255.255.0 up
- RS 网关配置:所有 RS 的默认网关必须指向 Director 的 DIP(如 192.168.1.1),确保响应包能回传给 Director。
- 调度算法:优先选择LC(最小连接) 或 WLC(加权最小连接)(适合连接数波动大的场景,可动态分配负载)。
- 内核优化:开启 IP 转发,调整连接跟踪超时(避免连接过早释放):
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "300" > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
TUN 模式是为跨地域 / 跨网段部署 RS设计的模式,核心特点是通过IP 隧道封装将请求包转发给 RS,响应包直接发给客户端。
- 客户端请求到 VIP(Director 的外网 IP),Director 接收后将原始请求包(客户端 IP→VIP)封装在一个新的 IP 包内(源 IP:DIP,目的 IP:RS 的 RIP),通过 IP 隧道(如 IPIP 隧道)发送给 RS。
- RS 接收后解封装隧道包,处理请求(RS 需配置 VIP,识别目的 IP 为 VIP),然后直接将响应包发给客户端(无需经过 Director)。
客户端 → Director(封装IP隧道:DIP→RIP) → RS(解封装+处理) → 客户端(响应,直连)
- 分布式集群(如跨地域 CDN 节点、多机房灾备服务)。
- RS 分散部署但需统一 VIP 对外服务的场景。
- 加载 IP 隧道模块:Director 和所有 RS 需加载
ipip模块(Linux 内核默认支持):
modprobe ipip
lsmod | grep ipip
- RS 的 VIP 配置:与 DR 模式一致,在 RS 的回环口配置 VIP 并抑制 ARP 响应(避免冲突)。
- 隧道网络优化:确保 Director 与 RS 之间的隧道链路(如专线、VPN)带宽充足,避免隧道丢包(可通过
ping测试隧道连通性)。
- 调度算法:优先选择RR(轮询) 或 WRR(加权轮询)(跨地域 RS 性能通常较均匀,轮询更易维护)。
FULL-NAT 是 NAT 模式的改进版,核心特点是同时转换 “源 IP” 和 “目的 IP”,解决了 NAT 模式下 RS 必须指向 Director 为网关的限制。
- 客户端请求到 VIP(Director 的外网 IP),Director 接收后做两步转换:
- 目的 IP:VIP → 目标 RS 的 RIP;
- 源 IP:客户端 IP → Director 的 DIP(内网 IP);
然后转发给 RS。
- RS 处理请求后,将响应包发给 Director 的 DIP(源 IP 为 RIP,目的 IP 为 DIP),Director 接收后再做两步转换:
- 源 IP:RIP → VIP;
- 目的 IP:DIP → 客户端 IP;
然后转发给客户端。
客户端 → Director(源IP:客户端→DIP;目的IP:VIP→RIP) → RS(请求) → Director(源IP:RIP→VIP;目的IP:DIP→客户端) → 客户端(响应)
- RS 无法配置网关指向 Director 的场景(如多 VPC 部署、运维权限限制)。
- 小规模、多子网的服务集群(如混合云环境中的服务)。
- 内核支持:确保 Linux 内核版本≥2.6.28(FULL-NAT 需内核支持
ipvs full-nat模块),部分发行版(如 CentOS 7+)需手动启用。
- ipvsadm 配置:使用
-f参数指定 FULL-NAT 模式,示例:
ipvsadm -A -t 10.0.0.100:80 -s wlc
ipvsadm -a -t 10.0.0.100:80 -r 192.168.2.10 -f
- RS 配置:无需特殊配置,仅需确保 RS 能与 Director 的 DIP 通信(如路由可达)。
- 内核优化:增加连接跟踪表大小(避免连接丢失):
echo "1048576" > /proc/sys/net/netfilter/nf_conntrack_max
无论选择哪种模式,以下通用实践能大幅提升 LVS 集群的稳定性和性能:
Director 是 LVS 集群的 “入口”,单点故障会导致整个集群不可用。需通过VRRP(虚拟路由冗余协议) 实现双 Director 主备架构,常用工具为keepalived。
- 主 Director 配置(
/etc/keepalived/keepalived.conf):
vrrp_instance VI_1 {
state MASTER # 主节点
interface eth0 # 外网网卡
virtual_router_id 51 # 虚拟路由ID(主备需一致)
priority 100 # 优先级(主>备,如备设为90)
advert_int 1 # 心跳间隔(1秒)
authentication {
auth_type PASS # 认证方式
auth_pass 1111 # 认证密码(主备需一致)
}
virtual_ipaddress {
10.0.0.100/24 # VIP(对外服务IP)
}
}
# 配置LVS虚拟服务(DR模式示例)
virtual_server 10.0.0.100 80 {
delay_loop 6 # 健康检查间隔(6秒)
lb_algo wrr # 调度算法(加权轮询)
lb_kind DR # 工作模式(DR)
persistence_timeout 50# 会话保持时间(50秒,可选)
protocol TCP # 协议(TCP)
real_server 192.168.1.20 80 { # RS1
weight 1 # 权重
TCP_CHECK { # TCP健康检查
connect_port 80
connect_timeout 3
}
}
real_server 192.168.1.21 80 { # RS2
weight 2 # 权重(比RS1高,分配更多请求)
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
}
- 备 Director 配置:仅需将
state改为BACKUP,priority改为90,其余与主节点一致。
LVS 默认不做健康检查,需通过keepalived或ldirectord实现 RS 健康探测,自动剔除故障节点(如 RS 宕机、服务不可用),避免请求分发到无效 RS。
- 常用健康检查方式:
- TCP_CHECK:检测 RS 的端口是否存活(如 Web 服务检测 80 端口)。
- HTTP_GET:发送 HTTP 请求(如
/health),检查响应码是否为 200(适合应用层健康检查)。
- SSL_GET:针对 HTTPS 服务的健康检查。
LVS 支持 10 + 种调度算法,需根据业务场景选择:
需实时监控 LVS 集群状态,及时发现异常:
- 监控指标:
- Director:CPU、内存、网络带宽(进出流量)、连接跟踪数。
- RS:连接数、服务端口存活状态、响应延迟。
- LVS:虚拟服务状态、RS 健康状态、调度次数。
- 常用工具:
- 基础监控:
ipvsadm -L -n(查看 LVS 调度状态)、netstat -tuln(端口监控)。
- 可视化监控:Prometheus+Grafana(需部署
ipvs-exporter采集 LVS 指标)、Zabbix(自定义模板监控 RS 健康)。
- 优先选 DR 模式:若 RS 集中部署在同一机房,且需高并发、高带宽(如生产环境 Web 服务)。
- 次选 TUN 模式:若 RS 跨地域 / 跨路由部署(如 CDN、多机房灾备)。
- 备选 NAT 模式:若集群规模小、流量低(如测试环境、内部 OA)。
- 最后选 FULL-NAT 模式:仅当 RS 无法配置网关指向 Director 时(如多 VPC 混合云)。
LVS 的四种模式各有侧重,核心是通过 “减少 Director 流量负担”(DR/TUN)或 “降低部署复杂度”(NAT/FULL-NAT)平衡性能与灵活性。实际部署中,需结合业务流量规模、网络拓扑、运维成本选择模式,并通过 “高可用(keepalived)+ 健康检查 + 内核优化” 确保集群稳定运行。