LVS(Linux Virtual Server)详细笔记(理论篇)

一.详解

1. LVS概述

LVS(Linux Virtual Server)是由章文嵩博士 发起的开源负载均衡项目,通过在Linux内核中实现高性能四层交换 能力,将多台物理服务器组织成单一虚拟服务。它能够处理百万级并发连接 ,同时保持线性扩展能力,主要解决单服务器性能瓶颈问题。相比应用层负载均衡(如Nginx),LVS在内核空间直接处理数据包,避免了用户态-内核态切换开销,性能提升可达10倍以上。
LVS 官网: http://www.linuxvirtualserver.org/
LVS工作原理:
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
LVS 相关术语
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务
LVS概念
VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
LVS集群的类型
lvs-nat:
修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun:
在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP

2. 核心架构

LVS集群采用三层分层架构:

  • 负载调度层(Director) :运行ipvs内核模块的调度节点,接收所有客户端请求,通过调度算法分发至后端。关键IP包括:

    • VIP(Virtual IP) :对外服务IP,客户端访问入口

    • DIP(Director IP) :与后端通信的内部IP

  • 真实服务器层(Real Server, RS) :实际处理请求的服务节点(如Web/DB服务器),通过RIP(Real IP) 标识。

  • 共享存储层 :为RS提供一致性数据源(如NFS/GFS),避免本地存储导致内容差异。

3. 核心组件
  • IPVS(IP Virtual Server) :

    工作于内核空间的Netfilter INPUT链,执行核心转发逻辑。通过直接修改数据包目标地址(NAT)或MAC地址(DR),实现零拷贝转发59。

  • ipvsadm :

    用户空间配置工具,定义集群服务(VIP:Port)与RS关联规则。例如添加VIP的80端口服务:ipvsadm -A -t 192.168.1.100:80 -s wlc

4. 工作原理

数据包处理流程分四步:

  1. PREROUTING链 :接收客户端请求,目标IP为VIP。

  2. INPUT链 :IPVS比对请求是否匹配集群服务。

  3. 转发决策 :按调度算法选择RS,修改数据包:

    • DR模式:重写目标MAC为RS MAC

    • NAT模式:修改目标IP为RIP

  4. POSTROUTING链 :转发至选定RS。

二.理论笔记

1. LVS工作模式详解
特性 DR模式 NAT模式 TUN模式
工作层 二层(MAC层) 四层(IP层) 三层(IP隧道)
修改内容 目标MAC地址 目标IP地址 新增IP头部封装
RS配置要求 绑定VIP至lo接口 网关指向DIP 支持IP隧道协议
性能 ⭐⭐⭐⭐⭐(最优) ⭐⭐(有瓶颈) ⭐⭐⭐(中等)
扩展性 同一局域网(≤交换机) 受限(≤10节点) 跨地域(WAN支持)
典型场景 高并发Web集群 小型私有集群 异地容灾部署

DR模式工作流

关键约束 :所有RS需配置ARP抑制(arp_ignore=1,arp_announce=2),避免响应VIP的ARP请求。

NAT模式工作流:

瓶颈 :进出流量均经Director,需处理双向数据包改写。

TUN模式工作流:

适用场景 :云环境跨VPC调度或异地多活部署。

LVS的工作模式以及优缺点:

LVS支持多种工作模式,主要包括以下几种:

  • NAT(Network Address Translation)模式:

    • 原理:负载均衡器修改客户端请求的目标IP地址,将其转发到后端服务器。后端服务器的响应通过负载均衡器返回给客户端。

    • 优点:配置简单,后端服务器只需要将网关设置为负载均衡器即可。

    • 缺点:负载均衡器需要处理所有进出流量,可能成为性能瓶颈。

  • DR(Direct Routing)模式:

    • 原理:负载均衡器和后端服务器共享一个虚拟IP地址,后端服务器直接将响应发送给客户端,无需经过负载均衡器。

    • 优点:后端服务器直接响应客户端请求,减少了负载均衡器的负担,提高了性能。

    • 缺点:需要在同一物理网络中,后端服务器需要配置虚拟IP地址。

  • TUN(Tunneling)模式:

    • 原理:负载均衡器将客户端请求封装在IP隧道中,发送到后端服务器。后端服务器解封装后处理请求,响应直接返回给客户端。

    • 优点:后端服务器可以位于不同的网络中,灵活性高。

    • 缺点:需要额外的封装和解封装操作,可能会增加一些延迟。

2. LVS调度算法解析

静态算法(不考虑实时负载):

  • RR(轮询) :均等分发请求,适用RS性能一致场景。

  • WRR(加权轮询) :按预设权重分配(如性能强RS权重=3,弱=1)。

  • SH(源地址散列) :固定CIP映射至同RS,保持会话粘滞。

动态算法(基于实时连接数):

  • LC(最少连接) :

    计算方式:Overhead = Active×256 + Inactive

    选择值最小RS。

  • WLC(加权最少连接) :
    Overhead = (Active×256 + Inactive) / Weight

    默认推荐算法。

  • SED(最短期望延迟) :
    Overhead = (Active+1)×256 / Weight

    避免新请求涌入空闲RS。

算法 计算逻辑 适用场景
RR 顺序循环分配 RS性能均等
WLC (活动连接×256+非活动连接)/权重 默认通用场景
SED (活动连接+1)×256/权重 避免新请求排队
SH 哈希(CIP)→固定RS 会话保持需求

三.总结与应用

1.选择lvs的优势:

高性能:LVS基于Linux内核实现,性能高效,能够处理大量的并发请求。

高可用性:通过负载均衡和故障转移机制,确保系统的高可用性。

灵活性:支持多种工作模式和负载均衡算法,可以根据实际需求进行配置。

开源免费:LVS是开源软件,用户可以根据自己的需求进行定制和优化。

2.模式选择:

追求性能 → DR模式(机房内部)

简化配置 → NAT模式(小型集群)

跨地域扩展 → TUN模式(云环境)

3.典型场景:

Web高并发:DR + WLC算法

会话敏感服务:DR + SH算法

混合云部署:TUN + SED算法

LVS的应用场景:

Web服务器集群:通过LVS将客户端的HTTP请求分发到多个Web服务器,提高网站的响应速度和可靠性。

数据库集群:将数据库读写请求分发到多个数据库服务器,提高数据库的性能和可用性。

企业级应用:在企业级应用中,LVS可以用于负载均衡中间件、应用服务器等,确保系统的高可用性。

4.局限性:

LVS无应用层解析(HTTP/HTTPS),需结合Nginx/Haproxy实现七层负载。

依赖Linux:LVS只能运行在Linux操作系统上,对于非Linux环境的支持有限。

维护成本:在大规模集群中,LVS的维护和管理需要专业的技术人员。

四.注意事项

1.时间同步

各节点间的时间偏差应不大于1秒,建议使用统一的NTP服务器进行时间更新、

2.DR模式

VIP的MAC广播问题:在DR模型中,每个节点均要配置VIP,存在VIP的MAC广播问题。需要设置内核参数arp_ignore为1和arp_announce为2,以管理MAC广播。

回环接口配置:需要在所有真实服务器(RealServer)上配置lo:0回环接口的VIP,并设置对应的路由。

网络要求:DR模式要求负载均衡器(Director)和真实服务器必须在同一个局域网内。

连接哈希表大小:DR模式的瓶颈在于连接哈希表的大小及处理对应连接的内存大小。对于低版本Linux内核(小于3.0),需要重新编译内核才能修改连接哈希表大小;对于较新的内核(如CentOS 7的kernel 3.10),可以在加载ip_vs内核模块时加参数修改连接哈希表。

3.TUN模式

VIP绑定:必须在所有真实服务器上绑定VIP的IP地址。

网络要求:TUN模式下,负载均衡器和真实服务器可以位于不同的网段。

性能:由于TUN模式涉及对数据包的重新封装,其性能不如DR模式。

4.NAT模式

网络要求:NAT模式下,负载均衡器会修改数据包的目标IP地址,因此不需要负载均衡器和真实服务器在同一网段。

性能瓶颈:负载均衡器需要处理所有进出流量,可能成为性能瓶颈。

5.内核模块加载

确保ip_vs相关的内核模块已成功加载。

6.ARP和RP Filter设置

在真实服务器上,需要关闭ARP学习功能和源地址检查功能(RP Filter),以确保负载均衡器可以正常工作。

7.缓存转发功能

如果需要,可以通过配置内核参数net.ipv4.vs.conn_reuse_mode来禁用LVS的缓存转发功能,但需注意这可能会导致性能下降。

8. 真实服务器网关设置

在NAT模式下,真实服务器的网关应设置为负载均衡器的IP地址。

9. 连接管理

LVS不会主动断开连接,即使真实服务器的状态发生变化,连接也会保持,直到客户端主动断开。

五.**.**集群和分布式简介

**1.**系统性能扩展方式

Scale UP:向上扩展,增强
Scale Out:向外扩展,增加设备,调度分配问题,Cluster

2.集群Cluster

Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
Cluster常见的三种类型:
LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
HA:High Availiablity(高可用)SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服
务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在
常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一
些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外
停机时间
HPC:High-performance computing(高性能计算,国家战略资源)

**3.**分布式

分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群。

**4.**集群和分布式

集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数
来提升效率,
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决
定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。
以上为LVS的理论基础。

相关推荐
珊瑚里的鱼44 分钟前
第十三讲 | map和set的使用
开发语言·c++·笔记·visualstudio·visual studio
逑之1 小时前
C++笔记1:命名空间,缺省参数,引用等
开发语言·c++·笔记
黎茗Dawn1 小时前
连接new服务器注意事项
linux·python
L_autinue_Star2 小时前
从0到1实现Shell!Linux进程程序替换详解
linux·运维·服务器·c++·chrome
笑衬人心。3 小时前
Hashtable 与 HashMap 的区别笔记
java·数据结构·笔记
金心靖晨3 小时前
消息中间件优化高手笔记
java·数据库·笔记
程序员JerrySUN3 小时前
Linux 文件系统实现层详解:原理、结构与驱动衔接
android·linux·运维·数据库·redis·嵌入式硬件
HainesFreeman4 小时前
Linux、Ubuntu和CentOS的关系与区别
linux·ubuntu·centos
yuanManGan5 小时前
Linux基本指令(一)
linux·运维·服务器
Pi_Qiu_5 小时前
Python初学者笔记第十三期 -- (常用内置函数)
java·笔记·python