通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 技术文章 >> 电脑知识 >> 文章正文
用Linux下的LVS软件实现Linux集群
责任编辑:酷酷鱼   更新日期:2006-12-2
 

本文介绍了Linux下的cluster软件LVS,并举例介绍一个Linux下的cluster(集群)的安装和实现的详细过程。

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

在Linux上最常见的、也可能是运用最广泛的cluster方案就是LVS(Linux Virtual Server),很高兴LVS也是一个中国人创建和开发的开放源码项目。LVS自1998年开始,发展到现在已经是一个比较成熟的技术项目了。有许多比较著名网站和组织都在使用LVS架设的cluster,比如:www.linux.com、sourceforge.net、www.real.com等。

下面就开始介绍一下,笔者是如何利用LVS来架设一组cluster来对外提供Apache和FTP服务的。

安装操作系统

笔者选用的是Red Hat 9.0作为些cluster的director机器和所有real server机器的操作系统。RH的安装过程从略,笔者根据实际需要,只安装了少数的包。对于成批安装Linux,建议试试Kickstart来进入批理安装。

编译支持LVS的内核

LVS对Linux的kernel进行了修改和增加,所以要重新编译 linux kernel。我们先从http://www.linuxvirtualserver.org下载到LVS的内核补丁,对原有内核源代码进行更新,然后重新编译Linux的kernel。

下载LVS的内核补丁时要注意补丁版本要和kernel版本相一致,对于RH9.0,它的Linux核心版本是2.4.20,所以对应内核补丁应该是http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz

另外还有一个补丁是用来解决某些情况下ARP协议不能正常工作问题的,从http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff下载。

把上面下载的两个补丁复制到/usr/src目录下,然后执行以下命令:

  
  cd /usr/src
  gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
  cd /usr/src/linux
  patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
  patch -p1 < ../hidden-2.4.20pre10-1.diff
  
  make mrproper
  make menuconfig
  

执行make menuconfig时,我们将进入一个图形化的界面,在其中可以对Linux Kernel进行详细设置。与LVS相关的kernel选项都在“Networking options”中,进入“Networking options”,可以查看到“IP: Virtual Server Configuration”选项,将其它所有的子选项都选上:

  
  <M> virtual server support (EXPERIMENTAL) 
  [*] IP virtual server debugging 
  (12) IPVS connection table size (the Nth power of 2) 
  --- IPVS scheduler 
  <M> round-robin scheduling 
  <M> weighted round-robin scheduling 
  <M> least-connection scheduling scheduling 
  <M> weighted least-connection scheduling 
  <M> locality-based least-connection scheduling 
  <M> locality-based least-connection with replication scheduling 
  <M> destination hashing scheduling 
  <M> source hashing scheduling 
  <M> shortest expected delay scheduling 
  <M> never queue scheduling 
  --- IPVS application helper 
  <M> FTP protocol helper
  

另外,“Networking options”中的“IP: Netfilter Configuration"中的选项的所有子项,除了以下两项不要选之外,其它全可以选:

  
  < > ipchains (2.2-style) support 
  < > ipfwadm (2.0-style) support
  

还有,“Networking options”中还有一些关于网络的选项,要注意按自己的需要去选择:

  
  <*> Packet socket 
  [ ] Packet socket: mmapped IO 
  <*> Netlink device emulation 
  [*] Network packet filtering (replaces ipchains) 
  [*] Network packet filtering debugging 
  [*] Socket Filtering 
  <*> Unix domain sockets 
  [*] TCP/IP networking 
  [*] IP: multicasting 
  [*] IP: advanced router 
  [*] IP: policy routing 
  [ ] IP: use netfilter MARK value as routing key 
  [ ] IP: fast network address translation
  <M> IP: tunneling

对于kernel的其它选项,你可以根据需要进行选择。kernel的配置是一项很需要经验、细心和耐心的工作,不当的配置可能会导致编译过程中出现错误或者是新的kernel不能驱动原有的设备等问题。

退出保存,然后继续执行以下命令:

  
  make dep
  make clean
  make bzImage
  make modules
  make modules_install
  

以上各步可能需要一点时间,如果出错请重新检查你的kernel配置,如果没有出现任何错误就继续执行以下命令:

  
  depmod -a
  cp arch/i386/boot/bzImage /boot/vmlinuz-lvs
  cp System.map /boot/System.map-lvs
  
  cd /boot
  rm System.map
  ln -s System.map-lvs System.map
  

然后修改你的lilo.conf使用新的kernel启动,比如在lilo.conf中以增加下几行以增加关于新的支持LVS的kernel的启动项:

 

 
  image=/boot/vmlinuz-lvs
  label=lvs
  read-only
  root=/dev/sda1
  

注:如果使用Grub做启动引导程序的,请自行做对应的修改,以增加关于新的支持LVS的kernel的启动项。重新启动Linux,选择lvs项进入Linux。

安装ipvsadm

如果正常启动了,就开始安装IP虚拟服务器软件ipvsadm。因为我们用的是RH,所以我们直接下载RPM包进行安装。RPM包从以下地址下载:http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm

用以下命令来安装ipvsadm:

 

 
  rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
  rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
  

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

LVS已实现了以下八种调度算法:

1.轮叫调度(Round-Robin Scheduling)

2.加权轮叫调度(Weighted Round-Robin Scheduling)

3.最小连接调度(Least-Connection Scheduling)

4.加权最小连接调度(Weighted Least-Connection Scheduling)

5.基于局部性的最少链接(Locality-Based Least Connections Scheduling)

6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)

7.目标地址散列调度(Destination Hashing Scheduling)

8.源地址散列调度(Source Hashing Scheduling)

注:如果想了解关于以上几点的技术细节,LVS的主页查询。了解了LVS的三个要点之后,接下来我们来配置一个采用Direct Routing包转发方式、加权最小连接调度算法的cluster。

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

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

设置好本机的IP:192.168.2.1

然后执行以下命令:

  ifconfig" lo:0 192.168.2.254 netmask 255.255.255.255 broadcast
  192.168.2.254 up
  route add -host 192.168.2.254 dev lo:0
  echo 1 > /proc/sys/net/ipv4/ip_forward
  echo 1 >/proc/sys/net/ipv4/conf/all/hidden
  
  ipvsadm -C
  ipvsadm -A -t 192.168.2.254:80 -s wlc
  ipvsadm -a -t 192.168.2.254:80 -r 192.168.2.2 -g
  ipvsadm -a -t 192.168.2.254:80 -r 192.168.2.3 -g
  ......
  ipvsadm -A -t 192.168.2.254:21 -s wlc
  ipvsadm -a -t 192.168.2.254:21 -r 192.168.2.2 -g
  ipvsadm -a -t 192.168.2.254:21 -r 192.168.2.3 -g
  ......

  

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

对于第一台real server(RS1),设置好本机的IP:192.168.2.2 然后执行以下命令:

  
  ifconfig lo:0 192.168.2.254 netmask 255.255.255.255 broadcast
  192.168.2.254 up
  route add -host 192.168.2.254 dev lo:0

  

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

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

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月10日发布 每日计算机病毒及木马播报
    普通文章 mobi域名卖出61万美元天价 专家提醒切忌跟风
    普通文章 腾讯推出数字证书服务 网购支付添新"保镖
    普通文章 波音787控制系统发现安全问题
    普通文章 微软08年1月安全公告仅两个内容
    普通文章 杀毒厂商转攻移动安全市场
    普通文章 CP Secure使灰名单将垃圾邮件挥之而去
    普通文章 破坏应用程序 U盘成病毒藏身地
    普通文章 保护您的数据 六招实战EFS加密文件系统
    热门文章
    普通文章提醒:“求职信”病毒1月6日发作
    普通文章两条“蠕虫”蠢蠢欲动
    普通文章5“网银大盗”狂盗储户14万 武汉男子被判10年
    普通文章“木马事件”终告结束 英语学习网重获新生
    普通文章搜索引擎不再喜欢新米,并非只是CN米
    普通文章蠕虫"威金"新变种 "小熊猫"屠宰多个计算机系统
    普通文章元旦上网谨防“Real蛀虫” 通过视频文件传播
    普通文章入侵工具Knark的分析及防范
    普通文章认清本质 计算机病毒防治常遇问题
    普通文章饶过现代Anti-Rookit工具的内核模块扫描(ZT)
    精彩专题