在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术,它们的大致原理如下
1) Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
2)Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
3)Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。
针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法,这里我只介绍前四种,因为后面的基本不常用:
1)轮叫(Round Robin)
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2)加权轮叫(Weighted Round Robin)
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3)最少链接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
4)加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
 
我在这里做的实验采用的基于VS/NAT,轮叫机制,这样是因为我的两台服务器是完全一样的性能,所以采用轮叫的方法.如果在公司里,要根据不同的情况选择不同的部署方案,要看实际的需要和设备的实际情况来考虑.
 
同样我还是采用三台虚拟机,里面还是Linux AS5的版本,其中作为虚拟主机的机器要做双ip,一个内网,一个外网
我的拓扑图
1) 下载ipvsadm软件包,下载地址:[url]http://www.linuxvirtualserver.org/[/url] 
      我下载的是ipvsadm-1.24.tar.gz
2)正常的步骤应该是先编译内核,因为ipvsadm要求内核在2.4.24以后的版本,为了省事,我直接用的是AS5,它的内核是2.6.18(可以使用uname -an察看系统内核信息)
3)软件包下载完成后,就要编译和安装ipvsadm了。
   先要对内核进行软连接,因为ipvsadm在安装的过程中先要去查找/usr/src/linux 这个信息,所以我们要先把内核信息做软连接到/usr/src/linux。如果不这么做,在安装的过程中会报错,如图

   软连接方法:ln -s /usr/src/kernels/2.6.18-53.el5-i686 /usr/src/linux
4)包的解压 安装
   tar -zxvf ipvsadm-1.24
   cd ipvsadm-1.24
   make all
   make install
   安装完成后 可以察看版本信息 ipvsadm --version
   pvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.1)
5) 配置LVS
   在虚拟主机中启用转发功能
   echo "1">/proc/sys/net/ipv4/ip_forward    (因为虚拟主机在服务前段主要是负责ip的转发的,所以这项要启动)
   清除ipvsadm表
   ipvsadm -C  
   安装LVS服务
   ipvsadm -A -t 10.1.1.200:80 -s rr
   增加第一台服务器
   ipvsadm -a -t 10.1.1.200:80 -r 192.168.1.100:80 -m -w 1
   增加第二台服务器
   ipvsadm -a -t 10.1.1.200:80 -r 192.168.1.200:80 -m -w 1
   注意-w 后的是1而不是l
6) 配置服务器端
   在192.168.1.100和192.168.1.200里分别将网关设置为192.168.1.254,并启动WEB服务(192.168.1.254是虚拟主机的内网IP)
 
7)测试
    我在客户机上分别建立了两个主页,并启动WEB服务
   

        在客户端多次浏览10.1.1.200(前端的虚拟主机ip),然后在虚拟主机上输入ipvsadm,会发现已经转发了4次
这个是我在访问前后的效果
现在我在访问同样一个10.1.1.200,也就是我的虚拟主机时,会发现是不同的网页
为了能看出效果,所以我弄的是两个不同的网页.在实际中,应该两个完全一样的主页,这样,虽然客户访问的同一个IP 看到同一个主页,实际上是两台不同的服务器,这样就达到了负载均衡的效果.然后在下端应用上HA(心跳连接),这样一个高可用的集群就算部署好了.