LVS(一)调度原理以及调度算法

mac2022-06-30  124

LVS调度原理以及调度算法

在了解LVS调度原理之前,首先的了解一下IPTABLES防火墙工作原理。

一.IPTABLES 工作原理

  IPTABLES其实不是真正的防火墙,它实际上由两个组件netfilter 和 iptables 组成,netfilter 才是真正的防火墙,位于内核空间,而iptables是位于用户空间的一个命令行工具,我们使用这个工具制定规则,然后netfilter执行iptables工具制定的规则。

        Netfilter是Linux引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。IP层的五个HOOK点(链、钩子)的如下

1. NF_IP_PRE_ROUTING

刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验和等检测), 目的地址转换在此点进行。

2. NF_IP_LOCAL_IN

经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行。

3. NF_IP_FORWARD

要转发的包通过此检测点,FORWARD包过滤在此点进行。

4. NF_IP_POST_ROUTING

所有马上便要通过网络设备出去的包通过此检测点,内置的原地址转换功能(包括地址伪装)在此点进行。

5. NF_IP_LOCAL_OUT

本机进程发出的包通过此检测点,OUTPUT包过滤在此点进行。       如上图所示,客户端在访问服务器的web服务时,首先经过prerouting链,然后接着对数据包进行路由,判断访问的目标是否为本机,

1.目标为本机

    则通过input链到达用户空间的web服务中,若web服务确实有个进程监听请求数据包的请求的端口,就开始响应服务,负责则拒绝,接着,当web服务要响应客户端请求时,web服务会将响应数据报文发送至output链,postrouting链,最后响应至客户端。整个过程如上图蓝线所示。

2.目标不是本机

   则通过forward链,postrouting链然后发送至其他主机。路由之后的过程如上图红线所示。

二 LVS转发原理

   首先在Linux2.4.23之后的版本内核中才内置了LVS,查看Linux内核版本的命令如下

  命令:cat /proc/version  命令:uname -a

      LVS和IPTABLES一样,是也是两段式的,也由两个部分组成,ipvsadm和ipvs,ipvsadm工作在用户空间上书写规则,然后发送给工作在内核上的ipvs IP负载均衡软件,ipvs监控在INPUT链上。   当用户发送请求通过prerouting到达input链时,ipvs根据ipvsadm发送的规则,一旦发现用户请求的时一个集群服务,会强行修改请求报文,将请求发送到postrouting链上,然后由post_routing发送至其他主机,如上图红线所示。   由上面描述可以看出,LVS的机制和IPTABLES的机制可以说是冲突的,所以,他们不能一起使用。

三 LVS调度算法

  LVS集群的负载调度主要是由工作在内核当中的IPVS IP负载均衡软件负责进行调度的,IPVS在内核中的负载均衡调度是以连接为粒度的,在内核中的连接调度算法上,IPVS已实现了以下八种调度算法.

1.轮叫调度(Round-Robin Scheduling)

这种算法就是以轮叫的方式依次将请求调度不同的服务器,算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。

2.加权轮叫调度(Weighted Round-Robin Scheduling)

这种算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的 权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服 务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。

3.最小连接调度(Least-Connection Scheduling)

这种算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务 器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。当各个服务器有相同的处理性能时,最小连接调度算法能把负载变化大的请求分布平滑到各个服务器上,所有处理时间比较长的请求不可能被发送到同一台服 务器上。但是,当各个服务器的处理能力不同时,该算法并不理想,因为TCP连接处理请求后会进入TIME_WAIT状态,TCP的TIME_WAIT一般 为2分钟,此时连接还占用服务器的资源,所以会出现这样情形,性能高的服务器已处理所收到的连接,连接处于TIME_WAIT状态,而性能低的服务器已经 忙于处理所收到的连接,还不断地收到新的连接请求。

4.加权最小连接调度(Weighted Least-Connection Scheduling)

这种算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权 值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。

5.基于局部性的最少链接(Locality-Based Least Connections Scheduling)

这种算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)

这种算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载, 将请求发送到该服务器;若服务器超载;则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该 服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7.目标地址散列调度(Destination Hashing Scheduling)

此算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8.源地址散列调度(Source Hashing Scheduling)

此算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法 的相同。它的算法流程与目标地址散列调度算法的基本相似。

    

转载于:https://www.cnblogs.com/Matchman/p/9052486.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)