LVS 实现负载均衡原理

162 阅读6分钟

什么是LVS

LVS(Linux Virtual Server)是一个高性能高可用的负载均衡(Load Balancing)和集群(Clustering)解决方案,通常被称为Linux虚拟服务器。它基于Linux内核的IP负载均衡技术,通过控制IP层的转发来实现负载均衡。LVS在Linux内核中实现了三种负载均衡技术:NAT(网络地址转换)、TUN(隧道)和DR(直接路由)

LB Cluster 负载均衡集群分类

硬件

  • F5 Big-IP(F5服务器负载均衡模块)
  • Citrix Netscaler
  • A10 A10

软件

  • lvs:Linux Virtual Server,阿里四层 SLB (Server Load Balance)使用

  • nginx:支持七层调度,阿里七层SLB使用 Tengine

  • haproxy:支持七层调度

  • ats:Apache Traffic Server,yahoo捐助给apache

  • perlbal:Perl 编写

  • pound

基于工作的协议层次划分

SNAT : 让 内网用户 可以访问外网

DNAT: 把内网的服务 共享到公网上(外网用户可以访问 公司内网的服务)

  • ** 传输层(通用**):DNAT 和 DPORT

LVS:

nginx:stream

haproxy:mode tcp

  • 应用层(专用):针对特定协议,常称为 proxy server

http:nginx, httpd, haproxy(mode http), ...

fastcgi:nginx, httpd, ...

负载均衡的会话保持

  • session sticky:同一用户调度固定服务器

Source IP:LVS sh算法(对某一特定服务而言)

Cookie

  • session replication:每台服务器拥有全部session(复制)

session multicast cluster

  • session server:专门的session服务器(server)

Memcached,Redis

LVS集群的工作模式

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT

image.png lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发 (1)RIP(真实服务器)和DIP(代理服务器的内网地址)应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP

(2)请求报文和响应报文都必须经由lvs服务器转发,lvs服务器易于成为系统瓶颈

(3)支持端口映射,可修改请求报文的目标PORT

(4)VS必须是Linux系统,RS可以是任意OS系统

- 缺点:

  • 扩展性有限。当服务器节点增长过多时,负载均衡器可能成为整个系统的瓶颈,因为所有的请求包和应答包都需经过负载均衡器。
  • 当服务器节点过多时,大量的数据包交汇在负载均衡器,可能导致速度变慢。

lvs-dr:操纵封装新的MAC地址(直接路由)

image.png 负载均衡器和RS都使用同一个IP对外服务。但只有负载均衡器对ARP请求进行响应,所有RS对ARP请求保持静默。负载均衡器收到数据包后,根据调度算法找出对应的RS,并修改数据包的目的MAC地址为RS的MAC地址后发送给RS。RS处理完成后,由于IP一致,可以直接将数据返回给客户端。

image.png 优点

  • 数据返回不经过负载均衡器,提高了效率。
  • 负载均衡器只负责调度请求,服务器直接响应,减少了负载均衡器的负担。

缺点

-   依赖于网络设备对ARP的支持和配置。

lvs-tun:隧道模式

image.png 工作原理

请求过程

  • 当客户端发送请求(CIP -> VIP)到LVS调度器(Director)时,调度器会修改这个报文,加上IP隧道两端的IP地址作为新的源和目标地址。
  • 调度器然后将封装后的请求转发给后端被选中的一台真实服务器(Real Server,简称RS)。

RS处理过程

  • RS收到封装后的报文后,首先解封该报文,得到原有的CIP -> VIP请求。
  • RS发现自身的tun接口上配置了VIP,因此接受该数据包并进行处理。

响应过程

  • 请求处理完成后,RS不会将结果重新交给调度器,而是直接返回给客户端。
  • 在RS返回给客户端数据包时,由于使用的是普通网卡接口,根据一般的路由条目,源IP地址将是该网卡接口上的地址(如RIP)。
  • 要让响应数据包的源IP为VIP,RS需要添加一条特殊的路由条目,明确指定该路由的源地址是VIP。

3. 特性与要求

  • 跨网段转发:TUN模式可以跨网段甚至跨机房转发请求,使得集群节点可以跨互联网实现。

  • 配置要求

  • RS的tun接口上需要配置VIP地址,以便接收调度器转发过来的数据包,以及作为响应的报文源IP。

  • RS和调度器的IP地址不需要在同一物理网络中,但RS必须可以和公网通信。

4. 优缺点

  • 优点

  • 可以跨网段转发,实现更大的负载均衡灵活性。

  • 响应数据包不经过调度器,提高了转发效率。

  • 缺点

  • 可能增加跨机房间的流量,提高成本。

  • RS机房上需要绑定VIP,可能会被防火墙视为IP伪造而进行拦截。

5. 应用场景

  • TUN模式通常用于需要跨网段或跨机房实现负载均衡的场景,如缓存服务器组等。

希望以上信息能清晰、全面地解释LVS-TUN隧道模式的工作原理、特性、要求及优缺点。

lvs-fullnat:修改请求报文的源和目标IP

定义与原理

LVS-FULLNAT模式是在NAT(网络地址转换)模式基础上的一种改进,它在数据包的源地址(SNAT)和目标地址(DNAT)转换上进行了额外的处理。

image.png

LVS 调度算法

仅根据算法本身进行调度

静态:

1、RR:roundrobin,轮询,较常用

2、WRR:Weighted RR,加权轮询,较常用 先算总权重 再用自己的 权重去除以 总权重

3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存 缓存

动态: 一个参考值 来确定服务器是否忙 这个值越小 代表服务器 闲 就会优先调度给闲的服务器

主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

1、LC:least connections 适用于长连接应用 最小连接数 不考虑权重

Overhead=activeconns*256+inactiveconns
​

2、WLC:Weighted LC,默认调度方法,较常用 默认调度 加权最小连接数 第一轮不合理 都是 一样的 优先级

Overhead=(activeconns*256+inactiveconns)/weight

3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接 权重小的 空闲的

Overhead=(activeconns+1)*256/weight

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等 检查 后端服务器忙不忙

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等