linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法

文章目录

  • 1.arp协议
  • 2.LVS负载均衡集群
    • 2.1 搭建负载均衡的需求
    • 2.2 nginx与LVS负载均衡的区别!!!
    • 2.3 IPVS软件工作层次图
  • 3. LVS的工作模式
    • 3.1 NAT模式
    • 3.2 TUN模式
    • 3.3 DR模式
    • 3.4 FULLNAT模式
  • 4. LVS集群的算法
    • 4.1 rr*
    • 4.2 wrr*
    • 4.3 WLC*

1.arp协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。

DNS是域名和ip之间的解析,需要配服务。

ARP是ip来解析MAC地址的协议,不需要配服务。要求通讯双方必须在同一个物理网段。ARP工作在网络层。

工作原理:

1)发送方首先检查自己的ARP缓存(IP地址和MAC地址的解析记录),没有接收方,就发送广播询问接收方的MAC地址。

2)局域网中所有的主机都接收到了广播,只有指定的接收方会回复,告诉发送方自己的MAC地址(单播),这时接收方也会缓存发送方的MAC地址。。

3)发送方得到了MAC地址,在本地进行ARP缓存,将数据封装成哪来的MAC地址,发送到局域网。

ARP缓存表长用命令:

[root@nginx2 sbin]# arp -a 查看所有记录
gateway (172.25.5.250) at 54:e1:ad:54:3b:86 [ether] on ens3
? (172.25.5.1) at 52:54:00:8f:d5:c6 [ether] on ens3 
[root@nginx2 sbin]# arp -d 172.25.5.1 清除
[root@nginx2 sbin]# arp -a
gateway (172.25.5.250) at 54:e1:ad:54:3b:86 [ether] on ens3
? (172.25.5.1) at <incomplete> on ens3
[root@nginx2 sbin]# arp -s 172.25.5.1 52:54:00:8f:d5:c6 # 绑定IP和MAC
[root@nginx2 sbin]# arp -a
gateway (172.25.5.250) at 54:e1:ad:54:3b:86 [ether] on ens3
? (172.25.5.1) at 52:54:00:8f:d5:c6 [ether] PERM on ens3

ARP缓存表,可以加快ARP解析速度,减少局域网的广播风暴。

ARP缓存表,给服务器带来了攻击服务器的风险,这个就是arp欺骗攻击。

切换路由器,负载均衡等设备时,可能会导致短时网络中断。(给老的网关发送数据包根据arp表,但是更换了路由器,所以无法通讯)

ARP攻击就是伪造IP和MAC对实现ARP欺骗的。(欺骗网关)

2.LVS负载均衡集群

2.1 搭建负载均衡的需求

负载均衡集群提供了一种廉价,有效透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

1)单台计算机无法承受大规模的并发访问或数据流量了,需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,减少了用户的响应时间又提升了用户体验。

2)将单个负载的运算服务分单到多台节点设备上处理结束后,将结果汇总、反回、系统处理能力和效率得到大幅度提高。

3)7*24小时服务的保证,任意一个或多个有限后端节点设备宕机,寻能影响整个业务的运行。

2.2 nginx与LVS负载均衡的区别!!!

1)LVS:抗负载能力强,工作在四层,仅仅是做请求分发,没有流量,效率很高。基本上可以对所有的服务做负载均衡。

2)各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。

3)无流量,lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

nginx与lvs进行对比:

  • nginx工作在网络的第7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可以利用的场合就远多于lvs了
  • nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另外注意,lvs需要向托管商至少申请多于一个ip来做visual ip
  • lvs采用的是同步请求转发的策略。这里说一下同步转发和异步转发的区别。同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端
  • 当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回
  • 但是仅仅使用lvs作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。但是如果在lvs的后端在添加一层nginx(多个),每个nginx后端再有几台应用服务器,那么结合两者的优势,既能避免单nginx的流量集中瓶颈,又能避免单lvs时一锤子买卖的问题

2.3 IPVS软件工作层次图

在2.4.24内核版本后,IPVS已经成为Linux官方标准内核的一部分。

linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法_第1张图片

LVS负载均衡调度技术是在linux内核中实现的。我们在使用该软件配置LVS时候,不能直接配置内核中的ipvs,而需要使用ipvs的管理工具ipvsadm来进行管理。

所以ipvsadm是ipvs的管理工具。

  • 真正实现调度的是IPVS,工作在linux 的内核层面。
  • LVS自带的IPVS管理工具是ipvsadm(命令行)。
  • 我们可以使用keepalive通过配置文件化管理IPVS以及负载均衡高可用。

linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法_第2张图片

CIP clientIP客户端IP
LB(Director) 负载均衡器
DIP 负载均衡器的ip
VIP 提供给外界访问的
RS Real Server
RIP 后端节点的地址

3. LVS的工作模式

3.1 NAT模式

LB修改数据包的目的地址(开始时时VIP,后面是RIP),达到转发的功能。

数据包被后端服务器处理后,发送数据包(rip:cip),在局域网中没有cip所以发送给网关,这里指向的网关就是负载均衡调度器。负载均衡调度器在进行封装,将源地址修改为VIP,发送回给数据端。

也就是说LVS的NAT模式是,来修改DNAT方式,走修改SNAT方式。

由于请求和访问都要通过LB,所以访问量大的时候就不行了。

NAT模式可以该端口,也可以改IP。

并且需要开启内核转发。

linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法_第3张图片

3.2 TUN模式

可以达到百台的访问量。

LB通过IP隧道将请求报文不改写,只添加封装IP头的方式来修改请求IP。

数据包到达某个节点的时候,节点也需要绑定VIP,并且抑制ARP。

数据包处理完成以源VIP和目的CIP回应给客户端,不需要IP地址找网关,单是网关将成为瓶颈;单是如果节点自己就可以连接外网,就可以直接发送效率更高。

TUN比DR的效率低,因为还要考虑ip隧道的支持问题。

linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法_第4张图片

3.3 DR模式

Director Route:直接路由模式,支持高并发,多达数万。

  • 客户端把请求发给负载均衡器(源地址CIP,目标地址VIP;源MAC地址CMAC,目标MAC进行广播,目标MAC是网关)到达LVS的局域网也还需要广播,确定LVS的MAC地址,因为VIP在LVS上,所以反回LVS的MAC地址。
  • LVS是代理不是转发(只接收请求,请求几个字节,反回大量数据),不更改源地址和目标地址,只更改源MAC和目标MAC为,目标通过算法来确定使用哪个目标地址。
  • 后端服务器接收数据包源地址CIP,目标地址VIP,他没有VIP会丢弃;所以在网卡上绑定一个VIP,绑定在lo网卡上,并且使用32位群组IP,还需要做ARP抑制用来抑制目标地址和网线地址不能是同一个。所以数据包处理完之后(源地址VIP,目标地址CIP)。通过出网的网关发送给数据端。
    linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法_第5张图片

3.4 FULLNAT模式

数据包经过LB做DNAT和SNAT,数据包请求回去的时候做DNAT和SNAT,全都改。

可以实现多台机器入栈处理多台机器出站处理。

linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法_第6张图片

4. LVS集群的算法

4.1 rr*

round robin)轮询算法,顾名思义,也就是将客户端的请求逐个分发给后端的每台Real Server;假定后端有3台服务器,编号分别为1、2、3;则分发次序为1…2…3…1…2…3…1…2…3…

4.2 wrr*

weight round robin,加权轮询;根据不同的服务器权重进行请求分发调度,权重大的多分发请求,权重小的少分发请求;比如3台Real Server编号为1、2、3,权重分别为4、2、1,则分发请求次序为1…1…1…1…2…2…3…1…1…1…1…2…2…3…

3、SH(源地址hash调度)

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

  • 注解:哈希是一种高效的算法,可以根据不同的哈希函数对不同长度的输入计算后得到一个固定长度的值;其重要特性在于:对于同一值的输入,始终得到相同的哈希散列值

4、DH(目的地址hash调度)
Destination Hash,目标地址哈希;不同于SH是根据客户端的信息进行哈希计算,DH算法是根据请求的目标资源进行哈希计算,比如请求的URL,此方式的目的在于:能够保证对相同资源的请求始终分发到后端同样的Real Server上
典型的应用场景在缓存服务器上,比如我们的LVS和Real Server之间增加了一层缓存服务器,缓存服务器缓存了一部分静态资源,那么LVS使用DH算法,可以将客户端请求的已存在缓存服务器的资源,始终分发给缓存服务器,而不必分发给Real Server,从而可以大大降低后端的压力,同时也提高了响应速度,两全其美的事情

以上的算法可以归类为静态算法,其都只是根据客户端请求数据包中的某些信息来进行计算,从而决定分发到那台服务器上,并没有将后端服务器的负载情况考虑在内;

下面介绍的算法可以归类为动态算法,其会考虑后端服务器的实际负载情况,并选择负载小的进行请求分发

5、LC(最小连接数)
Least Connection,最少连接数;此算法会根据后端每台Real Server的连接数多少来分发请求,对于连接数少的服务器,会多分发客户端请求,以尽可能利用资源占用较少的服务器

连接数计算方法:active * 256 + inactive

注解:active表示正处于HTTP正发送请求或处理请求过程中;inactive表示该连接非请求和处理过程中,只是长连接释放结算,或四次挥手阶段;

4.3 WLC*

Weight Least Connection,加权最少连接数;后端Real Server可能性能差异较大,WLC算法可以动态的获取不同服务器的真实负载情况,并调整对应的加权值,从而始终保证将请求分发到性能优异且较空闲的机器,从而提高处理效率

连接数计算方法:( active * 256 + inactive ) / weight

7、SED
Shortest Expect Delay,最短期望延迟;此算法是对WLC的一种改进,和WLC的不同在于其连接数计算方法的不同

    SED连接数计算方法:( active + 1 ) * 256  / weight

和WLC不同在于两点:

(1)、不将非活动连接数计算在内

(2)、将active做+1处理

关于SED调度方法有两个事情需要注意:

  • 在判断每个集群节点的总开销值时不使用非活动连接数值。

  • 在入站连接被分配后,它在活动连接数值基础上加1来预料总开销值

8、NQ

Never Queue,永不排队算法;此种算法,当客户端请求到达时,会首先根据SED算法进行选择一个RS,然后把请求分配给这个服务器,同时从算法列表中将此台服务器排除,下次请求到达时,只会在剩下的服务器列表中根据SED进行选择,等到每一台主机都分配到连接后,调度器此后每次都会根据SED算法在所有的服务器中进行计算选择;

该算法始终保证没有0连接的服务器

9、LBLC(基于地址的最小链接数)

Locality-Based Least Connections,基于局部性的最少链接

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

总结:LVS的负载均衡算法,不同的应用场景,应选择合适的负载均衡算法,只有在充分了解了每一种算法的思想之后,才能根据自己的业务需求结合应用场景来做选择;

如果你实在不知道该如何选择,那么推荐选择WLC算法是一个不错的选择;WLC算法在实际的生产环境中,应用还是挺多的。

你可能感兴趣的:(集群,linux,运维,负载均衡,lvs,centos)