概述:
在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(networkAddressTranslation)将一
组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAt(Virtual Server via Network Address Translation),大多数商品化的
IP负载均衡调度器产品都是使用此方法。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法
VS/TUN(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隧道协议的要求,但是要求调度器与真实服务
器都有一块网卡连在同一物理网段上。
 
负载调度算法基本有四种:
(1)轮叫(Round Robin)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接
数和系统负载。
(2)加权轮叫(Weighted Round Robin)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。
调度器可以自动询问真实服务器的负载情况,并动态地调整其权值。
(3)最少链接(Least Connections)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能
,采用“最小链接”调度算法可以较好地均衡负载。
(4)加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少连接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大
比例的活动连接负载。调度器可以自动询问真实服务器的负载情况,并动态地调整其权值。

实验环境:Vmware 虚拟机
操作系统:Centos 5.2
实验目的: VS/NAT之轮叫算法(RR)

在本实验中,我使用了局域网中的两台电脑,两台电脑用集线器相连,本机安装了一台Centos 5.2操作系统,另一台安装了两台Centos 5.2操
作系统,为便于操作,在本机上用Putty登陆三台机子,每台机子之间可以互访。
如图:
Linux集群服务--网络地址转换_轮叫
本机作为LVS服务器,要求安装两块网卡。外网eth0:172.16.115.121 内网eth1:192.168.1.1
另两台IP:192.168.1.10和192.168.1.20
当外网访问LVS服务器时,将通过网卡eth1映射到server1与server2,从而交替显示server1与server2的内容,达到轮叫机制的作用。
首先,主机要安装ipvsadm软件包,并且ipvsadm要求内核在2.4.24以后的版本。
 
安装前先要对内核进行软连接,因为ipvsadm在安装的过程中先要去查找/usr/src/linux 这个信息,所以我们要先把内核信息做软连接到
/usr/src/linux。如果不这样做,在安装的过程中会报错。
请输入内容Linux集群服务--网络地址转换_Linux_02
然后我们进行安装:
Linux集群服务--网络地址转换_轮叫_03
 
Linux集群服务--网络地址转换_轮叫_04
 
Linux集群服务--网络地址转换_Linux_05
 
查看是否已经安装成功:
Linux集群服务--网络地址转换_Linux_06
 
下面简单的做一些NAT包的转换和配置,由于逐条输入命令较慢,所以我们建立一个脚本一起执行:
Linux集群服务--网络地址转换_休闲_07
在脚本中输入以下内容:
Linux集群服务--网络地址转换_轮叫_08
--打开包的转发
--清除ipvsadm一系列规则
--两个服务器的报文转发,rr代表轮叫算法,使用80端口
--配置两个web服务器,从172.16.115.121转发到192.168.1.10和192.168.1.20
 
然后我们给脚本附上相应的权限并执行脚本:
Linux集群服务--网络地址转换_地址转换_09
接下来我们配置两个web服务器
修改eth0的IP地址,使其和主机的eth1在同一个网段:
Linux集群服务--网络地址转换_休闲_10
 
Linux集群服务--网络地址转换_地址转换_11
保存退出
 
然后配置网关:
Linux集群服务--网络地址转换_地址转换_12
 
Linux集群服务--网络地址转换_轮叫_13
 
重启网卡:
Linux集群服务--网络地址转换_集群_14
 
然后我们建一个web页面:
Linux集群服务--网络地址转换_集群_15
 
写入如下内容:
Linux集群服务--网络地址转换_集群_16
 
重启apache服务:
Linux集群服务--网络地址转换_集群_17
同样,我们在web2上配置其IP为:192.168.1.20 网关:192.168.1.1
为了便于区别,我们在web2上的web页面设成和web1不一样的内容
Linux集群服务--网络地址转换_休闲_18
 
Linux集群服务--网络地址转换_轮叫_19
 
同样重启网卡和apache服务:
service network restart
service httpd restart
然后我们打开浏览器,输入172.16.115.121
出现访问页面:
Linux集群服务--网络地址转换_Linux_20
然后刷新,有出现不同的访问页面:
 
Linux集群服务--网络地址转换_集群_21
 
 
到此,整个实验已基本完成,在实际应用中两个web服务器可以放置相同的web页面,它们可以通过nfs文件共享进行连接,当外界访问LVS服务
器的时候就会出现相同的web页面,从而达到了Linux负载均衡的目的。