Chinaunix首页 | 论坛 | 博客
  • 博客访问: 591429
  • 博文数量: 40
  • 博客积分: 7274
  • 博客等级: 少将
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-20 15:00
个人简介

Expired

文章分类
文章存档

2011年(1)

2008年(3)

2007年(17)

2006年(10)

2005年(9)

分类: 系统运维

2005-12-23 08:52:22

本文展示如何使用LVS(Linux Virtial Server)来实现实用的WWW负载平衡集群系统,测试环境为虚拟机,适合没有真实环境的场合。

集群以及用LVS实现Linux下的集群(一)


一、Cluster 简介

  在各种网络服务普遍应用的今天,随网络速度的提高以及用户的增加,在一些繁忙的场合,单凭一台机器已经无法就能应付所有的网络请求了。为了解决这个问 题,许多用户就采 用一组cluster(集群)来代替单一的机器。cluster可以将多台计算机连接起来协同运作以对外提供各种服务,比如Apache、FTP、 Mail等。

集群系统(Cluster)主要解决下面几个问题:

高可靠性(HA)
利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务;

高性能计算(HP)
即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等;

负载平衡(LB)
即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。

  在实际应用中,最常见的情况是利用集群解决负载平衡问题,比如用于提供WWW服务。在这里主要展示如何使用LVS(Linux Virtial Server)来实现实用的WWW负载平衡集群系统。

二、LVS简介
  
  在Linux上最常见的、也可能是运用最广泛的cluster方案就是LVS(Linux Virtual Server),LVS是国人章文嵩博士发起和领导的优秀的集群解决方案,LVS自1998年开始,发展到现在已经是一个比较成熟的技术项目了。有许多比 较著名网站和组织都在使用 LVS架设的cluster,比如:、sourceforge.net、等。许多商业的集群产品,比 如RedHat的Piranha,TurboLinux公司的Turbo Cluster等,都是基于LVS的核心代码的。在现实的应用中,LVS得到了大量的部署,请参考http: //。
  
三、安装操作系统

  由于没有真实的实验环境,我们选用虚拟机来模拟真实计算机。考虑到虚拟机对内存占用比较厉害,而笔者的计算机配置才P4 2.4G + 512M DDR,且要虚拟3台计算机。故选用LFS作为些cluster的director机器和所有real server机器的操作系统。

编译支持LVS的内核

  LVS对Linux的kernel进行了修改和增加,所以要重新编译 linux kernel。我们先从下载到LVS的内核补丁,对原有内核源代码进行更新,然后重 新编译Linux的kernel。2.6的内核已经把lvs编译到内核中去了。不用再打补丁,直接用就可以了。

还有一个额外的补丁,是用来解决某些情况下ARP协议不能正常工作问题的。
下载地址:~ja/hidden-2.6.12-1.diff

执行make menuconfig时,与LVS相关的kernel选项都在“Device Driver”->“Networking options”中,进入“Networking options”,可以查看到“IP: Virtual Server Configuration”选项,将其它所有的子选项都选上。

安装IPVS管理工具ipvsadm
下载地址: /software/kernel-2.6/ipvsadm-1.24.tar.gz
编译安装: # make && make install

安装完成后,执行ipvsadm命令,如果有如下信息出现则说明安装成功了。
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

至此,LVS的安装算是完成了一半。就是说,现在的Linux已经具备了实现LVS的能力了,接下来的问题就是如果使用LVS来构建一组cluster 了。要想实现一组cluster,我们就要使用ipvsadm工具进行配置,而在我们开始使用ipvsadm进行配置之前,我们需要了解一些基本的LVS 的知识,特别是以下三个要点:LVS的结构、LVS的三种包转发方式、LVS的八种调度算法。只有了解了这些知识以后,我们才能理该如何使用 ipvsadm来进行配置。下面简单介绍LVS的这三个要点。

四、LVS 相关知识

1. LVS的结构

  LVS方式的cluster从结构上可分为两部分:前端的负载均衡器(称之为director)和后端的真实服务器(称之为real server)。cluster前端的director将来自外界的请求调度到cluster后端不同的real server去执行。real server负责真正的提供各种应用服务,比如:Web、FTP、Mail等服务。real server的数量可以根据实际需求进行增加、减少。

2. LVS的三种包转发方式

  LVS提供了三种包转发方式:NAT(网络地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)。不同的转发模式决定了不同的cluster的网络结构,下面对三种转发方式分别介始:

NAT(网络地址映射)

  NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户 的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。

IP Tunneling(IP隧道)

  director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通 信,并且所有服务器必须支持IP隧道协议。

Direct Routing(直接路由)

  与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。

3. LVS的均衡调度方法(Load-balancing Methods)

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

轮叫调度(Round-Robin Scheduling)
加权轮叫调度(Weighted Round-Robin Scheduling)
最小连接调度(Least-Connection Scheduling)
加权最小连接调度(Weighted Least-Connection Scheduling)

轮叫调度 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为最小者的服务器为下一个分配到服务的服务器。

了解了LVS的三个要点之后,接下来我们来配置一个采用Direct Routing包转发方式、加权最小连接调度算法的cluster。

五、LVS配置实例
  
我们知道Direct Routing包转发方式是通过改写请求报文的MAC地址,将请求发送到real server。前台的director机器只需要接收和调度外界的请求,而不需要负责返回这些请求的反馈结果。director机器和real server都有一块网卡连在同一物理网段上。

1. 网络拓扑结构。
  
LVS figure-1
  如上图所示,为测试方便,5台机器处于同一网段内,通过一交换机或者集线器相连。实际的应用中,最好能够将虚拟服务器vs和真实服务器rs1, rs2,rs3置于于不同的网段上,即提高了性能,也加强了整个集群系统的安全性。
  

2. 服务器的软硬件配置
  首先说明,虽然本文的测试环境中用的是3台相同配置的服务器,但LVS并不要求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载情况, 调整负载分配策略,充分利用集群环境中的每一台服务器。这4台服务器中,vs作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的 rs1,rs2,rs3,然后由rs1,rs2,rs3分别处理。client为客户端测试机器,可以为任意操作系统。
  
六、构建负载均衡集群

director机器上需要进行如下配置:

设置好本机的IP:192.168.1.1然后执行以下命令:

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/default/send_redirects

ifconfig dummy0 up
ifconfig dummy0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10
route add -host 192.168.1.10 dev dummy0

ipvsadm -C
ipvsadm -A -t 192.168.1.10:80 -s wlc
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.11 -g
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.22 -g
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.33 -g

real server机器上需要进行如下配置:

对于第一台real server(RS1),设置好本机的IP:192.168.1.11 然后执行以下命令:
ifconfig dummy0 up
ifconfig dummy0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10
route add -host 192.168.1.10 dev dummy0
echo 1 > /proc/sys/net/ipv4/conf/dummy0/hidden

对于其它real server:RS2、RS3 ...,做相类的设定。

完成以上设置后,所有对192.168.1.10的80端口的访问都会通过director机器分配到后面的real server上去,而real server的处理后结果将直接反馈给客户。

七、LVS的测试

  好了,经过了上面的配置步骤,现在可以测试LVS了,在 Client机器上(192.168.1.2)访问 。为了方便区分,分别为RS1、RS2、RS3设定不同的主页,这样当客户机访问时,可以发觉显示的页面在三个真 实服务器之间交替地出现。
在虚拟服务器VS上,运行 # watch -n 0 ipvsadm 也可以看到连接请求被均衡地分配给了RS1-RS3。

八、小结

至此,我们完成了一个cluster的例子。通过这个例子,相信您也可以轻松地利用Linux架设起一组 cluster来。其实在cluster架设到这里之后,还并不能达到正式应用的要求,实际应用中还有一些问题需要解决,比如要安装监视软件,监视集群的 运作,要能及时发现real server的故障并对应调整real server的列表。还有后台real server节点的数据一致性等问题。这些在一些商用的cluster软件产品中就得到了很好的解决,而网络也有一些非商用的软件,比如mon就是这样的 系统资源监控程序,可以监控网络服务可用性、服务器问题等,最重要的是mon提供了一个框架,用户可以自行定义和扩展。这些内容请参阅其它文章。

阅读(1828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~