LVS章节

一、基础概念

  1. LVS 核心

Linux Virtual Server,内核层高性能高可用负载均衡集群技术,章文嵩博士开发,Linux 内核标准模块,核心是把前端请求分发到后端真实服务器(RS),提升并发和可用性。

  1. 集群 vs 分布式

|------|----------------------|---------------------------|
| 维度 | 集群 | 分布式 |
| 部署 | 同一业务部署在多台服务器 | 业务拆分子业务,各子业务部署在不同服务器 |
| 节点功能 | 所有节点功能、代码、数据一致 | 各节点功能、代码、数据不同,组合成完整业务 |
| 效率提升 | 提高单位时间处理任务数(提升并发) | 缩短单个任务执行时间 |
| 故障影响 | 单节点故障,其他节点可替代,业务不受影响 | 影响单节点故障,对应子业务失效,整体业务可能出问题 |

  1. 集群类型

LB(负载均衡):多主机分摊访问请求,核心是 LVS 的应用场景

HA(高可用):解决单点故障(SPOF),核心指标可用性 A=MTBF/(MTBF+MTTR),常用 3/4/5 个 9 衡量

HPC(高性能计算):海量数据并行计算,非 LVS 相关重点

  1. 性能扩展方式

Scale UP(向上扩展):升级单台服务器硬件,上限低、成本高

Scale Out(向外扩展):增加服务器数量,通过调度分配请求,LVS 是该方式的核心实现

二、LVS 核心术语

VS:Virtual Server,调度器,负责请求分发

RS:Real Server,真实服务器,实际处理用户请求

CIP:Client IP,客户端 IP

VIP:Virtual IP,对外提供服务的虚拟 IP,客户端访问入口

DIP:Director IP,调度器内网 IP,和后端 RS 通信

RIP:Real Server IP,真实服务器 IP

核心访问流程:CIP <--> VIP == DIP <--> RIP

三、LVS 四大工作模式

核心对比表

|---------|-----------------|--------------------------|------------------------|------|---------------------------|
| 模式 | 转发核心 | 网络要求 | 数据流向 | 端口映射 | 核心特点 / 适用场景 |
| NAT | 修改请求目标 IP(DNAT) | RIP&DIP 同私网,RS 网关指向 DIP | 请求 + 响应均经 VS | 支持 | 配置简单,VS 易成瓶颈,适合小型集群 |
| DR | 重新封装 MAC 首部 | VS&RS 同一物理网络,RS 网关指向路由 | 请求经 VS,响应 RS 直连客户端 | 不支持 | 性能最优,无 VS 瓶颈,需解决 VIP 地址冲突 |
| TUN | 原 IP 外封装新 IP 首部 | DIP/VIP/RIP 均为公网,RS 支持隧道 | 支持隧道请求经 VS,响应 RS 直连客户端 | 不支持 | 支持跨网络 / 跨地域部署 RS |
| FULLNAT | 同时修改请求源 + 目标 IP | VIP 公网,DIP/RIP 私网(可不同网段) | 请求 + 响应均经 VS | 支持 | 内核默认不支持,复杂网络场景可用 |

重点模式细节

  1. NAT 模式

核心:多目标 IP 的 DNAT,VS 做地址 / 端口转换,RS 只认 DIP

缺点:所有报文经 VS,高并发下 VS 易阻塞

注意:做 LVS 时需清空 iptables 规则,避免干扰 IPVS 工作

  1. DR 模式

关键:VS 和所有 RS 都要配置 VIP,需解决 ARP 地址冲突

冲突解决:修改 RS 内核 ARP 参数(arp_ignore=1、arp_announce=2),或用 arptables、前端网关静态绑定

特点:源 / 目标 IP / 端口不变,仅改 MAC,转发效率最高

四、LVS 调度算法

分静态(不考虑 RS 负载)和动态(根据 RS 实时负载调度),4.15 + 内核新增 2 种专用算法

  1. 静态算法

RR:轮询,请求平均分配,适合 RS 配置一致的场景

WRR:加权轮询,为 RS 设权重,权重高被调度次数多,适合 RS 配置不一致

SH:源地址哈希,同一源 IP 始终到同一 RS,实现会话绑定,易导致负载不均

DH:目标地址哈希,同一目标 IP 始终到同一 RS,适合正向代理缓存(如宽带运营商)

  1. 动态算法(负载值 Overhead 越小,优先级越高)

LC:最少连接,Overhead = 活跃连接 ×256 + 非活跃连接,适合长连接应用

WLC:加权最少连接,LVS默认算法,Overhead=(活跃 ×256 + 非活跃)/ 权重,适配绝大多数场景

SED:最短预期延迟,初始高权重 RS 优先,Overhead=(活跃 + 1 + 非活跃)×256 / 权重

NQ:永不排队,第一轮均匀分配,后续按 SED 调度,避免低权重 RS 无请求

LBLC/LBLCR:基于本地的最少连接(动态 DH),适合正向代理,LBLCR 解决 LBLC 负载不均问题

  1. 4.15 + 内核新增算法

FO:加权故障转移,调度到未过载的最高权重 RS,可标记过载节点,适合灰度发布

OVF:溢出连接,调度到权重最高且活跃连接 < 权重的 RS,适合高并发场景

五、LVS 部署工具:ipvsadm

  1. 基础信息

安装:yum install ipvsadm -y

核心文件:主程序 /usr/sbin/ipvsadm,规则文件 /etc/sysconfig/ipvsadm

服务:ipvsadm.service,开启开机自启可持久化规则

  1. 核心命令(高频)

集群服务管理

新增:ipvsadm -A -t VIP: 端口 -s 算法(如 rr/wrr/wlc)

修改:ipvsadm -E -t VIP: 端口 -s 新算法 -p 超时时间

删除:ipvsadm -D -t VIP: 端口

清空所有规则:ipvsadm -C

保存规则:ipvsadm -Sn > 配置文件路径

重载规则:ipvsadm -R < 配置文件路径

真实服务器(RS)管理

新增:ipvsadm -a -t VIP: 端口 -r RIP: 端口 -m/-g/-i -w 权重

-m:NAT 模式,-g:DR 模式(默认),-i:TUN 模式

修改:ipvsadm -e (参数同新增)

删除:ipvsadm -d -t VIP: 端口 -r RIP: 端口

查看 / 统计

查看规则:ipvsadm -Ln(-n 不解析 IP,更清晰)

流量统计:ipvsadm -Ln --rate(查看 CPS / 入站 / 出站速率)

清空计数器:ipvsadm -Z -t VIP: 端口
六、实战核心配置(NAT/DR)

  1. NAT 模式(核心步骤)
环境设置

一个同时有仅主机模式和nat模式的vs主机,两台仅主机模式是主机

VS主机中

root@vsnode \~# vmset.sh eth0 172.25.254.100 vsnode

root@vsnode \~# vmset.sh eth1 192.168.0.100 vsnode noroute

RS1,RS2都差不多

root@RS1 \~# vmset.sh eth0 192.168.0.10 RS1 noroute

root@RS1 \~# nmcli connection modify eth0 ipv4.gateway 192.168.0.100

root@RS1 \~# nmcli connection reload

root@RS1 \~# nmcli connection up eth0

root@RS1 \~# dnf install httpd -y

root@RS1 \~# systemctl enable --now httpd

root@RS1 \~# echo RS1 - 192.168.0.10 > /var/www/html/index.html

测试:

模式实现

vs机上

开启内核路由功能;编写策略;更改权重

root@vsnode \~# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

root@vsnode \~# sysctl -p

net.ipv4.ip_forward = 1

root@vsnode \~# ipvsadm -C

root@vsnode \~# ipvsadm -A -t 172.25.254.100:80 -s wrr

root@vsnode \~# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1

root@vsnode \~# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1 root@vsnode \~# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2

  1. DR 模式(核心步骤,重点解决 VIP 冲突)

在路由器中(两种网络类型)

root@router \~# systemctl disable --now ipvsadm.service

Removed "/etc/systemd/system/multi-user.target.wants/ipvsadm.service".

root@router \~# ipvsadm -C

root@router \~# vmset.sh eth0 172.25.254.100 vsnode

root@router \~# vmset.sh eth1 192.168.0.100 vsnode noroute、

设定内核路由功能

root@router \~# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

数据转发策略

root@router \~# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100

vsnode 调度器

root@vsnode \~# vmset.sh eth0 192.168.0.200 vsnode noroute

root@vsnode \~# vim /etc/NetworkManager/system-connections/eth0.nmconnection

root@vsnode \~# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100

检测

#客户端

root@client \~# vmset.sh eth0 172.25.254.99 client

测试

rs1 rs2差不多

root@RS1 \~# vmset.sh eth0 192.168.0.10 RS1 noroute

root@RS1 \~# nmcli connection modify eth0 ipv4.gateway 192.168.0.100

root@RS1 \~# nmcli connection reload

root@RS1 \~# nmcli connection up eth0

root@RS1 \~# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0

192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0

设定vip

root@RS1 \~# cd /etc/NetworkManager/system-connections/

root@RS1 system-connections# cp -p eth0.nmconnection lo.nmconnection

root@RS1 system-connections# vim lo.nmconnection

connection

id=lo

type=loopback

interface-name=lo

ethernet

ipv4

address1=127.0.0.1/8

address2=192.168.0.200/32

method=manual

root@RS1 system-connections# nmcli connection reload

root@RS1 system-connections# nmcli connection up lo

#arp禁止响应

root@rs1 \~# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

root@rs1 \~# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

root@rs1 \~# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

root@rs1 \~# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

测试

七、核心总结

LVS 是四层(TCP/UDP) 负载均衡,内核层实现,性能远高于应用层的 Nginx/HAProxy,适合高并发入口调度

生产环境首选 DR 模式,性能最优,需重点解决 VIP 的 ARP 冲突问题;小型集群可选用 NAT 模式,配置简单

调度算法默认用WLC,需会话保持用持久连接,灰度发布用 4.15 + 内核的FO 算法

ipvsadm 是 LVS 核心配置工具,高频命令需熟记,规则一定要保存 + 开机自启

多端口调度错乱用防火墙标记,这是 LVS 实战必备技巧

生产环境常搭配 Keepalived 实现 VS 的高可用,解决调度器单点故障问题

相关推荐
方便面不加香菜5 小时前
Linux--基础IO(一)
linux·运维·服务器
mounter6259 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
赵渝强老师10 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
Qt程序员10 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
The Sheep 202310 小时前
Vue复习
linux·服务器·数据库
兄台の请冷静10 小时前
Linux 安装es
linux·elasticsearch·jenkins
fengyehongWorld10 小时前
Linux rg命令
linux
pride.li11 小时前
海思视觉Hi3516CV610--开机自动设置ip
linux·网络·网络协议·tcp/ip
我叫张小白。11 小时前
CentOS 7 安装 Docker并配置镜像加速(完整指南)
linux·docker·centos
Titan202412 小时前
Linux动静态库
linux·服务器·c++