Linux负载均衡--LVS(IPVS)

摘要:
LVS是一种叫基于TCP/IP的负载均衡技术,转发效率极高,具有处理百万计并发连接请求的能力。LVS的IP负载均衡技术是通过IPVS模块实现的。IPVS模块是LVS集群的核心软件模块,它安装在LVS集群作为负载均衡的主节点上,虚拟出一个IP地址和端口对外提供服务。这是由负载均衡调度算法决定的。

https://www.jianshu.com/p/36880b085265

一、LVS简介

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,现在已经是 Linux标准内核的一部分。LVS是一种叫基于TCP/IP的负载均衡技术,转发效率极高,具有处理百万计并发连接请求的能力。

LVS的IP负载均衡技术是通过IPVS模块实现的。IPVS模块是LVS集群的核心软件模块,它安装在LVS集群作为负载均衡的主节点上,虚拟出一个IP地址和端口对外提供服务。用户通过访问这个虚拟服务(VS),然后访问请求由负载均衡器(LB)调度到后端真实服务器(RS)中,由RS实际处理用户的请求给返回响应。

Linux负载均衡--LVS(IPVS)第1张
二、IPVS的三种转发模式

根据负载均衡器转发客户端请求以及RS返回响应机制的不同,将IPVS的转发模式分为三种:NAT,DR,FULLNAT。(还有一种IP TUNNEL模式,IP通道技术,接触比较少)

1. DR模式(Direct Routing)

DR模式下,客户端的请求包到达负载均衡器的虚拟服务IP端口后,负载均衡器不会改写请求包的IP和端口,但是会改写请求包的MAC地址为后端RS的MAC地址,然后将数据包转发;真实服务器处理请求后,响应包直接回给客户端,不再经过负载均衡器。所以DR模式的转发效率是最高的,特别适合下行流量较大的业务场景,比如请求视频等大文件。

DR模式的特点:

数据包在LB转发过程中,源/目的IP端口都不会变化

LB只是将数据包的MAC地址改写为RS的MAC地址,然后转发给相应的RS。

每台RS上都必须在环回网卡上绑定LB的虚拟服务IP

因为LB转发时并不会改写数据包的目的IP,所以RS收到的数据包的目的IP仍是LB的虚拟服务IP。为了保证RS能够正确处理该数据包,而不是丢弃,必须在RS的环回网卡上绑定LB的虚拟服务IP。这样RS会认为这个虚拟服务IP是自己的IP,自己是能够处理这个数据包的。否则RS会直接丢弃该数据包!

RS上的业务进程必须监听在环回网卡的虚拟服务IP上,且端口必须和LB上的虚拟服务端口一致

因为LB不会改写数据包的目的端口,所以RS服务的监听端口必须和虚拟服务端口一致,否则RS会直接拒绝该数据包。

RS处理完请求后,响应直接回给客户端,不再经过LB

因为RS收到的请求数据包的源IP是客户端的IP,所以理所当然RS的响应会直接回给客户端,而不会再经过LB。这时候要求RS和客户端之间的网络是可达的。

LB和RS须位于同一个子网

因为LB在转发过程中需要改写数据包的MAC为RS的MAC地址,所以要能够查询到RS的MAC。而要获取到RS的MAC,则需要保证二者位于一个子网,否则LB只能获取到RS网关的MAC地址。

Linux负载均衡--LVS(IPVS)第2张

2. NAT模式(Network Address Translation)

NAT模式下,请求包和响应包都需要经过LB处理。当客户端的请求到达虚拟服务后,LB会对请求包做目的地址转换(DNAT),将请求包的目的IP改写为RS的IP。当收到RS的响应后,LB会对响应包做源地址转换(SNAT),将响应包的源IP改写为LB的IP。

NAT模式的特点:

LB会修改数据包的地址

对于请求包,会进行DNAT;对于响应包,会进行SNAT。

LB会透传客户端IP到RS(DR模式也会透传)

虽然LB在转发过程中做了NAT转换,但是因为只是做了部分地址转发,所以RS收到的请求包里是能看到客户端IP的。

需要将RS的默认网关地址配置为LB的浮动IP地址

因为RS收到的请求包源IP是客户端的IP,为了保证响应包在返回时能走到LB上面,所以需要将RS的默认网关地址配置为LB的虚拟服务IP地址。当然,如果客户端的IP是固定的,也可以在RS上添加明细路由指向LB的虚拟服务IP,不用改默认网关。

LB和RS须位于同一个子网,并且客户端不能和LB/RS位于同一子网

因为需要将RS的默认网关配置为LB的虚拟服务IP地址,所以需要保证LB和RS位于同一子网。

又因为需要保证RS的响应包能走回到LB上,则客户端不能和RS位于同一子网。否则RS直接就能获取到客户端的MAC,响应包就直接回给客户端了,不会走网关,也就走不到LB上面了。这时候由于没有LB做SNAT,客户端收到的响应包源IP是RS的IP,而客户端的请求包目的IP是LB的虚拟服务IP,这时候客户端无法识别响应包,会直接丢弃。

Linux负载均衡--LVS(IPVS)第3张

3. FULLNAT模式

FULLNAT模式下,LB会对请求包和响应包都做SNAT+DNAT。

FULLNAT模式的特点:

LB完全作为一个代理服务器

FULLNAT下,客户端感知不到RS,RS也感知不到客户端,它们都只能看到LB。此种模式和七层负载均衡有点相似,只不过不会去解析应用层协议,而是在TCP层将消息转发

LB和RS对于组网结构没有要求

不同于NAT和DR要求LB和RS位于一个子网,FULLNAT对于组网结构没有要求。只需要保证客户端和LB、LB和RS之间网络互通即可。

Linux负载均衡--LVS(IPVS)第4张

三种转发模式性能从高到低:DR > NAT >FULLNAT。

虽然FULLNAT模式的性能比不上DR和NAT,但是FULLNAT模式没有组网要求,允许LB和RS部署在不同的子网中,这给运维带来了便利。并且 FULLNAT模式具有更好的可拓展性,可以通过增加更多的LB节点,提升系统整体的负载均衡能力。

Linux负载均衡--LVS(IPVS)第5张
三、IPVS支持的调度算法

对于后端的RS集群,LB是如何决策应该把消息调度到哪个RS节点呢?这是由负载均衡调度算法决定的。IPVS常用的调度算法有:

轮询(Round Robin)

LB认为集群内每台RS都是相同的,会轮流进行调度分发。从数据统计上看,RR模式是调度最均衡的。

加权轮询(Weighted Round Robin)

LB会根据RS上配置的权重,将消息按权重比分发到不同的RS上。可以给性能更好的RS节点配置更高的权重,提升集群整体的性能。

最小连接数(Least Connections)

LB会根据和集群内每台RS的连接数统计情况,将消息调度到连接数最少的RS节点上。在长连接业务场景下,LC算法对于系统整体负载均衡的情况较好;但是在短连接业务场景下,由于连接会迅速释放,可能会导致消息每次都调度到同一个RS节点,造成严重的负载不均衡。

加权最小连接数(Weighted Least Connections)

最小连接数算法的加权版~

地址哈希(Address Hash)

LB上会保存一张哈希表,通过哈希映射将客户端和RS节点关联起来。


作者:Mr萝卜
链接:https://www.jianshu.com/p/36880b085265
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

免责声明:文章转载自《Linux负载均衡--LVS(IPVS)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇U3D组件------CharacterController(角色控制器)Elasticsearch搜索引擎学习笔记(五)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux Bond的模式与原理。

原理:   多块网卡虚拟成一张,实现冗余;多张网卡对外显示一张,具有同一个IP;网络配置都会使用Bonding技术做网口硬件层面的冗余,防止单个网口应用的单点故障。   对于多物理网卡的 Bond 网卡而言,其中一块物理网卡会被设置为 Master(主设备),其他的网卡都是 Slave(从设备),Bond 网卡的 MAC 地址取自标志为 Master 的...

nginx配合IIS实现简单负载均衡

在linux下部署nginx这里就不多说了。这篇文章主要介绍nginx部署好后,如何配合iis实现负载均衡,没用过java不过原理应该是一样的。1.IIS 部署两个站点端口分别为8081和8082 8081站点和8082站点如下【随便写了个没有样式的很丑的页面】,我特意加了111和222区分 2.设置nginx配置文件,实现简单的负载均衡【推荐xsh...

负载均衡和冗余技术

负载均衡和冗余技术是两种不同的技术,可以单独使用,但只有两者结合时才能发挥强大的作用,一般都是同时结合使用。 负载均衡:是指给服务器分流,也叫轮循,类似分发扑克牌,给网站分流的服务器都是激活状态 冗余技术:也叫服务器集群,但只有一台服务器是激活状态的,其他服务器作为备份服务器,只有服务器宕机的时候,备份机才激活。 假如某网站有3台分流服务器A、B、C,(A...

SLB(Server Load Balancing 服务器负载均衡)

简介SLB(Server Load Balancing 服务器负载均衡)用于实现多个服务器之间的负载均衡。SLB虚拟出一个服务器,对用户呈现的就是这个虚拟的服务器。虚拟服务器代表的是多个真实服务器的群集,当客户端向虚拟服务器发起连接时,SLB通过某种均衡算法,转发到某真实服务器。负载均衡的2种算法:WRR(weighted round robin 加权循环...

爱快路由器的一些注意事项硬件配置+多线负载均衡

原文: https://help.onethingcloud.com/f63a/578d#header-16 https://www.ikuai8.com/zhic/ymgn/lyym/xtsz/qdqdq.html 爱快多对一配置教程 1)开启nat1   ②所有线路dmz到你的设备地址(不要设置端口映射,若设置了dmz则无需开启upnp)  ...

Linux多网卡负载均衡 : bond

USERCTL=no/yes 普通用户是否可以关闭或启用网关 -------------------------------- 在这介绍的Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。其实这项技术在Sun和Cisco中早已...