一.基础介绍

  
  LVS是Linux虚拟服务(Linux Virtual Server)的简称,是一个虚拟的服务器集群系统,是国内最早的一批自由软件项目,由章文嵩博士发起。现在LVS项目已经被Linux内核收录,成为Linux表针内核的一个重要组成部分。
  随着互联网大潮的不断发展,纵向拓展的高额成本和逐渐降低的性能提升不足以满足用户的正常访问,因此横向拓展便成为主要的发展方向。通过使用LVS提供的负载均衡技术和Linux操作系统进而实现一个高性能,高可用的服务器集群,它具有着良好的可靠性,可拓展性和可操作性,从而能够以较低廉的成本价格来提供更好的性能提升。
  LVS项目自从1998年提出开始,随机不断的发展,现在已经成为了一个相当成熟的技术项目。可以利用LVS技术来实现高度的可伸缩性和高可用性的网络服务;有效的可管理性提供了便捷的异地管理主机;价格的有效性实现了整个系统的经济性和成本的可控性。

  
  

二.LVS的结构

  
  LVS构建的集群系统大致可分为三个部分组成:前端的负载均衡层,中间的服务器集群层和最底层的共享数据层。负载调度器能够无缝隙的将网络请求调度到后端的真实提供服务的服务器上,从而使得服务器集群的结构是透明的,用户在访问整个集群的服务时就像是在访问一台高性能,高可用性的真实服务器一样。客户端的程序不会受到服务器集群的修改而受到影响,服务器集群的可伸缩性在于可以通过向集群中加入或者删除节点来实现,通过对应的节点故障检测和系统重置可以实现高度的可用性。
  
  
  LVS体系图例
理解LVS工作原理
  
  
LVS各层次的具体划分
  负载均衡层:
    处于整个集群的最前端,由一台或者多台调度器构成,LVS模块部署在调度器上,调度器根据既定的算法来实现将网络请求调度到不同后端服务器,完成对应的功能。
  
  服务器集群层:
    由一组实际运行着应用服务的服务器构成,后端服务器支持的服务包括,web服务,邮件服务,FTP服务,DNS服务等一个或者多个,每个服务器之间可以通过LAN或者更大范围的WAN相连,在实际的应用场景中,调取服务器也可以作为应用服务器提供服务。
  
  共享数据层:
    向服务器集群中的所有real server提供共享存储空间和内容一致性的存储区域。一般是由磁盘阵列组成,提供数据的一致性。也可以由NFS提供。目前来说磁盘阵列更为适合,NFS受网络影响较大,不太稳定。

注意:调度器在整个LVS体修中最为关键,是整个系统的核心部分。目前来说调度器系统仅仅支持Linux,内核2.6之后已经无需设置就原生支持LVS,但是reasl server的系统并不受限制,大多数常见的系统均可作为应用服务器提供服务。
  
  

三.负载均衡技术与LVS调度机制

  
  当前负载均衡技术有很多实现方案,例如基于DNS域名依次轮流解析、基于客户端调度访问、基于应用层系统负载的调度,还有基于IP地址的调度等,相比较而言IP负载均衡技术更为成熟和效率。LVS的IP负载均衡技术是依赖于ipvs内核模块来实现的,ipvs是LVS集群系统的核心软件,它的主要作用是:安装在调度器上,同时在调度器上虚拟出一个IP地址(这个地址可以正常访问互联网),用户必须通过这个虚拟的IP地址访问集群服务。这个虚拟IP一般称为LVS的VIP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中根据不同的调度算法计算选取一个服务节点响应用户的请求。
  
常用的调度机制
  
  VS/NAT机制(Virtual Server via Network Address Translation)
  通过网络地址转换技术。当用户的请求报文发送到调度器时,调度器重写请求报文的目标地址为调度器通过算法得出的后端real server的IP地址,同时请求报文的目标端口号也会被重写为后端服务器提供服务的端口号,之后将重新构建的报文分派给后端的真实服务器;真实服务器的在返回数据报文给用户时,响应报文在通过调度器时,调度器会再次将报文的源地址和源端口重写为虚拟IP地址和端口,再返回给客户,完成整个负载调度过程。
理解LVS工作原理
  多目标的DNAT(iptables);它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;
  
注意:
    (1) RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;
    (2) 请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;
    (3) 支持端口映射;
    (4) RS可以使用任意操作系统;
    (5) RS的RIP和Director的DIP必须在同一IP网络;
  
  VS/TUN机制(Virtual Server via IP Tunneling)
  采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。采用IP隧道技术实现LVS,它的调度方法与NAT方式一样,但是TUN的报文转发方式不同,TUN方式中,调度器使用IP隧道技术将用户的请求转发到某个real server上,这个real server可以直接通过网络响应用户的请求,不必经过调度器再次调度,因此调度器和real server的地域限制不再存在,可以与调度器在同一网段,也可以在不同的网络中。因此,在TUN中调度器仅仅负责处理用户的报文请求,而不必处理响应报文,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
理解LVS工作原理
  
注意:
  TUN不修改请求报文的ip首部,而是通过在原有的ip首部(cip<-->vip)之外,再封装一个ip首部&(dip<-->rip);
    (1) RIP, DIP, VIP全得是公网地址;
    (2) RS的网关的不能指向DIP;
    (3) 请求报文必须经由director调度,但响应报文必须不能经由director;
    (4) 不支持端口映射;
    (5) RS的OS必须支持隧道功能;
  
  
  VS/DR(Virtual Server via Direct Routing)
  通过直接路由技术构建,调度和管理与之前两个相同,但是报文的转发方式不同,DR模型通过修改请求报文的MAC地址,将请求发送到real server上,real server在完成请求后直接将响应回应给用户,减少了IP隧道的成本,也不必要求必须支持隧道协议;但是要求调度器和real server都有一块网卡在同一物理网络中。同样DR模型也可以极大地 提高集群系统的伸缩性。
理解LVS工作原理
  
注意:
  (1) 保证前端路由器将目标IP为VIP的请求报文发送给director;
    解决方案:
    静态绑定
    arptables
    修改RS主机内核的参数
  (2) RS的RIP可以使用私有地址;但也可以使用公网地址;
  (3) RS跟Director必须在同一物理网络中 ;
  (4) 请求报文经由Director调度,但响应报文一定不能经由Director;
  (5) 不支持端口映射;
  (6) RS可以大多数OS;
  (7) RS的网关不能指向DIP;
  

四.调度算法

静态方法:仅根据算法本身进行调度;
  RR:round robin,轮叫
  “轮叫”调度也叫作“1:1”调度,调度器通过“轮叫”调度算法将外部用户请求顺序按照顺序1:1的分配到集群中的每个real server上,这种算法平等的对待每一台real server,不考虑不同机器的性能差异与系统当前的负载情况。
  WRR:weighted rr, 加权轮叫
  加权轮叫算法是根据real server的不同的处理性能来调度访问请求,可以对每台real server设置不同的权重值,对于性能好的机器可以设置较高的去权重值,而对于性能较弱的机器,设置较低的权重值,这样可以保证性能强的机器能够分配到较多的用户请求,性能较差的机器分配较少的用户请求,合理的利用现有的资源,同时,调度器还可以自动查询real server的负载情况,动态的进行权重来进行合理的分配资源。
  SH: source hash, 实现session保持的机制;将来自于同一个IP的请求始终调度至同一RS;
  “源地址散列“调度算法根据用户请求的来源地址,作为散列键(Hash key)从静态分配的散列表内找出相对应的服务器,若被找出的服务器是可用且未超载,则调度器将请求发送到这台服务器否则返回空。
  DH:destination hash, 将对同一个目标的请求始终发往同一个RS;
  “目标地址散列”调度算法,调度器根据请求的目标IP地址,作为散列键从静态分配的散列表中找出对应的服务器,若被找出的服务器是可用且未超载,则将请求发送到这台服务器。
  
动态方法:根据算法及各RS的当前负载状态进行调度;
    Overhead=当前负载状态
  LC:Least Connection 最少连接数
    Overhead=Active256+Inactive
  “最少连接数”调度算法动态的将网络请求调度到已经建立的连接数最少服务器上,假设集群中的服务器都具有相近的运算性能,那么使用“最小连接数”调度算法可以很好的去均衡集群的负载。
  WLC: Weighted LC 加权最少连接
    Overhead=(Active
256+Inactive)/weight
  “加权最少连接”调度算法是“最少连接”算法的进一步优化,每个处理节点可以设置不同的权重值来表示其不同的处理性能,网络管理人员可以动态调整这些权值。默认值是1.加权最小连接调度算法在调度时候尽可能的去调度服务节点与权重值成正向比例。
  SED: Shortest Expection Delay 最短期望延迟
    Overhead=(Active+1)*256/weight
  NQ:Never Queue 永不排队
  “永不排队”调度算法在负载较低时,会将请求直接分配到空闲的服务器之上,不会进行额外的算法调度,当整个集群负载较高时,则会进行轮叫。
    SED算法的改进;
  LBLC:Locality-Based LC,即为动态的DH算法;
    正向代理情形下的cache server调度;
  “基于局部的最少连接”调度算法,本质上是为了实现基于目标IP地址的负载均衡。这个算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器可用且未超载,那么进行调度;假如服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
  LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法;
  "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,应用与LBLC相同,不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

五.LVS适用环境与安装使用

  
适用环境
  调度器目前支持Linuxhe FreeBSD
  支持的TCP:HTTP,HTTPS,FTP,SMTP,POP3,IMAP4,PROXY,LDAP,SSMTP
  支持的UDP:DNS,NTP,ICP,视频和音频流播放协议。
  
  LVS对应real server没有限制,real server可以运行在所有的支持TCP/IP的操作系统之上。
  
管理软件ipvsadm与常见配置选项

    yum install ipvsadm -y

  管理集群服务
  ipvsadm -A|E -t|u|f service-address [-s scheduler]
  ipvsadm -D -t|u|f service-address
  
  service-address:
    tcp: -t ip:port
    udp: -u ip:port
    fwm: -f mark
  
  -s scheculer:
    默认为wlc
  
  管理集群服务中的RS
  ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
  ipvsadm -d -t|u|f service-address -r server-address
  
  server-address:
  ip[:port]
  
  lvs-type:
  -g: gateway, dr
  -i: ipip, tun
  -m: masquerade, nat
  
  清空和查看:
  ipvsadm -C
  ipvsadm -L|l [options]
    -n: numeric,基于数字格式显示地址和端口;
    -c: connection,显示ipvs连接;
    --stats:统计数据
    --rate: 速率
    --exact: 精确值
  
  保存和重载:
  ipvsadm -R
  ipvsadm -S [-n]

  置零计数器:
  ipvsadm -Z [-t|u|f service-address]
  
  注释:
    -A 添加一个新的集群服务;
    -E 修改一个己有的集群服务;
    -D 删除指定的集群服务;
    -a 向指定的集群服务中添加RS及属性;
    -e 修改RS属性;
    -t 指定为tcp协议;
    -u 指定为udp协议;
    -f 指定防火墙标记码,通常用于将两个或以上的服务绑定为一个服务进行处理时使用;
    -s 调度方法,默认为wlc;
    -w 指定权重,默认为1;
    -p timeout persistent connection, 持久连接超时时长;
    -g Gateway, DR模型;
    -i ipip, TUN模型;
    -m masquerade, NAT模型;
    -S 保存ipvsadm设定的规则策略,默认保存在/etc/sysconfig/ipvsadm中;
    -R 载入己保存的规则策略,默认加载/etc/sysconfig/ipvsadm;
    -C 清除所有集群服务;
    -Z 清除所有记数器;
    -L 显示当前己有集群服务,能通过相应的options查看不同状态信息;