Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5352174
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2006-03-15 11:21:58

使用Linux实现负载均衡
常见的负载平衡方法

1、DNS负载平衡的方法

RR-DNS(Round-Robin Domain Name System) 轮流排程的方式是:在DNS服务器中,可以为多个不同的IP地址配置同一个名称,当客户端查询这个名字时将在解析这个名称时得到其中的一个地址。因此,对于同一个名字,不同的客户端会得到不同的地址,他们也就连结不同地址上的Web服务器,从而达到负载平衡的目的。例如 : 当客户端连结 有能力依序将名称解析到 202.1.1.1 、 202.1.1.2 、202.1.1.3和 202.1.1.4等不同的网络地址,而这些是提供相同服务的主机,让客户端不自觉有不同



2、服务端应用层和IP层的负载平衡方法

EDDIE、Reverse-Proxy和SWEB 都使用属于应用层负载平衡的方法将到达的HTTP请求转发到不同的Web 服务器,取得结果后,再返回给用户。Berkeley的MagicRouter、Cisco的LocalDirector、Altheon 的ACEDirector和F5的Big/IP等都是使用网络地址转换NAT的方法,目前在Linux 上Cluster的方式也是用这种方法达成的。


3、集群( Cluster )Server 达成负载平衡的方法

集群能达到的机制

a. 分身服务 将两个以上的服务器连贯成服务器群,每台提供相同服务

b. 不疑有他 客户端感觉只有一台机器在提供服务

c. 备份能力 也就是当其中有某台服务器出问题时,不会有服务中断的情形

d. 可扩充性 当客户数量增加时,可在不中止服务的情形下扩充服务器

e. 负载平衡 将客户端的要求科学的分配给服务器,不致让主机负载过量


在Linux Cluster 实现负载平衡的软件 ----LVS( Linux Virtual Server )

Linux上集群的达成是实施 Linux Virtual Server ( LVS ) 的架设

LVS可称为Linux虚拟服务器,它具备高可用性、可扩充性和科学性的数学运算,而这些也就是集群系统 (Cluster System)的应用。

高可用性High-Availability (HA) 不允许有服务中断的情形发生时。由两台以上的计算机通过一定方式互相监听,当主要服务器主机出现问题而无预警的停止服务时,备份服务器能够自动立即接替工作,使客户端感觉不出有异。
可扩充性 (Scalability) 应用在web 、ftp server上为多。当用户连结一个地址,但实际上是有若干台服务器在提供服务。而当服务请求达到饱和时,还可以很容易地再添加新的节点而不用停掉整个cluster,实现所谓的"热插拔",这也就是Cluster中的一个概念-Scalability (易扩展性)。而且,cluster还会查询真实节点的情况,当某台真实节点没有响应时,就不再把任务分配到那里,直到这台节点恢复正常。
科学的数学运算 (Scientific) 用于效能、图像处理等计算
Cluster已经发展多年,也比较成熟了。之前需要专业的软/硬设备才能实现。所以只有少数公司才有能力用的起。现在Linux上的LVS就可以让你在PC上架设Cluster的解决方案,使更多的人有机会构建自己的cluster。
LVS提供了三种转发机制(Traffic Forward Mechanism)、四种分配方法(Load-balancing Methods),以下详述

三转发机制(Traffic Forward Mechanism)

三种不同的转发机制分别将LVS主机建构成

NAT虚拟主机 Virtual Server via Network Address Translation
IP Tunneling虚拟主机 Virtual Server via IP Tunneling
Direct Routing虚拟主机 Virtual Server via Direct Routing
负载平衡主机可称为Virtual Server ( 虚拟主机 )、Load Balancer (负载平衡器)、Linux Director (导引主机),以下简称为LVS主机



NAT虚拟主机 Virtual Server via Network Address Translation ( VS/NAT )


由于IPv4中IP地址空间的日益不足和安全方面的原因,很多网络使用Internet上未被分配的私有IP地址(10.0.0.0/255.0.0.0、172.16.0.0/255.128.0.0 和192.168.0.0/255.255.0.0)。当内部网络中的主机要连结Internet或被Internet连结时,就需要采用网络地址转换(Network Address Translation, 以下简称NAT),可以用NAT方法将不同IP地址的并行网络服务变成在一个IP 地址上的一个虚拟服务。

 

                 VS/NAT的体系结构

 

在一组服务器前有一个LVS主机,用户通过Virtual IP Address(即LVS主机的外部地址)连结服务时,请求到达LVS主机,LVS主机以负载平衡方法从一组真实服务器选出一个,将目标地址Virtual IP Address重新指向内部实际提供服务服务器的地址。同时,LVS主机记录这个连接,当这个连接的真实服务器的响应经过LVS主机时,LVS主机将来源地址和来源端口改?Virtual IP Address和相应的埠,再把响应发给用户。当连接终止或逾时,LVS主机将这个连接从纪录中删除。这样,用户所看到的只是在Virtual IP Address 上提供的服务。


IP Tunneling 虚拟主机 Virtual Server via IP Tunneling (VS/TUN)


在VS/NAT的集群系统中,请求和应答的封包都需要通过LVS主机,当实际服务器的数量超过20时,LVS主机将成为集群系统的新瓶颈。利用IP隧道技术将请求封包封装转发给后端服务器,响应封包能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择一台服务器,将请求封包封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。



VS/TUN的体系结构

如上图所示,各个服务器将 VIP地址配置在自己的IP隧道设备上。

VS/TUN的连接分配和管理与VS/NAT中的一样,只是它的封包转发方法不同。负载平衡主机根据各个服务器的负载情况,动态地选择一台服务器,将请求封包封装在另一个IP封包中,再将封装后的IP封包转发给选出的服务器;那台服务器收到封包后,先将封包解封获得原来目标地址为VIP的封包,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应封包直接返回给客户。


Direct Routing 虚拟主机 Virtual Server via Direct Routing (VS/DR)


这种IP层负载平衡方法与IBM的NetDispatcher中的方法类似。它的体系结构如下图所示:




VS/DR的体系结构

LVS主机和服务器组都必须在同一网络区域中,如通过交换机或者高速的HUB相连。VIP地址为LVS主机和服务器组共享,LVS主机配置的VIP地址是对外可连结的,用于接收虚拟服务的请求封包;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址?VIP的网络请求。

VS/DR的连接分配和管理与VS/NAT和VS/TUN中的一样,它的封包转发方法又有不同,将封包直接路由给目标服务器。在VS/DR中,LVS主机根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP封包,而是将资料封包的MAC地址改为选出服务器的MAC地址,再将修改后的资料封包在与服务器组的局域网上发送;因为资料封包的MAC地址是选出的服务器,所以服务器肯定可以收到该封包,发现VIP地址被配置在本地的网络设备上,所以就处理这个请求,然后根据路由表将响应封包直接返回给客户。

三种转发机制的优缺点

归纳在下表中:



● Virtual Server via NAT

VS/NAT的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在LVS主机上,服务器组可以用私有的IP地址。缺点是它的扩充能力有限,当服务器结点数目升到20时,LVS主机本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应封包都需要通过负载LVS主机。在Pentium 166主机上测得重写封包的平均延时为60us,假设TCP封包的平均长度为536 Bytes,则LVS主机的最大吞吐量为8.93 MBytes/s。再假设每台服务器的吞吐量为600KBytes/s,这样一个LVS主机可以带动16台服务器。

● Virtual Server via IP Tunneling

在VS/TUN的集群系统中,负载LVS主机只将请求分配到不同的实际服务器,实际服务器将应答的资料直接返回给用户。这样,负载LVS主机就可以处理巨量的请求,而不会成为系统的瓶颈。即使负载LVS主机只有100Mbps的全双工网卡,虚拟服务器的最大吞吐量可以达到几Gbps。所以,VS/TUN可以极大地增加负载LVS主机分配的服务器数量,它可以用来构建高性能超级服务器。VS/TUN技术对服务器的要求是所有的服务器必须支持"IP Tunneling"或者"IP Encapsulation"协议。目前,VS/TUN 的后端服务器主要运行Linux操作系统。因为"IP Tunneling"正成为各个操作系统的标准协议,所以VS/TUN也会适用运行其它操作系统的后端服务器。

● Virtual Server via Direct Routing

同VS/TUN一样,VS/DRLVS主机只处理客户到服务器端的连接,响应资料可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。同VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载LVS主机与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备或者设备别名不作ARP 响应。

四种分配方法(Load-balancing Methods)

不同的分配方法建构LVS主机成四种不同的排程

负载平衡排程是以连接为单位的。在HTTP协议(nowait)中,每个对象从WEB服务器上获取都需要建立一个TCP连接,同一用户的不同请求会被分配到不同的服务器上,所以这种连接的分配完全避免了用户连结的突发性引起的负载不平衡。目前有以下4种排程算法:

轮流排程 Round-Robin Scheduling (RRS)

轮流排程算法是假设所有服务器处理性能均相同,依次将请求分配不同的服务器,算法简单,但不适用于服务器组中处理性能不一致的情况。

加权轮流排程 Weighted Round-Robin Scheduling (WRRS)

为此使用加权轮流排程算法,用相应的加权值表示服务器的处理性能,将请求数目按加权值的比例分配到各服务器。加权值高的服务器先收到连接,加权值高的服务器比加权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。

最小连结数排程 Least-Connection Scheduling (LCS)

最小连结数排程是需要记录各个服务器已建立TCP连接的数目,把新的连接请求发送当前连接数最小的服务器。当各个服务器有相同的处理性能时,最小连结数排程能把负载变化大的请求平均分布到各个服务器上,所有处理时间比较长的请求不可能被发送到同一台服务器上。

加权最小连接数排程 Weighted Least-Connection Scheduling (WLCS)

但是,当各个服务器的处理能力不同时,该算法并不理想,因为TCP连接处理请求后会进入TIME_WAIT状态,TCP的TIME_WAIT 一般为2分钟,此时连接还占用服务器的资源,所以会出现这样情形,性能高的服务器已处理所收到的连接,连接处于TIME_WAIT状态,而性能低的服务器既要忙于处理所收到的连接,还要收到新的连接请求。加权最小连接分配是最小连接分配的超集,各个服务器用相应的权值表示其处理性能。假设每台服务器的权值为Wi(i=1..n),TCP连接数目为 Ti(i=1..n),依次选Ti/Wi为最小者的服务器为下一个分配到服务的服务器。

四种分配方法(Load-balancing Methods)

表示如下

名称 描述

Round robin (RRS)
将工作平均的分配到服务器 (用于实际服务主机性能一致)

Least-connections (LCS)
向较少连接的服务器分配较多的工作(IPVS 表存储了所有的活动的连接。用于实际服务主机性能一致。)

Weighted round robin (WRRS)
向较大容量的服务器分配较多的工作。可以根据负载信息动态的向上或向下调整。 (用于实际服务主机性能不一致时)

Weighted least-connections (WLC)
考虑它们的容量向较少连接的服务器分配较多的工作。容量通过用户指定的砝码来说明,可以根据装载信息动态的向上或向下调整。(用于实际服务主机性能不一致时)
阅读(711) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~