LVS详解

本文详细介绍了LinuxVirtualServer(LVS)的原理、网络分层、组成部分、调度算法,以及其在实现高性能集群、负载均衡和高可用性方面的特点和优势。涵盖了NAT、DR、TUN和FULLNAT等多种负载均衡模式,以及ipvs的调度算法如轮询、加权轮询等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LVS详解


一、LVS是什么?

  • Linux Virtual Server ,即Linux虚拟服务器,LVS主要用于多服务器的负载均衡。工作在网络4层,主要用来实现高性能,高可用的服务器集群。具有易用、配置简单、负载均衡方式多样的特点,同时稳定可靠、可拓展性较好。
  • 目标是通过集群和Linux操作系统实现一个高性能、高可用的服务器,具有较好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

二、LVS基础

1.网络分层

七层网络

  • OSI七层协议模型主要构成如下图所示,常用的Nginx工作在7层网络模型下。
    在这里插入图片描述

五层网络

  • OSI和TCP/IP的综合,非官方协议模型,实际应用还是TCP/IP的四层结构(为了方便把下面的两层 链路层、物理层统称为网络接口层),五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。

四层网络

  • TCP/IP四层模型,主要包括:应用层、运输层、网际层和网络接口层。LVS工作在4层网络模型下。
    在这里插入图片描述

2.LVS组成

  • 由2部分程序组成,为ipvs和ipvsadm

相关名词解释

  • DS:director server,即负载均衡器,根据一定的负载均衡算法将流量分发到后端的真实服务器上
  • RS:real server 真实的提供服务的server,可被DS划分到一个或多个负载均衡组.
  • BDS:backup director server,为了保证负载均衡器的高可用衍生出的备份.
  • VS:vitual server,负载均衡集群对外提供的IP+Port.
  • VIP:VS的IP,client请求服务的DIP(destination IP address),定义在DS上,client或其网关需要有其路由

ipvs负载均衡方案

  • 在调度器的实现技术中,IP负载均衡技术是效率最高的。IPVS实现了多种IP负载均衡技术。
    1.LVS-NAT

    • 通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户。
    • Director Server作为所有服务器节点的网关,既作为客户端的访问入口,也是各节点回应客户端的访问出口,其外网地址作为整个群集的VIP地址,其内网地址与后端服务器Real Server在同一个物理网络,Real Server必须使用私有IP地址
    • 具体流程为 : 1)请求到DS时修改数据包的目标IP地址为后端服务器IP,重新封装数据包(源IP为CIP,目标IP为RIP),然后选路将数据包发送给RS。 2)RS比对发现目标IP是本机的IP,处理请求后正常发送响应报文(源IP为RIP,目标IP为CIP)发回给DS。 3)DS重新封装数据包,将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。
    • 特点为:NAT方式的数据进出都经过DS,DS容易成为性能瓶颈;RS和DS必须在同一个VLAN,即处于同一个局域网。
      在这里插入图片描述

    2.LVS-DR

    • 通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。
    • DS作为群集的访问入口,但不作为网关使用,后端服务器池中的RS与DS在同一个物理网络中,发送给客户机的数据包不需要经过DS即input经过DR,output不经过DR。为了响应对整个群集的访问,DS与RS都需要配置有VIP地址。
    • 具体流程为: 1)请求到DS时修改数据包的源MAC地址为DS的MAC,目标MAC地址为RS的MAC,重新封装数据包然后选路将数据包发送给RS 2)RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,处理请求后正常发送响应报文(源MAC地址为RS出口网卡(eth0)的MAC,目标MAC为CIP的MAC),将响应报文通过lo接口传送给eth0网卡然后向外发出
    • 特点为:RS直接将响应报文传送到客户端,不经过DS,性能会优于NAT方式。但DS和RS都必须在同一个网段,无法异地部署。(DS只修改数据包中数据链路层的MAC信息,IP信息不修改。于是DS通过MAC来定位RS,由此限制了DS和RS要处于同一网段)
      在这里插入图片描述

    3.LVS-TUN

    • IP Tunnel(ip隧道)解决DR模式下RS和DS处于同一网段的问题。ip隧道可以理解为IP in IP, 即发送方在IP头的外部再包装一个IP头,接收方先解出第一层IP头,然后再按照正常流程处理剩下的的IP数据包。
    • 具体流程为: 1)给数据包添加新的IP头,重新封装数据包然后选路将数据包发送给Real Server 2)RS发现请求报文的IP地址是自己的eth0的IP地址,就剥掉IP隧道包头 3)RS发现请求报文的IP地址是自己的lo的IP地址,就接收此报文,处理请求后正常发送响应报文(源IP是VIP,目的IP是ClientIP),将响应报文通过lo接口传送给eth0网卡然后向外发出
    • lo:系统内部接收和发送数据包 127.0.0.1 eth0:网卡 MAC:网卡的物理地址 inet addr:网卡ip地址
    • 特点为:1)DS添加了IP头,但是不修改传输层数据,故TUN不支持端口映射 2)只要IP可达,RS完全可以分布到不同的机房和网段 3)RS需要绑定VIP到lo,避免映射混乱 4)会存在MTU的问题,如果一个数据包已经达到了mtu的大小,ip隧道添加一个ip头之后,包的大小就会超过MTU(解决方案为支持PMTUD协议或减小RS的MSS) 5)解决了RS的部署和扩展问题,但是DS的扩展问题无法解决,只能做主备高可用
      在这里插入图片描述

    4.LVS-FULLNAT

    • 对上面的模式做了优化,解决DS的扩展能力,针对DR和NAT都需要在同一网段,TUN需要配置ip隧道做优化
    • DS进行了横向扩展,DS之前增加了一个交换机。RS返回数据不是靠的配置默认网关,而是明确的把数据发往DS
    • 具体流程为:1)DS前面的交换机选择一台DS,把请求发送到该DS 2)DS修改数据包,源IP改为DS,目的IP改为RS,重新封装数据包然后选路将数据包发送给RS 3)RS发现请求报文的IP地址是自己的IP地址,就接收此报文,处理请求后正常发送响应报文(源IP是RS,目的IP是DS),将响应报文发给DS 4)DS修改此报文,把源IP改成VIP,目的IP改成CIP
    • 特点为:1)交换机选择DS的策略为OSPF路由协议(单一自治系统内决策路由,存在多条到达同一个目的地址的相同开销的路径时,那么发往目的IP的转发流量就可以通过不同路径分担,实现负载均衡) 2)DS按照常规流程修改ip和端口,支持端口映射
    • 透传CIP问题:RS这时候是看不到CIP的,只能看到DS的IP,解决办法是DS发给RS的数据包中通过TCP option携带CIP,RS通过toa模块hook获取ip的函数,使返回TCP option中的IP
    • DS动态增减问题:DS在增减节点的时候,会引起路由改变,某个连接的数据会被发送到不存在该连接session信息的DS上,造成异常,结果就是该连接下线或者重连。解决方法是使用支持一致性hash的交换机(支持的交换机较少所以不太考虑),或者使用session同步,即DS之间互相同步session信息,每个DS都保留一份全量的session表。这样DS节点下线时别的DS也有session信息,所以连接不受影响。新节点上线时,则首先全量同步session信息再把自己加到交换机的下游去
    • RS动态增减问题:RS在增减节点的时候,可能导致某个客户端新建的连接落不到同一个RS上,这可能会影响某些业务。所以这就要求DS使用一致性算法来调度客户端的连接,同时要求每个DS拥有同样的调度算法

在这里插入图片描述

ipvs调度算法

  • ipvs默认的调度算法是wlc,总共有八种调度算法如下所示
  • rr:Round Robin,轮询
  • wrr:Weight,加权轮询
  • lc:最少连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS
  • wlc:加权最少连接数调度,(active256+inactive)/weighed,权重越大连接数越少,则连接至此rs
  • lblc:基于本地的最少连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑
  • lblcr:基于本地带复制功能的最少连接;对于已建立的请求,分配到同一台服务器;对于新请求,分配到连接数少的server
  • dh:destination hash目标地址hash,功能类似于sh,但应用场景不同
  • sh:source hash,源地址hash,根据hash表将来自同一IP请求发送至同一Real Server,这样在一定程度上破坏了负载均衡的效果;主要使用在电商网站,实现session affinity(会话绑定)

三、LVS集群特点

功能特性

  • 实现了多种IP负载均衡技术和八种连接调度算法的IPVS软件。
  • IPVS内部实现中,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相关的ICMP消息。
  • 虚拟服务的设置数目没有限制,每个虚拟服务有自己的服务器集.
  • 支持持久的虚拟服务(如HTTP Cookie和HTTPS等需要该功能的支持),并提供详尽的统计数据,如连接的处理速率和报文的流量等。
  • 针对大规模拒绝服务(Deny of Service)攻击,实现了多种防卫策略。
  • 有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。
  • 有相关的集群管理软件对资源进行监测,能及时将故障屏蔽,实现系统的高可用性。
  • 主、从调度器能周期性地进行状态同步,从而实现更高的可用性。

优势

  • 适用性/易用性:后端服务器可运行任何支持TCP/IP的操作系统,包括Linux,各种Unix(如FreeBSD、Sun Solaris.HP Unix等),Mac/OS和Windows NT/2000等。负载调度器能够支持绝大多数的TCP和UDP协议。
  • 性能:具有良好的伸缩性,可支持几百万个并发连接。若配置千兆网卡,系统的最大吞吐量可接近10Gbits/s。
  • 可靠性:LVS服务器集群软件已经在很多大型的、关键性的站点得到很好的应用,它的可靠性在真实应用得到很好的证实。
  • 开源软件可按照协议自由封装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值