小橘子大叔

  • 1. NAT模式(Network Address Translation,网络地址转换)
  • 2. DR模式(Direct Routing,直接路由)
  • 3. TUN模式(IP Tunneling,隧道模式)
  • 4. FullNAT模式
  • 总结
  • 调度算法
  • 静态算法
  • 动态方法 较小的overhead将被调度
  • 首页
  • nginx
  • Linux
  • docker
  • Kubernetes
  • Prometheus
  • 生活
  • 文章归档
  • 友情链接
  • Instagram
  • TikTok
  • X
欢迎随时联系本人
  • Mail

谈谈LVS的四种模式与十种算法

  • luxy
  • 2024-10-10
  • 3

LVS(Linux Virtual Server)是一种负载均衡解决方案,通过将网络流量分发到多个后端服务器上,提高服务的性能和可用性。


1. NAT模式(Network Address Translation,网络地址转换)

在LVS-NAT模式下,负载均衡是通过网络地址转换实现的。LVS调度器作为请求的中介,接收来自客户端的请求,将目标地址转换为后端服务器的真实IP地址(RIP),并通过自己将响应流量发送回客户端。

工作原理:

  • 客户端到LVS调度器: 客户端将请求发送到LVS调度器的虚拟IP(VIP),此时数据包的目标IP是VIP。
  • LVS调度器的NAT操作: LVS调度器接收到请求后,根据负载均衡算法(如轮询、最小连接数等)选择一台后端服务器。然后,它通过NAT将数据包的目标IP地址从VIP修改为所选后端服务器的RIP。
  • 后端服务器响应: 后端服务器接收到修改后的数据包,处理请求并生成响应数据包,目标IP为LVS调度器。
  • 返回客户端: LVS调度器再次进行NAT转换,将响应数据包的源IP地址从RIP改为VIP,然后将响应数据发送回客户端。

特点:

  • LVS调度器在整个请求和响应过程中都参与,因此其负载较高。
  • 后端服务器无需配置VIP,所有数据包都由LVS调度器处理。
  • 后端服务器和LVS调度器可以位于不同的网络段。

适用场景:

  • 适用于小规模网络,因为LVS调度器需要处理所有请求和响应数据包,容易成为性能瓶颈。

2. DR模式(Direct Routing,直接路由)

LVS默认的模式,在LVS-DR模式下,请求流量通过直接路由从LVS调度器转发到后端服务器,而响应流量则不再经过LVS调度器,后端服务器直接将响应发送给客户端。这种方式降低了LVS调度器的负载。

工作原理:

  • 客户端到LVS调度器: 客户端将请求发送到VIP,LVS调度器接收到数据包。
  • 修改目标MAC地址: LVS调度器根据负载均衡算法选择一台后端服务器,只修改数据包的目标MAC地址为所选后端服务器的MAC地址,保留IP头不变(目标IP仍为VIP)。然后将数据包直接发送给后端服务器。
  • 后端服务器响应: 后端服务器接收到数据包后,处理请求。由于目标IP仍为VIP,但数据包通过直接路由到达后端服务器,因此后端服务器以VIP作为源IP,直接将响应数据包发送给客户端,不再经过LVS调度器。

特点:

  • 仅在请求阶段经过LVS调度器,响应流量不再经过,减轻了调度器的负载。
  • LVS调度器和后端服务器必须在同一网络段,因为调度器通过修改MAC地址直接发送数据包,无法跨越网络段。
  • 后端服务器需要配置VIP,但必须禁止响应针对VIP的ARP请求(通过配置arp_ignore和arp_announce),以避免IP冲突。

适用场景:

  • 适用于高并发、高性能的场景,因为响应数据包不经过LVS调度器,极大地降低了其负载。

3. TUN模式(IP Tunneling,隧道模式)

在LVS-TUN模式下,不修改请求报文的IP首部 (源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源P是DIP,目标IP是RIP) ,将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目
标IP是CIP)

工作原理:

  • 客户端到LVS调度器: 客户端请求发送到VIP,LVS调度器接收到请求数据包。
  • IP隧道转发: LVS调度器根据负载均衡算法选择一台后端服务器,使用IP隧道技术(IPIP隧道)将数据包封装并转发给后端服务器。数据包的目标IP仍为VIP,但通过隧道传输。
  • 后端服务器解封装处理: 后端服务器接收到封装的数据包,解封装并处理请求。由于目标IP仍为VIP,后端服务器识别这是发给它的请求。
  • 直接响应客户端: 后端服务器以VIP作为源IP地址,直接将响应数据包发送给客户端,响应流量不再经过LVS调度器。

特点:

  • 与DR模式类似,响应流量不经过LVS调度器,显著降低了调度器的负载。
  • LVS调度器和后端服务器可以位于不同的网络段,因为请求通过IP隧道转发,可以跨越网络段。
  • 后端服务器需要配置VIP。与DR模式不同的是,后端服务器可以部署在不同地理位置。

适用场景:

  • 适用于跨地域、高延迟的网络环境,例如服务器分布在多个不同的地理位置。

4. FullNAT模式

FullNAT模式通过网络地址转换实现负载均衡,类似于NAT模式,但允许后端服务器和LVS调度器位于不同的网络段,并支持源IP和目标IP的双向地址转换。

工作原理:

  • 客户端到LVS调度器: 客户端发送请求到VIP,LVS调度器接收到请求。
  • 双向NAT转换: LVS调度器将请求的目标IP从VIP转换为后端服务器的RIP,同时也修改数据包的源IP地址。这意味着LVS调度器对数据包的源和目标IP地址都进行转换。
  • 后端服务器处理请求: 后端服务器接收到修改后的请求,处理后生成响应数据包,目标IP为LVS调度器。
  • LVS调度器返回响应: LVS调度器将后端服务器发来的响应数据包的源IP地址改为VIP,目标IP改为客户端的IP地址,然后将响应发送回客户端。

特点:

  • 支持跨网络段的负载均衡,后端服务器和LVS调度器可以位于不同的网络环境。
  • LVS调度器对数据包进行双向地址转换,客户端无法获取后端服务器的真实IP。
  • LVS调度器必须处理所有的请求和响应数据包,因而负载较高。

适用场景:

  • 适用于后端服务器和LVS调度器需要跨越不同网络段或网络环境的场景,适合大型分布式网络。

总结

  • NAT模式: LVS调度器负责所有请求和响应的转发,负载较高,但配置简单。支持端口映射
  • DR模式: 仅处理请求流量,响应流量不经过LVS调度器。要求LVS调度器和后端服务器在同一网络段,性能较好。不支持端口映射
  • TUN模式: 通过IP隧道(IP+IP)转发请求流量,允许LVS调度器和后端服务器跨越网络段。不支持端口映射
  • FullNAT模式: 通过双向NAT实现负载均衡,支持跨网络段,但增加了LVS调度器的负载。支持端口映射

调度算法

静态算法

1.轮询调度

轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

2.加权轮询调度

加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

3.目标地址哈希调度(DH)

第一次轮询调度到RS,后续将发往同一目标地址的请求始终转发至第一次挑中的RS,如web缓存

4.源地址哈希调度(SH)

实现session stricky,将来自同一ip地址的请求始终发往第一次挑中的RS,实现会话绑定

动态方法 较小的overhead将被调度

1.最小连接调度

最少连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。
overhead = activeconns*256+inactiveconns(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

2.加权最少连接调度

加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。overhead = (activeconns*256+inactiveconns)/weight

3.最短期望延迟算法

最短的期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。解决了WLC中如果初始调度时,activeconns和inactiveconns都是0,算出来的overhead结果为0,可能调度到权重低的服务器上去的问题
overhead = (activeconns+1)*256/weight

6.最少队列调度

最少队列调度(Never Queue 简称’NQ’)算法,第一轮均匀分配,后续SED。解决SED中可能导致一直把请求调度到同一服务器上的问题

4.基于局部的最少连接

基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)动态的DH算法,该算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。

5.带复制的基于局部性的最少连接

带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

© 2025 小橘子大叔
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}