LVS的基本概念和调度算法

参考信息

http://essun.blog.51cto.com/721033/1398850   

linux之Load Balancing(LB)   集群基础知识(原创作者:和风细雨)

注:本文在原文的基础上进行了语句的糅合,另附有LVS-NAT实验。文中若有语句不严谨之处,敬请谅解!


http://1343138116.blog.51cto.com/6124664/1682275 

在RHEL6.6环境下进行LVS-NAT实验(Vmware模式)


前篇:LVS英文全称Linux Virtual Server,俗称linu虚拟服务器,是由淘宝章文嵩高级研究员发起的一项自由软件项目,官方站点为http://www.linuxvirtualserver.org/


一、LVS定义

   一般来说,LVS采用三层结构负载调度器、服务器池、共享存储。工作在TCP/IP协议的四层,其转发是依赖于四层协议的特征进行转发的,由于其转发要依赖于协议的特征进行转发,因此需要在内核的TCP/IP协议栈进行过滤筛选。LVS就是两段式的架构设计,在内核空间中工作的是“ipvs”。而在用户空间中工作的是“ipvsadm”,用来定义集群服务规则。与iptables的结构相似,LVS也正好工作在iptables的input链上。

二、LVS组成

   ipvs:为lvs提供服务的内核模块,工作在内核空间 (相当于是框架,通过ipvsadm添加规则,来实现ipvs功能)。

在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能。

   ipvsadm:用于管理集群服务的命令行工具,工作在Linux系统中的用户空间。

三、LVS中每个主机IP地址的定义

VIP:Director用来向外部提供服务的IP地址,也就是DNS通过域名解析到的IP

RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址

DIP:Director用来和RIP进行交互的IP地址

CIP:客户端使用的IP或公网IP

RS:集群节点服务器Real Server

四、LVS的三种转发模式

LVS-NAT: Network address translation(网络地址转换),示意图如下:

wKioL1XEfSWAjgsjAAGO2Qe1lio231.jpg

LVS-DR: Direct routing(直接路由)

LVS-TUN: IP tunneling(IP隧道)

五、LVS的三种转发模式特点

1、LVS-NAT的特性

RS应该使用私有地址

RS的网关必须指向DIP

RIP和DIP必须在同一网段内

请求和响应的报文都得经过Director;在高负载场景中,Director很可能成为系统性能瓶颈

支持端口映射

RS可以使用任意支持集群服务的OS

2、LVS-DR类型的特性

让前端路由将请求发往VIP时,只能是Dirctor上的VIP

RS可以使用私有地址,但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等

RS的网关一定不能指向DIP

RS跟Dirctory要在同一物理网络内(不能由路由器分隔)

请求报文经过Directory,但响应报文一定不能经过Director

不支持端口映射

RS可以使用大多数的操作系统

解决方法

(1)、在前端路由上实现静态MAC地址VIP的绑定

前提:拥有路由器的配置权限

缺点:Directory故障转时,无法更新此绑定

(2)、arptables

前提:在各RS安装arptables程序,并编写arptables规则

缺点:依赖于独特功能的应用程序

(3)、修改Linux内核参数

前提:RS必须是Linux

缺点:适用性差

arp_announce:定义通告模式

arp_ignore:定义收到arp请求的时响应模式,配置专用路由,以使得响应报文首先通过vip所配置的lo上的别名接口。

3、LVS-TUN的特性

RIP、DIP、VIP都得是公网地址

RS的网关不会指向也不可能指向DIP

请求报文经过Directory,但响应报文一定不经过Director

不支持端口映射

RS的OS必须得支持隧道功能

六、LVS的调度算法

LVS默认调度算法是 wlc

1、round robin(轮询)

   原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:不考虑每台服务器的处理能力。

2、weight round robin(加权轮询)

   以权重之间的比例实现在各主机之间进行调度由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

3、source hashing ( 源地址hash实现会话绑定session affinity)

   将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。(它破坏了负载均衡的效果,但它有一个具体的应用)

4、destination hashing(目标地址hash)

   将同样的请求发送给同一个server,一般用户于缓存服务器,简单的说Load Balancing集群后面又加了一层。在Load Balancing与real server之间加了一层缓存服务器(server)。当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1, 这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。

   它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。


注:以上为静态调度算法

    以下为动态调度算法

5、Least Connections(最少连接)

   最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1。当连接中止或超时,其连接数减一。

   在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能。


算法:active*256+inactive,谁的小就转发给谁

6、Weighted Least Connections(加权最少连接)

   加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为 1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给性能相对好的服务器加大权重,即会接收到更多的请求。


算法:(active*256+inactive)/weight,谁的小就转发给谁

7、Shortest Expected Delay Scheduling( 最短期望延迟)

  不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求。


算法:(active+1)*256/weight,谁的小就转发给谁

8、never queue (永不排队)

  在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所以此算法是最短期望延迟的改进。就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行最短期望延迟的运算。

9、Locality-Based Least Connections(基于局部性的最少连接)

  基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于 Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同目标IP地址的请求调度到同一台服务器来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

10、Locality-Based Least Connections with Replication(基于局部性的带复制功能的最少连接)

  基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除以降低复制的程度。

七、Session持久机制

(1)、session绑定:始终将同一个请求者的连接定向至同一个RS(第一次请求时仍由调度方法选择),没有容错能力,有损均衡效果。

(2)、session复制:在RS之间同步session,因此每个RS集群中所有的session对于大规模集群环境不适用。

(3)、session服务器:利用单独部署的服务器来统一管理session。






至此,本文档已经结束,文档中难免有不尽人意之处,希望各位能够给出宝贵的建议,谢谢!



紫禁之巅

2015年8月3日 15:12


你可能感兴趣的:(调度算法,LVS基本概念)