运维之道 | LVS原理详解

 ̄綄美尐妖づ 提交于 2020-01-27 01:15:24

LVS原理详解及部署

一、LVS简介

负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。

二、LVS基本原理

在这里插入图片描述

  • 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间。
  • PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。
  • IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。
  • POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。

三、LVS组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm
  • IPVS(ip virtual server):一段代码工作在内核空间,叫IPVS,是真正生效实现调度的代码。IPVS的总体结构主要由IP包处理、负载均衡算法、系统配置与管理三个模块及虚拟服务器与真实服务器链表组成。
  • ipvsadm:另外一段是工作在用户空间,叫ipvsadm,即IPVS管理器,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。

四、LVS技术术语

术语简写 术语含义
Director Server 负载均衡调度器
CIP Client IP,访问客户端的IP地址(客户端的IP地址)
DIP Director Server IP,负载均衡器对应的实际IP地址 (主要用于和内部主机通讯的IP地址 )
VIP Virtual IP,向外部直接面向用户请求,作为用户请求的目标的IP地址 (需在均衡器提供服务的地址)
RIP Real Server IP,后端服务器的IP地址 (提供服务的节点地址)
LB 负载均衡服务器
RS Real Server ,节点服务器 (后端真实的工作服务器)
DS Director Server。指的是前端负载均衡器节点

五、LVS工作模式和原理

NAT模式

1、NAT模式工作原理

在这里插入图片描述

  • 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
  • PREROUTING检查发现数据包的目标IP是本机将数据包送至INPUT链
  • IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
  • POSTROUTING链通过选路,将数据包发送给Real Server
  • Real Server对比发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
  • Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

LVS NAT原理:用户请求LVS到达 director,director将请求的报文的目标IP地址改成后端的 realserver IP 地址,同时将报文的目标端口也改成后端选定的 realserver相应端口,最后将报文发送到realserver,realserver 将数据返给director,director再把数据发送给用户。(两次请求都经过director,所以访问大的话(超过30台),director会成为瓶颈)(NAT为地址转换)

2、NAT特性
  • RIP(后端服务器的IP地址)最好是内网IP
  • RS(节点服务器)的网关必须指向DIP(负载均衡器对应的实际IP地址)。
  • DIP(负载均衡器对应的实际IP地址)和RIP(后端服务器的IP地址)必须在同一个网段内。
  • 请求和回应的报文都必须经过director(负载均衡调度器),director容易成为瓶颈。
  • nat支持端口转发。

DR模式

1、DR模式工作原理

在这里插入图片描述

  • 首先用户用CIP请求VIP
  • 根据上图可以看到,不管是Director Server还是Real Server上都需要配置相同的VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过Director Servrer
  • 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
  • PREROUTING检查发现数据包的目标IP是本机将数据包送至INPUT链
  • IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
  • 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server
  • RS发现请求报文的MAC地址是自己的MAC地址就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
  • 响应报文最终送达至客户端

LVS DR原理:用户请求LVS到达director,director将请求的报文目标MAC地址改成后端的realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(不变),然后Director 将报文发送到realserver,realserver检测到目标IP为自己的本地IP,如果在同一个网段,然后将请求直接返给用户。如果用户跟realserver不在同一个网段,则通过网关返回用户。(此种转发效率最高)


Tunnel模式

1、Tunnel模式工作原理

在这里插入图片描述

  • 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
  • PREROUTING检查发现数据包的目标IP是本机将数据包送至INPUT链
  • IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
  • POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
  • RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
  • 响应报文最终送达至客户端
2、Tunnel模式特性
  • RIP、VIP、DIP全是公网地址。
  • RS的网关不会也不可能指向DIP
  • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
  • 不支持端口映射
  • RS的系统必须支持隧道

LVS TUN原理:跟LVS DR类似,也是改变封装MAC地址,多了一层隧道加密。实施环境复杂,比LVS DR模式效率略低。


六、LVS的调度算法

  • 固定调度算法:rr,wrr,dh,sh
  • 动态调度算法:wlc,lc,lblc,lblcr
  • 固定调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。
  • 动态调度算法:调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。
1、rr:轮询(round robin)

这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。这个调度的缺点是,不管后端服务器的繁忙程度是怎样的,调度器都会讲请求依次发下去。如果A服务器上的请求很快请求完了,而B服务器的请求一直持续着,将会导致B服务器一直很忙,而A很闲,这样便没起到均衡的左右。

2、wrr:加权轮询(weight round robin)

这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

3、dh:目标地址散列调度算法 (destination hash)

简单的说,即将同一类型的请求分配给同一个后端服务器,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中,提高缓存的命中率。

4、sh:源地址散列调度算法(source hash)

将来自同一个ip的请求发给后端的同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session共享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将导致请求分配的不均衡。

5、lc:最少连接数(least-connection)

这个算法会根据后端 RS 的连接数(谁少给谁)来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1。这里问题是无法做到会话保持,即session共享。

6、wlc:加权最少连接数(weight least-connection)

这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派请求。

7、lblc:基于局部性的最少连接调度算法(locality-based least-connection)

将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。

8、lblcr:基于地址的带重复最小连接数调度 (Locality-Based Least-Connection with Replication)

这个用得少,可以略过。


转载至:https://www.cnblogs.com/dswy/p/8418515.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!