一、lVS基本介绍

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。也是国人章文嵩博士发起的一个开源项目,现在LVS已经是Linux内核标准的一部分。

该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。

利用LVS技术可以实现高性能,高可压缩的网络服务,例如www服务,FTP服务,MAIL服务等。

二、LVS的体系架构

使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array 表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

1、LVS的体系架构如图

Linux四种LVS工作模型,十种调度算法_Server

2、LVS集群分为三层结构:

Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server 上,而Director 的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器上。同时,在Director Server上还要安装对Real Server服务的监控模块 Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时加入。

Server Array层:服务器池(server pool)是一组真正执行clinet请求的服务器,一般是web服务器;除了web,还有FTP、MAIL、DNS等,每个Real Server之间通过高速的LAN或分布在各地的wan相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。

Shared Storage层:共享存储(shared stord)它为server pool提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务。

从整个LVS结构可以看出,Director Server是整个LVS的核心,对于Real Server,可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

3、LVS相关术语
DS:Director Server。指的是前端负载均衡器节点
RS:Real Server。后端真实的工作服务器
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
DIP:Director Server IP,主要用于和内部主机通讯的IP地址
RIP:Real Server IP,后端服务器的IP地址

CIP:Client IP,访问客户端的IP地址

三、LVS集群

1、十种调度算法

(1)静态

  • rr 轮循调度 (Round-Robin Scheduling)
    均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
  • wrr 加权轮循调度 (Weighted Round-Robin Scheduling)
    调度器可以自动问询真实服务器的负载情况,并动态调整权值
  • sh 源地址散列调度 (Source Hashing Scheduling)
    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
  • dh 目的地址散列调度 (Destination Hashing Scheduling)
    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

(2)动态

  • lc 最小连接调度 (Least-Connection Scheduling)
    动态地将网络请求调度到已建立的连接数最少的服务器上
    如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
  • wlc 加权最小连接调度 (Weighted Least-Connection Scheduling)
    调度器可以自动问询真实服务器的负载情况,并动态调整权值
    带权重的谁不干活就给谁分配,机器配置好的权重高
  • sed 最短预期延时调度 (Shortest Expected Delay Scheduling)
    不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
  • nq 不排队调度 (Never Queue Scheduling)
    无需队列,如果有realserver的连接数为0就直接分配过去
  • lblc 基于局部性的最少连接调度 (Locality-Based Least Connections Scheduling)
    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
  • lblcr 带复制的基于局部性的最少连接调度 (Locality-Based Least Connections with Replication Scheduling)
    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

2、三种IP负载均衡技术

(1)IPVS/NAT

Linux四种LVS工作模型,十种调度算法_服务器_02

IPVS/NAT模式的基本原理

用户请求LVS到达director,director将请求的报文的目的IP改为RIP,同时将报文的目标端口也改为realserver的相应端口,最后将报文发送到realserver上,realserver将数据返回给director,director再把数据发送给用户

IPVS/NAT模式优缺点

优点:

  • 容易配置,容易理解,容易管理的工作模式
  • 节省外网IP资源,LVS-NAT工作方式将系统架构封装在局域网中,只需要LVS有一个外网地址或外网地址映射就可实现访问
  • 系统架构相对封闭,内网环境下防火墙的设置要求不会太高,容易进行物理服务器的运维
  • LVS/NAT工作模式下的RS服务器可以是任何操作系统,只要支持TCP/IP协议即可

缺点:

  • LVS-NAT中,负载均衡调度器作为转发点,当RS服务器数量变多时,调度器将会负载,转发点也是瓶颈点

(2)IPVS/DR

网络结构图

Linux四种LVS工作模型,十种调度算法_Server_03

IPVS/DR模式的基本原理

LVS节点接收到请求报文后,会改写报文的数据链路层格式。将VIP MAC写成RIP的Mac,但是网络层和传输层报文不会改写,然后重新回发给交换机。这里就涉及一个问题,现在RIP和 IP的对应关系的错误的,这个数据报文到了交换机后,由于这种错位的关系,是不能进行三层交换的,只能进行二层交换(一旦进行IP交换,数据报文的验证就会出错,被丢弃)。所以LVS-DR方式要求Real Server和LVS节点必须在同一个局域网内,或者这样说更确切:LVS节点需要找到一个二层链路,将改写了Mac地址的报文发送给Real Server,而不能进行三层交换的校验。

简单来说就是CIP发送一个PV请求给VIP,VIP收到这个请求后会跟LVS设置的LB算法选择一个LB比较合理的realserver,然后将此请求的package的MAC地址修改为realserver的MAC地址;VIP会把这个包广播到当前这个LAN里面,所以,要提前保证VIP和所有的realserver在同一个网段

IPVS/DR 模式的优缺点

优点

  • 解决了LVS-NAT工作模式中的转发瓶颈问题,能够支撑规模更大的负载均衡场
  • 比较耗费网外IP资源,机房的外网IP资源都是有限的,如果在正式生产环境中确实存在这个问题,可以采用LVS-NAT和LVS-DR混合使用的方式来缓解

缺点

  • 配置工作较LVS-NAT方式稍微麻烦一点,您至少需要了解LVS-DR模式的基本工作方式才能更好的指导自己进行LVS-DR模式的配置和运行过程中问题的解决
  • 由于LVS-DR模式的报文改写规则,导致LVS节点和Real Server节点必须在一个网段,因为二层交换是没法跨子网的。但是这个问题针对大多数系统架构方案来说,实际上并没有本质限制

(3)IPVS/TUN

LVS TUN原理详解图

Linux四种LVS工作模型,十种调度算法_Server_04

LVS TUN原理:用户请求LVS到达director,director通过IP-TUN加密技术将请求报文的包封装到一个新的IP包里面,目的IP为VIP(不变),然后director将报文发送到realserver,realserver基于IP-TUN解密,然后解析出来包的目的为VIP,检测网卡是否绑定了VIP,绑定了就处理这个包,如果在同一个网段,将请求直接返回给用户,否则通过网关返回给用户;如果没有绑定VIP就直接丢掉这个包。

  • 负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。

缺点

  • 这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议;

(4) LVS/FULLNAT模式

Linux四种LVS工作模型,十种调度算法_Server_05


 参考链接