前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第二章 负载均衡LB服务之LVS

第二章 负载均衡LB服务之LVS

作者头像
晓天
发布2019-08-26 16:02:43
2.4K0
发布2019-08-26 16:02:43
举报

第二章 负载均衡LB服务之LVS

2.1 LB服务简介

上一章我们介绍过,负载均衡服务是由一组服务器共同完成同一个服务,它的具体原理是:一组服务器中选择一台作为主管理服务器,其他服务器其在它管辖之下,称为内部服务节点服务器,由管理服务器负责接收客户端请求,然后按照一定的算法、策略,分配给内部节点服务器具体处理客户请求,从而实现统一管理,分流业务的功能。

这台管理服务器我们又称负载均衡LB服务器,为了便于与客户方的网络通信,它必定有一块网卡配置合理的ip地址,并可被客户机访问到,客户段申请访问服务时,通信的目的ip即为该ip,所以该IP被称为服务IP。由于LB服务器收到客户请求后,会转发给内部节点服务器,但是客户端通信封装中的目的ip却还是服务ip,所以在内部节点服务器上除了自身原有的IP外,还需要绑定服务ip,那么这个服务ip实质上是以虚拟地址的形式存在于内部节点服务器上的,因此服务ip又称虚拟IP,简写为VIP,VIP是可以以网卡子接口的形式存在于网卡上。而节点服务器网卡上原有的IP地址,是真实的固定ip,被称为真IP,简写为RIP。

有了LB服务器、节点服务器、VIP、RIP的概念,下面我们来具体介绍一下LVS服务的工作原理。

2.2 LVS工作原理

LVS(LinuxVirtual Server)是RHEL系统默认支持的LB服务工具,在系统安装光盘上自带其安装包。LVS功能强大,性能稳定,被多应用于实际的生产环境的各种应用服务平台。

LVS最为核心的原理是它的工作模式与分配算法,下面逐一介绍。

2.2.1 LVS工作模式

LVS的LB服务器对内部节点的管理方式,即如何将客户请求转发给内部节点、并控制内部节点如何相应客户端,被称为工作模式。LB服务器共有三种工作模式:nat模式、TUN隧道模式、DR直连模式。

1、nat模式

nat模式是将LB服务器架设为一台nat服务器,两块网卡,一块连外网,一块连内网,内部节点都被封闭在一个内部子网中。LB服务器接收客户机请求,其外网卡ip即服务ip,无需做虚拟ip设置。LB服务器接收到客户请求后,转发给内部某个节点,节点相应客户时,先回给LB服务器,再由LB服务器通过nat原理转给外网客户(nat原理请参考《Linux服务》书中“iptables防火墙”章中的nat介绍)。

由此可知,在nat模式下,进出节点的数据,都必须经过LB服务器代理,也就是说,客户端只和LB服务器通信,不会与内部节点直接通信,客户机根本不知道内部节点的存在,这与nat的封闭功能是完全符合的。

nat模式的优点是对内部节点服务器起到了很好的保护作用,内部服务器其外封闭,外网无法直接进入内网。但是nat模式的缺点也很明显,由于数据进出都需要LB服务器的转发,无形中就增加了LB服务器的工作量,增加了系统资源的消耗,降低性能及可承载的并发量。而且由于进出数据都需要做nat转换,即封装数据包的改变,所以对客户的相应速度也会降低很多。

如下图所示:假设用LVS构建web集群,使用nat模式,则LVS服务器两块网卡,一连内,一连外,当客户端请求网站时,目的地址是LVS的外网卡ip(当然,DNS对网站FQDN的A记录解析也是指向LVS外网卡ip的),再由LVS转发给内部web节点,类似于DNAT;内部web服务器给客户相应时,回复的数据也是先交给LVS服务器,再由LVS采用SNAT模式转发出去,到达客户机。

由此,我们可知LVS的nat模式下,LVS服务器必须处于nat路由器的身份,再开启LVS负载均衡功能,且内部节点服务器必须在同一个内部子网内,不支持节点服务器在不同子网的情况。

2、TUN隧道模式

参考上图,我们来介绍一下TUN隧道模式:TUN模式中,LVS服务器可以与节点在同一个子网中,单网卡连接,配置固定ip,然后绑定VIP(即服务ip),显性存在,即可被访问;同时节点服务器也配置固定ip,也绑定VIP,但是是隐性的,即客户端是直接访问不到的。当客户机访问时,目标ip为VIP,会被路由器转发到LVS服务器上,再由LVS分配给节点服务器。

这里在LVS服务器上事先创建出集群,并加入节点服务器的固定ip,当LVS转给节点时,采用网络层二次封装的方式,如图:第三层网络层封装两次,外层封装安装实际固定ip封装寻址,实现数据传输,到达节点服务器,而内层封装使用VIP作为目的地址,源地址即客户端地址,这样节点主机接收到请求后,可以直接给客户端回复,无需再经过LVS服务器转发了。因此减少了LVS服务器的工作量,也就可以提升LVS的可承载的并发量了。但由于LVS服务器需要对数据包做二次封装的操作,所以在转发速度上略有延时,效率并不是最佳的。

而且由于外层封装是按实际固定ip寻址的,所以LVS服务器与节点主机是可以不在同一子网内的,这样就更加灵活了。

再者,因为LVS与节点服务器都绑定VIP,所以会产生ip冲突的报错,我们知道ip冲突的检测是由网络层arp协议负责的,所以在TUN模式下,需要在LVS与节点上关闭arp协议。好了,这种二次封装的技术,相当于在客户机与节点服务器之间开辟了一个小的专用通信链路,被称为隧道技术。

3、DR直连模式

参考上图,DR直连模式下,LVS服务器同样配置固定ip,并绑定VIP(显性存在)。节点服务器也配置固定ip,绑定VIP(隐性存在)。客户端的请求以VIP为目的ip,会通过路由被发送到LVS服务器上,LVS服务器再转发给节点服务器,在转发时,LVS服务器会把数据封装中数据帧部分重新封装,改成到节点服务器的寻址(如图),而网络层(目的地址仍为VIP)及内部各层则不变,这个新的数据帧转发到节点服务器后,拆帧并被节点服务器识别VIP接收请求。

而节点服务器在回复客户时,也不需要通过LVS,可以直接给客户机回复,同样也减少了对LVS的影响,降低了LVS的压力,提升了LVS承载的并发量。而且这种更改数据帧寻址的方式,无需改动网络层数据包的封装,转发速度更快,效率更高。但是由于DR模式通过更改数据帧封装,属于OSI数据链路层的功能,即只能在同子网内操作,所以LVS服务器与节点服务器必须在同一子网中。

同TUN模式一样,DR模式下,由于LVS与各几点都绑定VIP,为了避免IP冲突报警,所以LVS与节点都必须关闭arp协议。在实际生产环境中,我们一般也都是把LVS服务器与节点服务器放在同一子网中的,所以DR直连模式由于速度、效率的优势,被广泛应用。

2.2.2 LVS工作模式小结

上一节我们介绍了LVS的三种工作模式,总结来说,这三种模式各有各的特点与优势,总结如下:

NAT模式:LVS服务器充当NAT代理路由器及LB服务器身份,数据进出都经过LVS服务器,工作效率较低;但内部节点服务器被封闭在内部子网内,外界无从访问与得知,所以更加安全。

TUN模式:采用隧道技术,即网络层二次封装技术,由LVS给节点服务器转发客户请求,由于需要做二次封装,所以效率略低;但TUN模式支持LVS与节点在不同子网内,灵活度更好;另外TUN模式下,LVS与节点都有固定ip,并绑定VIP,需要关闭arp协议。

DR模式:采用数据帧改写技术,直接在第二层(即数据链路层)寻址,转发速度快,效率高;但仅支持LVS与节点在同一子网内;同样,LVS与节点都有固定ip,并绑定VIP,需要关闭arp协议。

好了,了解了LVS的工作模式,下面再来看LVS的节点选择算法。

2.3 LVS算法

LVS服务器在转发客户端请求时,会选择一个最佳的节点服务器,但是由于节点的硬件配置、正承载的业务都会有不同,该如何选择节点呢?所以LVS内部就制定了十种选择算法,最为常见的是前八种,我们可以根据实际情况选择一种更为合适的算法。

具体算法如下

rr 轮询算法,轮流给内部服务器分配客户请求

wrr 加权轮询,每台服务器设定一个权值,权值高的会优先分配,常用

lc 最少连接数算法

wlc 加权最少连接数算法

lblc 局部最小连接,当服务节点在不同网络中时,LVS先估算离客户端最近的网络中的一组node(节点),再按最少连接数分配

lblcr 带有复制的局部最小优先,先估算最近的一组node,先给该组中最近的,若超载,则给最少连接的

dh 目标地址散列算法 根据目标地址ip按hash算法,相当于随机

sh 源地址散列算法 根据源地址ip按hash算法,相当于随机

sed 最短延迟调度或称最短期望延迟算法,是在WLC基础上加以改进,不再考虑非活动状态。

NQ:永不排队算法。SED算法的改进;(首先挑选一个主机分配一个请求,然后挑选下一个主机分配请求,直到把所有主机轮询一遍之后,再根据SED算法进行分配)。即无需队列,如果有台realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空闲。

下面介绍一下这些算法的特点:

rr轮询算法,顾名思义,就是把客户请求轮流分配给每个应用节点,分配平均,但不管具体每个节点现有的负载量,所以可能会造成不同节点承载压力不均衡的现象。

wrr加权轮询,也是轮询的方式,但并不是平均分配客户访问。人为的给每个节点设置一个权重中,LVS在分配客户访问时会优先分配给权重值高的节点。其实,本质上,权重我们可以人为是节点主机性能、能力的体现,CPU较快、内存较大的主机,本身处理能力就强,可承接的并发量也大,所以就可以设置较大的权重,以承载更多的客户访问;反之,硬件配置略低的节点主机就可以设置较小些的权重。权重值都是由数字表示,设定后基本可以认为LVS服务器是按权重数值的比重来分配的,比如两台节点主机,一台是3,另一台是2,则第一台会获得3/5的客户访问,第二台会获得2/5的客户。

lc最小连接数算法,lc算法是根据节点上正在承载的连接数,把新的客户请求分配给连接数最小的一台节点服务器,这相对比较合理,尤其是在各节点主机硬件配置基本一致的情况下,可以考虑此种方式

wlc加权最小连接数,是在lc的基础上给每个节点主机设置权重,这样就能更加合理的分配客户访问了,比较适合于各节点主机硬件配置不同的集群中。wlc在核算时采用Overhead=(Active*256+Inactive)/weight的公式计算出最终比重值,按最小的分配。其中Active表示活动连接数,Inactive是非活动连接数,weight是权重值。但此算法容易受到非活动连接(即连接上后不做任何操作的客户)的影响。

sed算法,是把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多的缺陷:当权限过大的时候,会导致空闲服务器一直处于无连接状态。公式是:Overhead=(Active+1)/weight。

SH算法,是根据请求服务的客户端的域名或IP地址,进行哈希计算,计算后的值对Real Server(即节点服务器)的个数取模求余,从而保证可以将同一域名或IP的请求始终分发到后端的同一个Real Server上,常用于Session保持等场景;

DH算法,不同于SH是根据客户端的信息进行哈希计算,DH算法是根据请求的目标资源进行哈希计算,比如请求的URL,此方式的目的在于:能够保证对相同资源的请求始终分发到后端同样的Real Server上;

以上算法中,lc、wlc、sed、nq、lblc、lblcr算法统称为动态算法,其他四种被称为静态算法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档