LVS包转发模型和调度算法(转)


LVS简介

  Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来 讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡 技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。


LVS结构与工作原理

一.LVS的结构

  LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用 户请求结果返回给用户。
  

二.LVS内核模型

1.当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。

2.当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。

3.LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工
作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包
将被放行至用户空间。

4.如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。

5.最后经由POSTROUTING链发往后端服务器。

三.LVS的包转发模型

1.NAT模型:

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。注意:在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端

2.DR模型:

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。注意:需要设置lo接口的VIP不能响应本地网络内的arp请求

3.TUN模型:

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。注意:需要设置lo接口的VIP不能在共网上出现

四.LVS的调度算法

LVS的调度算法分为静态与动态两类。

1.静态算法(4种):只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况

①.RR:轮叫调度(Round Robin)
  调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载?

②.WRR:加权轮叫(Weight RR)
  调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

③.DH:目标地址散列调度(Destination Hash )
  根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

④.SH:源地址 hash(Source Hash)
  源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空?

2.动态算法(6种):前端的调度器会根据后端真实服务器的实际连接情况来分配请求

①.LC:最少链接(Least Connections)
  调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

②.WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)
  在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载?调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

③.SED:最短延迟调度(Shortest Expected Delay )
  在WLC基础上改进,Overhead =
(ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的
时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。

④.NQ永不排队/最少队列调度(Never Queue Scheduling NQ)
  无需队列。如果有台
realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保
证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保
持状态的服务就需要考虑非活动连接给服务器的压力。

⑤.LBLC:基于局部性的最少链接(locality-Based Least Connections)
 
基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统?该算法根据请求的目标IP地址找出该目标IP地址最近使
用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的
原则选出一个可用的服务器,将请求发送到该服务器?

⑥. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
 

带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统?它与LBLC算法的不同之处是它要维护从一个目
标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射?该算法根据请求的目标IP地址找出该目标IP地址对应的服务器
组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台
服务器,将该服务器加入到服务器组中,将请求发送到该服务器?同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程
度。

时间: 2024-12-18 09:25:17

LVS包转发模型和调度算法(转)的相关文章

LVS专题: LVS的工作模型和调度算法介绍

LVS专题: LVS的工作模型和调度算法介绍 前言 什么是负载均衡? 什么是LVS? LVS的架构: LVS的实现模型: NAT实现原理: DR实现原理: TUN实现原理: FULLNAT实现原理: LVS的调度算法 静态调度算法(4种) 动态调度算法(6种): 总结 前言 本文大概介绍一下LVS的工作方式和实现的模型以及调度算法,流程图方面只上了两张图, 如果有需要LVS各工作模式的流程图请看张小凡:LVS原理详解 什么是负载均衡? 当单台服务器性能不足时我们有两种对其进行扩展的方式, 分别是

lvs的工作模型及调度算法

lvs:linux virtual server  基于端口的高并发负载均衡器 工作与tcp层,软件实现方式 工作原理:当数据包经过prerouting进入input链,如果请求的是定义为集群服务的服务时,lvs通过强行改变数据包的走向至postrouting链完成向后端转发,回包经由prerouting->forward->postrouting回送给客户端 对于负载均衡集群,重要的关注点: 1.实现调度的工作原理 2.调度算法 3.后端健康状态监测 lvs优缺点: 优点:由于工作在内核空间

企业——LVS的集中转发模型的转发原理

LVS的几种转发模型的基本原理 1.NAT模型 通过修改请求报文的目标IP地址(同时可能修改目标端口,支持端口映射),改为某Real Server的IP地址实现数据包的转发. 1)客户端将请求报文发往前端的负载均衡器,请求报文源地址为CIP目标地址为VIP 2)负载均衡器接受到报文,发现请求的是在ipvs规则里面存在的地址,那么它将客户端的请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去. 3)报文送到Real Server上,由于报文的目标地址是自己,所以会响应请求,并将

LVS类型的介绍,调度算法和不同类型的实现

LVS类型介绍,调度算法和不同类型的实现 LVS集群的组成与特点 Linux虚拟服务器(Linux Virtual Server,LVS),是一个由章文嵩开发的一款自由软件.利用LVS可以实现高可用的.可伸缩的Web.Mail.Cache和Media等网络服务,并在此基础上开发支持庞大用户数的.可伸缩的.高可用的电子商务应用.LVS自1998年发展到现在,已经变得比较成熟,目前广应用在各种网络服务和电子商务应用中.LVS具有很好的可伸缩性.可靠性和可管理性,通过LVS要实现的最终目标是:利用Li

LVS的NAT模型建立

LVS的NAT模型建立一. LVS的NAT模型拓扑图客户端请求时,请求报文时通过director来改变目标ip实现转发.(经过director时目标ip由VIP改为RIP,但是请求报文从director出来时,还是由DIP所在的网卡接口出去的.)报文流向:1->2->31的源地址是CIP,目标地址是director的VIP.2的源地址是CIP,目标地址是director的RIP. 图一 服务器端回应时,响应报文时通过director改变源ip实现转发.(经过director时,源ip由RIP改

lvs+srs(dr模型)

参考: https://my.oschina.net/fengjihu/blog/416883 (srs集群模式) http://blog.csdn.net/reblue520/article/details/50857078 (lvs负载均衡) http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html (arp_ignore和arp_announce) http://www.linuxvirtualserver.org/docs

LVS负载均衡模型与工作原理

1.LVS项目简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.章文嵩博士目前工作于阿里集团,主要从事集群技术.操作系统.对象存储与数据库的研究. 2.LVS是如何工作的 Linux Virtual Server的主要是在负载均衡器上实现的,负载均衡器是一台加了LVS Patch的内核的Linux系统.LVS Patch可以通过重新编译内核的方法加入内核

linux内核数据包转发流程(三)网卡帧接收分析

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 每个cpu都有队列来处理接收到的帧,都有其数据结构来处理入口和出口流量,因此,不同cpu之间没有必要使用上锁机制,.此队列数据结构为softnet_data(定义在include/linux/netdevice.h中): /* * Incoming packets are placed on per-cpu queues so that * no locking is neede

Linux实验报告-构建一个LVS的DR模型

Linux实验报告-构建一个LVS的DR模型 实验背景: 学习笔记,构建一个LVS的DR模型 实验目的: 了解LVS的DR模型工作原理 实现一个LVS的DR模型的实验 实验环境: Vmware Workstation 9,CentOS 6.4  实验步骤: 1,实验目的规划如下模型,CIP.VIP.DIP与RIP在同一网段 2.RS1上配置如下: 配置内核参数: #echo 1 > /prco/sys/net/ipv4/conf/lo/arp_ignore