Linux 负载均衡

在调度器的实现技术中,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的版本,其中作为虚拟主机的机器

 

 

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。如果不这么做,在安装的过程中会报错,如图

Linux 负载均衡 - suchalin - 为了更好的生活而奋斗!

软连接方法: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服务

Linux 负载均衡 - suchalin - 为了更好的生活而奋斗!

Linux 负载均衡 - suchalin - 为了更好的生活而奋斗!

在客户端多次浏览10.1.1.200(前端的虚拟主机ip),然后在虚拟主机上输入ipvsadm,会发现已经转发了4次

这个是我在访问前后的效果

 

 

现在我在访问同样一个10.1.1.200,也就是我的虚拟主机时,会发现是不同的网页

 

为了能看出效果,所以我弄的是两个不同的网页.在实际中,应该两个完全一样的主页,这样,虽然客户访问的同一个IP 看到同一个主页,实际上是两台不同的服务器,这样就达到了负载均衡的效果.然后在下端应用上HA(心跳连接),这样一个高可用的集群就算部署好了.

 

你可能感兴趣的:(linux,负载均衡,HA)