[转帖]LVS入门篇(三)之LVS的工作模式和调度算法

lvs,入门篇,工作,模式,调度,算法 · 浏览次数 : 0

小编点评

## IP包调度流程图对比 **1. DR模式** * 需求:每个RS节点的性能相近 * 算法:轮询调度RR **2. WRR模式** * 需求:每个RS节点的性能相近 * 算法:加权轮询调度WLC **3. WLC模式** * 需求:目标IP地址的可用性相近 * 算法:加权最小连接数调度 **4. SH模式** * 需求:目标IP地址的可用性相近 * 算法:动态调度算法 **5. RR模式** * 需求:每个RS节点的性能相近 * 算法:轮询调度RR **6. WLRB模式** * 需求:每个RS节点的性能相近 * 算法:加权轮询调度WRRb **7. LABC模式** * 需求:目标IP地址的可用性相近 * 算法:基于局部性最少链接调度 **8. LABCR模式** * 需求:目标IP地址的可用性相近 * 算法:带复制的基于局部性最少链接调度 **9. SED模式** * 需求:目标IP地址的可用性相近 * 算法:最短期望延迟 **10. NQ模式** * 需求:目标IP地址的可用性相近 * 算法:永不排队

正文

LVS入门篇(三)之LVS的工作模式和调度算法

 
https://www.cnblogs.com/linuxk/p/9358512.html

 

  • 1、NAT模型

(1)原理图:

 

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

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

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

④.然后lvs将此报文的源地址修改为本机地址(114.100.80.10)并发送给客户端。

注意:在NAT模式中,RealServer的网关必须指向LVS,否则报文无法送达客户端。

 (2)IP包调度过程图:

(3)小结

 ①NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点

②需要在LB上配置一个公网IP地址就可以了。

③每台内部的realserver服务器的网关地址必须是调度器LB的内网地址。

④NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

⑤优缺点:

(a)优点
集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
(b)缺点
扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

  •  2、DR模型

(1)原理图:

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

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

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:需要设置lo接口的VIP不能响应本地网络内的arp请求(也叫ARP抑制)

(2)IP包调度过程图:

 

(3)小结:

①通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。

②请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)

③因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面

④RS主机需要绑定VIP地址在LO接口(掩码32位)上,并且需要配置ARP抑制。

⑤RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。

⑥由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。

⑦直接对外的业务比如WEB等,RS的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP。

⑧优缺点
(i)优点
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000WPV或者并发请求1万一下都可以考虑用haproxy/nginx。
(ii)缺点
所有RS节点和调度器LB只能在一个局域网里面。.

  • 3、TUN模型

(1)原理图:

 

 

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

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

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

注意:需要设置lo接口的VIP不能在共网上出现。

(2)IP包调度过程图:

 

 

(3)小结:

①TUNNEL模式必须在所有的realserver机器上面绑定VIP的IP地址

②TUNNEL模式的vip------>realserver的包通信通过TUNNEL模式,不管是内网和外网都能通信,所以不需要lvsvip跟realserver在同一个网段内

③TUNNEL模式realserver会把packet直接发给client不会给lvs了

④TUNNEL模式走的隧道模式,所以运维起来比较难,所以一般不用。

⑤优缺点

(i)优点

负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

(ii)缺点

隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IPTunneling”(IPEncapsulation)协议,服务器可能只局限在部分Linux系统上。

  • 4、FULLNAT模型(FullNetworkAddressTranslation)

(1)原理图:

无论是DR还是NAT模式,不可避免的都有一个问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。

这引发的两个问题是:

①.同一个VLAN的限制导致运维不方便,跨VLAN的RS无法接入。

②.LVS的水平扩展受到制约。当RS水平扩容时,总有一天其上的单点LVS会成为瓶颈。

Full-NAT由此而生,解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题。

Full-NAT相比NAT的主要改进是,在SNAT/DNAT的基础上,加上另一种转换,转换过程如下::

 

 

在包从LVS转到RS的过程中,源地址从客户端IP被替换成了LVS的内网IP。

内网IP之间可以通过多个交换机跨VLAN通信。

当RS处理完接受到的包,返回时,会将这个包返回给LVS的内网IP,这一步也不受限于VLAN。

LVS收到包后,在NAT模式修改源地址的基础上,再把RS发来的包中的目标地址从LVS内网IP改为客户端的IP。

Full-NAT主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN的问题。采用这种方式,LVS和RS的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性。

(2)IP包调度过程图:

 

(3)小结:

(i)FULLNAT模式也不需要LBIP和realserverip在同一个网段;fullnat跟nat相比的优点是:保证RS回包一定能够回到LVS;因为源地址就是LVS-->不确定

(ii)fullnat因为要更新sorceip所以性能正常比nat模式下降10%

(4)四种模式对比总结:
性能:DR>TUN>NAT>FULLNAT
由于每个模式的功能不一样,所以具体的选择还是要根据公司业务的选择,实际环境来决定。
  •  5、LVS调度算法

 (1)IPVS调度器实现了如下十种负载调度算法

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr,SED,NQ.

最常用的三种:RR WRR WLC

(2)固定调度算法

a、rr:轮询调度(Round Robin)

将请求依次分配不同的RS节点,RS服务器均摊请求,这种算法比较简单,但是只适合RS节点相差性能不大的情况

b、wrr:加权轮询调度(Weighted Round Robin)

它将依据不同RS节点的权值分配任务,权值高的RS将优先获得任务,并且分配的连接数比权值低的RS节点更多。相同权值的RS得到相同数目的连接数

c、dh:目标地址散列(destination hashing)

以目的地址为关键字查找一个静态hash表来获取需要的RS

d、sh:源地址散列(source hashing)

 以源地址为关键字查找一个静态hash表来获取需要的RS

(3)动态调度算法:

a、wlc:加权最小连接数调度(weighted least-connection)

假设各台RS的权值依次为Wi(i=1...n) 。当前的tcp连接数依次为Ti(i=1..n),依次取TI/WI为最小的RS作为下一个分配的RS

b、LC:最少链接(Least Connections)

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

c、LBLC:基于局部性的最少链接(Locality-Based Least Connections)

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

d、LBLCR:带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)

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

e、SED:最短期望延迟(Shortest Expected Delay)

基于wlc算法,简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】

f、NQ:永不排队(never queue)

无需队列(改进的sed),如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。

(4)LVS调度算法的生产环境选型

a、一般的网络服务,如http,mail,mysql等常用的LVS调度算法为:基本轮询调度RR、加权最小连接调度WLC、加权轮询调度WRR

b、基于局部性的最小连接LBLC和带复制的给予局部性最小连接LBLCR主要适用于web cache和DB cache

c、源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一。

d、最短期望延迟SED和永不排队NQ调度算法主要是处理时间相对较长的网络服务。

实际适用中这些算法的适用范围很多,工作中最好参考内核中的连接调度算法的实现原理,然后根据具体的业务需求合理的选型。

Don't forget the beginner's mind

与[转帖]LVS入门篇(三)之LVS的工作模式和调度算法相似的内容:

[转帖]LVS入门篇(三)之LVS的工作模式和调度算法

LVS入门篇(三)之LVS的工作模式和调度算法 https://www.cnblogs.com/linuxk/p/9358512.html 1、NAT模型 (1)原理图: ①.客户端(200.10.10.1)将请求发往前端的负载均衡器(114.100.80.10),请求报文源地址是CIP(客户端IP

[转帖]LVS入门篇(四)之LVS实战

LVS入门篇(四)之LVS实战 https://www.cnblogs.com/linuxk/p/9360922.html 一、LVS的NAT模式实战 1、环境说明: HOST OS role remask 192.168.56.12 Centos 7.4 LVS调度器(1.2.7) VIP:192

[转帖]LVS入门篇(五)之LVS+Keepalived实战

LVS入门篇(五)之LVS+Keepalived实战 https://www.cnblogs.com/linuxk/p/9365189.html 一、实验架构和环境说明 (1)本次基于VMware Workstation搭建一个四台Linux(CentOS 7.4)系统所构成的一个服务器集群,其中两

[转帖]LVS 20倍的负载不均衡,原来是内核的这个Bug

https://plantegg.github.io/2019/07/19/%E5%B0%B1%E6%98%AF%E8%A6%81%E4%BD%A0%E6%87%82%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1--%E8%B4%9F%E8%BD%BD%E5%9D%87%E

[转帖]LVS负载均衡的三种方式

1.VS-NAT(基于网络地址转换,network address translation ,NAT) VS-NAT是LVS最基本的方法,如果想要设置一个用于测试的LVS,这是一个最简单的方法。 当客户发出请求,lvs负载均衡中的director会将接受到的包的目标地址重写为某个real-serve

[转帖]图解LVS

https://www.jianshu.com/p/89c6f27771a4 LVS (linux virtual server)是 Linux标准内核的一部分。基于TCP/IP的负载均衡技术,转发效率极高,具有处理百万计并发连接请求的能力。由于工作在linux内核层,转发效率比工作在应用层的ngi

[转帖]Nginx/LVS/HAProxy负载均衡软件的优缺点详解

转载:http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下。 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、