介绍

  • LB集群原理:当用户的请求过来时:会直接分发到Director Server,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上,为了保证用户请求数据一致,需要共享存储。
  • LVS(Linux Virtual Server)Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,并且已经是 Linux 内 核标准的一部分。
  • LVS架构从逻辑上可分为调度层、Server集群层和共享存储。
  • 官方网是 http://www.linuxvirtualserver.org

    LVS组成

  • ipvs(ip virtual server):工作在内核空间,是真正生效实现调度的代码。

  • ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

    相关术语

  • DS:Directory Server,前端负载均衡节点

  • RS:Real Server,后端真实工作服务器
  • VIP:用户请求目标的IP地址
  • DIP:内部主机通讯的IP地址
  • RIP:后端服务器的IP地址
  • CIP:客户端的IP地址

    工作模型

    建议配合官方文档一起看

  • NAT

    当用户访问服务器集群提供的服务时,发往虚拟IP地址的请求数据包(负载均衡器的外部IP地址)到达负载均衡器。负载 均衡器检查数据包的目标地址和端口号。如果根据虚拟服务器规则表匹配虚拟服务器服务,则通过调度算法从集群中选择 真实服务器,并将连接添加到记录已建立连接的哈希表中。然后,将目标地址和数据包的端口重写为所选服务器的目标地 址和端口,并将数据包转发到服务器。当传入数据包属于此连接并且可以在哈希表中找到所选服务器时,将重写该数据包 并将其转发到所选服务器。当回复数据包返回时,负载均衡器将数据包的源地址和端口重写为虚拟服务的源地址和端口。 连接终止或超时后,连接记录将在哈希表中删除。

  • DR

    此请求调度方法类似于IBM的NetDispatcher中实现的方法。虚拟IP地址由真实服务器和负载均衡器共享。负载均衡器的 接口也配置了虚拟IP地址,用于接受请求数据包,并直接将数据包路由到选定的服务器。所有真实服务器的非arp别名接 口都配置了虚拟IP地址,或者将发往虚拟IP地址的数据包重定向到本地套接字,以便真实服务器可以在本地处理数据包。 负载均衡器和真实服务器必须通过HUB/Switch物理连接其中一个接口,负载均衡器只是将数据帧的MAC地址更改为所选 服务器的MAC地址,然后在LAN上重新传输。这就是负载均衡器和每个服务器必须通过同一个LAN进行连接的原因。

  • TUN

    在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的 数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响 应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请 求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及 端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通 过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务 器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后 直接给客户端主机响应数据。

  • Full-NAT

    调度算法

  • 轮询调度:这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设 所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理 能力,非常均衡地分发下去

  • 加权轮询调度:这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务 器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多
  • 目标地址hash:根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载, 将请求发送到该服务器,否则返回空。
  • 源地址hash:源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是 可用的且未超载,将请求发送到该服务器,否则返回空。
  • 最少链接:这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1
  • 加权最少链接:这个算法比 lc 多了一个权重的概念而已
  • 最短延迟调度:在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来 实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒 置空闲服务器一直处于无连接状态。
  • NQ永不排队/最少队列调度:无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在 SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考 虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务 器的压力。
  • 基于局部性的最少链接:基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP 地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在, 或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务 器。
  • 带复制的基于局部性最少链接:带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的 不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该 算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务 器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加 入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删 除,以降低复制的程度