LVS(Linux Virtual Server)概念详解

一、LVS 是什么?

LVS(Linux Virtual Server,Linux虚拟服务器) 是一个由章文嵩博士在1998年发起并领导的开源项目。它是一个基于Linux操作系统内核的负载均衡解决方案,其核心功能是将来自客户端的网络请求,通过特定的调度算法,分发到后端一组真实服务器(Real Server)上,从而构建一个高性能、高可用的虚拟服务器集群。

LVS工作在传输层(TCP/UDP) ,因此也被称为四层负载均衡。它不解析应用层协议(如HTTP、FTP),而是直接转发IP数据包,这使得它具有极高的处理性能和较低的延迟。

二、LVS 的核心组件与架构

一个典型的LVS集群包含以下几个核心角色:

  • 负载均衡器(Load Balancer / Director) :运行LVS软件(通常是ipvsadm)的Linux服务器。它对外提供一个虚拟IP(Virtual IP, VIP),接收所有客户端请求,并根据调度算法将请求转发给后端的真实服务器。
  • 真实服务器群(Real Server Pool):一组真正提供应用服务的后端服务器。它们通过局域网与负载均衡器相连,处理负载均衡器转发过来的请求。
  • 共享存储(可选):为了保证所有真实服务器提供一致的数据(例如Web内容),通常会使用NFS、分布式文件系统或数据库集群等共享存储。

LVS的架构主要分为三种工作模式,这是理解其概念的关键:

1. NAT 模式(Network Address Translation)

原理:负载均衡器同时作为客户端和真实服务器的网关。请求和响应数据包都需要经过负载均衡器进行地址转换。

  • 请求过程:客户端访问VIP → 负载均衡器接收 → 负载均衡器修改目标IP为某台真实服务器的IP(DNAT)并转发 → 真实服务器处理请求。
  • 响应过程:真实服务器将响应发送给负载均衡器 → 负载均衡器修改源IP为VIP(SNAT) → 返回给客户端。

优点:真实服务器可以使用任何操作系统,只需配置默认网关为负载均衡器。

缺点:负载均衡器容易成为性能瓶颈,因为所有进出流量都要经过它。

2. TUN 模式(IP Tunneling)

原理:负载均衡器将接收到的请求数据包封装在一个新的IP数据包中(IP隧道),发送给真实服务器。真实服务器解封装后直接响应客户端。

  • 请求经过负载均衡器,但响应由真实服务器直接返回给客户端(不经过负载均衡器)。
  • 真实服务器需要支持IP隧道协议,并配置隧道接口。

优点:响应流量不经过负载均衡器,减轻了其压力,支持跨网段部署。

缺点:真实服务器需要支持隧道协议,配置稍复杂。

3. DR 模式(Direct Routing)

原理 :最常用、性能最高的模式。负载均衡器和真实服务器在同一个局域网,且拥有相同的VIP。负载均衡器只修改请求数据包的目标MAC地址为某台真实服务器的MAC,然后通过二层交换转发。真实服务器收到后直接处理,并将响应直接返回给客户端。

  • 请求经过负载均衡器调度,响应由真实服务器直接返回。
  • 真实服务器需要配置VIP在lo(回环)接口上,并抑制该VIP的ARP响应。

优点:性能极高,负载均衡器只处理入站请求,出站响应压力小。

缺点:要求负载均衡器和真实服务器必须在同一物理网段(二层可达)。

三、LVS 的调度算法

LVS通过多种调度算法来决定将新连接分配给哪台真实服务器:

  • 轮询(Round Robin, rr):将请求依次分配给每台服务器,循环进行。
  • 加权轮询(Weighted Round Robin, wrr):根据服务器权重分配请求,权重高的服务器获得更多连接。
  • 最少连接(Least Connections, lc):将新请求分配给当前连接数最少的服务器。
  • 加权最少连接(Weighted Least Connections, wlc):在最少连接的基础上,考虑服务器的权重。
  • 基于局部性的最少连接(Locality-Based Least Connections, lblc) & 带复制的基于局部性的最少连接(lblcr):适用于缓存集群,将相同目标IP的请求定向到同一台服务器。
  • 目标地址散列(Destination Hashing, dh) & 源地址散列(Source Hashing, sh):根据目标或源IP地址的散列值分配请求,保证同一客户或同一目标总是访问同一台服务器。

四、LVS 的特点与优势

  • 高性能:工作在四层,转发效率高,对服务器资源消耗小。
  • 高可用性:可与Keepalived等工具结合,实现负载均衡器的故障转移。
  • 可扩展性:可以透明地增加或减少真实服务器,以应对流量变化。
  • 开源免费:作为Linux内核的一部分,无需额外付费。
  • 适用性广:几乎可以为任何基于TCP/UDP的服务(如HTTP、HTTPS、FTP、DNS、数据库)做负载均衡。

五、LVS 的安装及使用

1.安装

bash 复制代码
[root@lvs-server ~]# dnf install ipvsadm.x86_64 -y

2.lvs软件相关信息

  • 程序包:ipvsadm

  • Unit File: ipvsadm.service

  • 主程序:/usr/sbin/ipvsadm

  • 规则保存工具:/usr/sbin/ipvsadm-save

  • 规则重载工具:/usr/sbin/ipvsadm-restore

  • 配置文件:/etc/sysconfig/ipvsadm-config

  • ipvs调度规则文件:/etc/sysconfig/ipvsadm

3.命令参数

bash 复制代码
1.管理集群服务中的增删改
-A  #添加
-E  #修改
-t  #tcp服务
-u  #udp服务
-s  #指定调度算法,默认为WLC
-p  #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-f  #firewall mask 火墙标记,是一个数字

#增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A  -f 66  -p 3000
#修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80  -s wrr -p 3000
#删除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
[root@DR-server ~]# ipvsadm -D -f 66
bash 复制代码
2.管理集群中RealServer的曾增删改
-a      #添加realserver
-e      #更改realserver
-t      #tcp协议
-u      #udp协议
-f      #火墙 标签
-r      #realserver地址
-g      #直连路由模式
-i      #ipip隧道模式
-m      #nat模式
-w      #设定权重
-Z      #清空计数器
-C      #清空lvs策略
-L      #查看lvs策略
-n      #不做解析
--rate  #输出速率信息

#添加
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2
#更改
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1
#删除
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30

4.lvs策略保存

bash 复制代码
#创建策略
[root@lvs-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
[root@lvs-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20 -m

#保存策略到/mnt/ipvsadm_save
[root@lvs-server ~]# ipvsadm-save
-A -t lvs-server:http -s rr
-a -t lvs-server:http -r 192.168.0.10:http -m -w 1
-a -t lvs-server:http -r 192.168.0.20:http -m -w 1
[root@lvs-server ~]# ipvsadm-save   > /mnt/ipvsadm_save

#对策略进行清空
[root@lvs-server ~]# ipvsadm -C
[root@lvs-server ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

#从保存的文件中重载策略
[root@lvs-server ~]# ipvsadm-restore < ipvsadm_save

5.配置ipvs策略开机生效

bash 复制代码
#保存策略文件
[root@lvs-server ~]# ipvsadm-save  > /etc/sysconfig/ipvsadm
#配置开机启动
[root@lvs-server ~]# systemctl enable --now ipvsadm.service
#重启
reboot
#重启后仍然生效
[root@lvs-server ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0
  -> 192.168.0.20:80              Masq    1      0          0
相关推荐
小张同学a.1 小时前
Linux系统管理
linux·运维
会飞的小新1 小时前
Windows CMD 与 PowerShell 深度解析:底层原理、命令差异、自动化选型指南
运维·windows·自动化
阿龙的工作记录2 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手2 小时前
Linux的基本指令
linux·运维·服务器
MonolithIoT3 小时前
实战方案|设备备件无人值守仓库:连续化产线运维备件 7×24 小时数字化管控方案
运维·网络·数据库
gwf2164 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
AAA@峥4 小时前
CentOS7 源码编译安装 MySQL5.7|SQL 基础操作 + 备份恢复完整实战
运维·数据库·sql·centos
撩得Android一次心动4 小时前
Linux编程笔记3【个人用】
linux·笔记
OpenPomeloxCommunity4 小时前
3. Linux 同步机制之 spinlock 设计与实现(一):通用层
linux