Internet的飞速发展给网络带宽和服务器带来了巨大的挑战,很多网络服务因为访问次数爆炸式的增长而不堪重负,不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量。如何建立可伸缩并且能够实现负载均衡的可靠性网路服务来满足不断增长的负载需求已成为迫在眉睫的问题。Linux集群技术也就应用而生可以以低廉的成本,很好的满足人们的需要。

集群的基本概念

   集群技术其实就是一组互相独立的服务器在网路中表现为单一的系统,并以单一系统的模式加以管理,为客户工作提供可靠性的服务。集群中的每台服务器成为一个节点。

集群的分类
 
按照侧重点不同集群可以分为如下三类:

1、High Availability即高可用集群,简称HA

  运行在两个或多个节点上,目的是在系统出现某些故障的情况下,仍能继续对外提供服务,以减少服务中断时间。HA比较著名的有 heartbeatul、tramokey、keepalived4。

2、LoadBanlancing即负载均衡集群,简称LB

  LB是提供和节点个数成正比的负载能力,具有高可用性的特点,因此比较适合有较大访问量的Web服务。常见的LB有Hardware即硬件级别:f5,IBM,Citrix和Software即软件级别:LVS(Linux Virtual Server)、Haproxy

3、High Performance即高性能集群,简称HP,常见的有bowerful

  在这三种集群类型中,这里主要介绍负载均衡集群,而负载均衡集群中比较有代表性的就是LVS了。

LVS的基本概念

   LVS是Linux Virtual Server的简称即运行在Linux平台上的虚拟服务器,是实现负载均衡集群的开源软件,它在内核级别中实现。通过LVS达到的负载均衡技术和Linux操作系统实现一个高可用的Linux服务器集群,它具有以最少的成本实现最优的性能,具有良好的可靠性,可拓展性和可操作性。

LVS的体系架构

  LVS的服务器集群系统主要有三部分组成:前端的虚拟服务器也就起调度作用的Director,中间的服务器也就是真正实现服务的RealServer以及最底层的共享存储层,在用户看来所有的应用都是透明的,只是在使用一个虚拟的服务器提供高性能的服务。

LVS的体系架构如下图:

   Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度也就是Director Server组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上.
 
    Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
 
   Shared Storage层:是是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上有磁盘阵列组成,为内容提供一致性,网路上则有NFS共享来实现。
LVS的类型及其特性
 
  LVS NAT:地址转换

      1.所有的集群节点必须要在同一个IP网络中

      2.RIP通常使用私有地址

      3.RealServer的网关必须指向DIP

      4.支持端口映射

      5任何类型的操作系统可以作为realserver

      6.进出的数据包都必须经过directo

   LVS DR: 直接路由

      1.所有的集群节点必须要在同一个物理网络中,因为要通过mac地址进行转换

      2.RIP可以是私有地址或是公网地址,但不支持端口映射

      3.进出的请求不经过director

      4.Realserver的网关一定不能执行director

      5.能支持 更多的RealServer

    LVS TUN:隧道 

      1.所有的集群点可以任意配置不要求在同一网路,或同一子网内

      2.RealServer的IP地址必须是公网地址

      3.director仅处理入站强求

      4.realServer直接响应给客户端

      5.不支持端口映射

LVS的调度算法

    由于负载调度器也就是Director是根据各个服务器的负载情况,动态的选择一台RealServer来响应用户的需求,那么动态的选择RealServer的实现方法就是LVS的调度算法,调度算法分为静态算法和动态算法两类。

 静态算法

   Round Robin即轮询调度(rr)

     调度器通过轮询调度算法将外部请求按顺序1:1的分配到集群中的每个RealServer上

   Weighted Round Robin即加权轮询调度(wrr)

   该算法是根据RealServer的不同处理能力来调度用户的不同访问请求,可以根据RealServer的性能设置不同的调度权值,从而合理的利用服务器的资源。

   Destination hashing 目标地址哈希(dh)

     只适用于realserver为缓存服务器的环境中 提高缓存命中率,会损害负载均衡的效果

   Source hashing   源地址哈希(sh)
 
动态算法

  List Conaction即最少连接(LC)

    该算法动态的将网站请求调度到已建立链接数最少的服务器上。链接有活动链接(active)和非活动连接(inactive)链接数的计算方法:active*256+inactive

  Weighted List Conaction即加权最少链接(WLC)

  “加权最少链接调度”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。链接数的计算方法:(active+1)*256/weight 其中weight表示权重

   LBLC:基于本地的最少连接

    LBLCR:带复制的基于本地的最少连接

 ipvsadm的安装及其命令选项详解

 ipvsadm是运行于用户空间、用来与ipvs交互的命令行工具,它的作用表现在:

     1、定义在Director上进行dispatching的服务(service),以及哪此服务器(server)用来提供此服务;

     2、为每台同时提供某一种服务的服务器定义其权重(即概据服务器性能确定的其承担负载的能力);

 具体安装方法有源码编译和rpm包安装,这里就不再赘述了。
下面是ipvsadm的命令及其选项的含义
命令选项
含义
-A --add-service
在内核的虚拟服务器列表中添加一条新的虚拟 IP 记录。也就是增加一台新的虚拟服务器。虚拟 IP 也就是虚拟服务器的 IP 地址。
-E --edit-service
编辑内核虚拟服务器列表中的一条虚拟服务器记录
-D --delete-service
删除内核虚拟服务器列表中的一条虚拟服务器记录
-C --clear
清除内核虚拟服务器列表中的所有记录
-R --restore
恢复虚拟服务器规则
-S --save
保存虚拟服务器规则,输出为 -R 选项可读的格式
-a --add-server
在内核虚拟服务器列表的一条记录里添加一条新的 Real Server 记录。也就是在一个虚拟服务器中增加一台新的 Real Server
-e --edit-server
编辑一条虚拟服务器记录中的某条 Real Server 记录
-d --delete-server
删除一条虚拟服务器记录中的某条 Real Server 记录
-L|-l --list
显示内核中虚拟服务器列表
-Z --zero
虚拟服务器列表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp
设置连接超时值
-t
说明虚拟服务器提供的是 tcp 的服务,此选项后面跟如下格式: [VIP:port] or [RIP:port]
-u
说明虚拟服务器提供的是 udp 的服务,此选项后面跟如下格式: [VIP:port] or [RIP:port]
-f fwmark
说明是经过 iptables 标记过的服务类型
-s scheduler
使用的调度算法。有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh 默认的调度算法是: wlc
-p [timeout]
在某个 Real Server 上持续的服务时间。也就是说来自同一个用户的多次请求,将被同一个 Real Server 处理。此参数一般用于有动态请求的操作中, timeout 的默认值为 300 秒。
-r
指定 Real Server IP 地址,此选项后面跟如下格式: [real-server-ip:port]
-g --gatewaying
指定 LVS 的工作模式为直接路由模式(此模式是 LVS 默认工作模式)
-m --masquerading
指定 LVS 的工作模式为 NAT 模式
-w --weight weight
指定 Real Server 的权值
-c --connection
显示 LVS 目前的连接 如: ipvsadm -L -c
-L --timeout

显示tcp tcpfin udp timeout 如:ipvsadm -L --timeout

-L --daemon
显示同步守护进程状态
-L --stats
显示统计信息
-L --rate
显示速率信息
-L --sort
对虚拟服务器和真实服务器排序输出