Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174526
  • 博文数量: 76
  • 博客积分: 3560
  • 博客等级: 中校
  • 技术积分: 860
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-17 13:02
文章存档

2011年(2)

2010年(41)

2009年(33)

我的朋友

分类: LINUX

2009-04-29 09:24:26

LVS集群技术基础及配置详解
CU网友:jerrywjl
第一部分: LVS集群的基本概念与说明
a.Linux Virtual Server基本概念:
负载均衡集群往往由进行任务分配的调度服务器和多台提供服务的真实服务器构成,而且能够
根据企业成本方面的要求灵活定制其架构。一般情况下每台真实服务器都维护同样的客户访问内容。
在众多客户进行幷发访问的时候,集群中的调度服务器能够将大量的服务请求按照多种不同的算法,
分发到真实的服务器上以减轻单台服务器的负载和压力。从而实现基于IP,连接数以及访问量等多
种类型的负载均衡。而且一旦集群中的某台真实服务器出现故障而不可用时,集群软件能够快速侦
测到这一状况并将服务请求定向到其它的真实服务器。同样整个的过程对于用户来说也是透明的。
在Red Hat的Cluster Suite中所提供的LVS(Linux Virtual Server)就是用于实现这种集群的软件。
LVS是一个由国人(章文嵩博士)主持的项目。他是一个负载均衡/高可用性集群,主要针对大
业务量的网络应用(如新闻服务、网上银行、电子商务等),是一种典型的基于IP的高效率负载均
衡技术。LVS是由一组主控服务器(通常为具备主备功能的双机,也称为Director或者LVS
Router)及若干真实服务器(Real-server)所组成。在LVS集群中,real-server负责实际提供服务,
主控服务器(LVS Router)根据指定的调度算法对real-server进行控制,并将来自外部的请求按照
不同的算法分发给真实服务器(real server)以分担在单台服务器上的负载并提高性能和响应效率。
这种工作机制类似于扑克中的发牌,但是从采用的算法方面往往比发牌更加复杂和科学,同时集群
的结构对于用户来说是透明的,客户端通常只与单个的IP(集群系统的虚拟IP)进行通信,也就是
说从客户端的视角来看,这里只存在单个服务器。
因此,结论就是在LVS集群中,Real-server可以提供众多服务,如ftp, http, dns, telnet,
nntp, smtp 等。主控服务器负责对Real-Server进行控制。客户端在向LVS发出服务请求时,
Director会通过特定的调度算法来指定由某个Real-Server来应答请求,而客户端只与Load
Balancer的IP(即虚拟IP,VIP)进行通信。
b.Linux Virtual Server架构的基本分类:
在LVS调度器的实现技术中,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负载均衡技术,它们的大致原理如下:
Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后
端真实服务器;真实服务器的响应报文通过调度器时,报文源地址被重写再返回给客户,完成整个
负载调度过程。
在Red Hat的官方网站上对采用LVS的基本结构和较为复杂与HA集群配合的三层结构其实都
是利用NAT这种方式。这种情况的配置比较简单,但通常在流量比较大的情况下会造成调度器的瓶
颈。因为服务数据的返回必须通过调度器出去。详情见下图:
http://blog.chinaunix.net/preview/94651_090429093316.jpg

同时在下面的链接有对基于NAT结构的LVS的官方说明:
s-nat-VSA.htm l

Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接
返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP
隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服
务器都有一块网卡连在同一物理网段上。也就是说,在这种结构中,数据从外部到内部真实服务器
的访问会通过调度器进来,但是真实服务器对其的应答不是通过调度器出去。即在大多数情况下,
真实服务器可以通过各自的网关或者专用的网关对数据进行外发,从而降低调度器负载。详情见下
图:

http://blog.chinaunix.net/preview/94651_090429093333.jpg

同时在下面的链接有对基于DR结构的LVS的官方说明:
hat.com/docs/en-
US/Red_Hat_Enterprise_Linux/5.2/html/Virtual_Server_Administration/s2-lvs-directrouting-
VSA.html
Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,
调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务
器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比
请求报文大许多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
但事实上使用Tunnel技术实现LVS的做法,根据我们在工作环境中Debug LVS的经验,实际
上是三种结构中配置最复杂、排错最困难且同时也是性能最低第一种。之所以有生存空间,从个人
角度理解实际上是因为在一些特殊的网络环境中客户有特殊的要求。否则大多数情况下也都是使用
基于NAT或者DR的方式来实现LVS。因此下面的配置过程也是针对这两种结构进行配置说明。
c.Linux Virtual Server工作原理与核心组件:
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均
衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个
高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和
服务器端的程序。
为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。一般来说,LVS集
群采用三层结构,其体系结构如图1所示,三层主要组成部分为:
负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服
务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
服务器池(server pool),是一组真正执行客户请求的服务器,服务有WEB、MAIL、FTP和DNS
等。
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥
有相同的内容,提供相同的服务。
调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、
基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供
相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选
出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也
会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户
请求到达时,调度器可根据请求的内容选择服务器执行请求。因为所有的操作都是在Linux操作系统
核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。
服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以
在服务器池中增加服务器来满足不断增长的请求负载。对大多数网络服务来说,请求间不存在很强
的相关性,请求可在不同的结点上并行执行,所以整个系统的性能基本上可随着服务器池的结点数
目增加而线性增长。
共享存储通常是数据库、网络文件系统或者分布式文件系统。负载调度器、服务器池和共享存
储系统通过高速网络相连接,如100Mbps交换网络、Myrinet和Gigabit网络等。使用高速的网络,
主要为避免当系统规模扩大时互联网络成为整个系统的瓶颈。在具体实施过程中,在红帽企业版
Linux上对LVS集群的定义和配置提供了更加详细的方案。
另外在红帽的LVS中还有一个比较关键的东西是LVS的组件:
LVS的组件中服务包括pulse,lvs,ipvsadm以及nany;另外还包括配置文件/etc/sysconfig/ha/
lvs.cf,配置工具piranha configuration tooly以及服务IP进行浮动之前arp欺骗手段中的
send_arp。
pulse是LVS的控制进程,该进程用于启动和控制所有的其他LVS相关的守护进程。该进程的
配置文件是/etc/sysconfig/ha/lvs.cf。在主router上pulse用于启动LVS守护进程,在备份router
上pulse通过定期收发心跳信号监控主router的状态。如果一旦主router失效,在备份router上的
pulse进程将关闭所有主router上的LVS服务,并且开启send_arp程序来重新指派浮动IP到备份
router的MAC上。
lvs进程运行在主router上,主要读取/etc/sysconfig/ha/lvs.cf文件,调用lvsadm工具来建立与维护ipvs路由表并对每一个LVS服务指派nanny进程。如果nanny报告一个真实服务器失效,
lvs进程将调用ipvsadm工具将失效真实服务器从IPVS路由表中删除。
ipvsadm用于升级kernel中的IPVS路由表,该进程主要用于更改、添加、删除IPVS路由表的
条目。nanny监控的进程运行在主LVS Router上,主LVS Router会通过他来监控每一个真实服务
器的状况。另外piranha configuration tool提供了一个图形接口用于修
改/etc/sysconfig/ha/lvs.cf文件,而send_arp会在浮动IP向不同的LVS router进行切换时发送
arp广播。
阅读(510) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~