TriLoad 负载平衡系统 用户手册
2004/08/10
上海迪吉思信息技术有限公司 编
©2004
版权所有 侵权必究
飞速发展的互联网已逐渐成为我们日常生活中的重要角色,互联网的信息量以每年超过一倍的速度发展而越来越受到人们的关注。应用服务器工作量的日益增加造成短时间内服务器容易超载,特别是在WEB服务器中普遍存在。解决应用服务器超载问题有两种方案:一种是单机解决方案:也就是提升服务器使之具有更好的性能,但是这种方案会受到客户请求数增多而超载,从而造成对服务器的不断单机升级,这种升级过程复杂并且成本很高。另一种是多服务器解决方案:也就是在服务器集群里建立可扩展的服务器。当负载增加,我们可以很容易地通过在集群里增加一台或多台服务器来解决增多的请求。当然,有很多方法来构造服务器集群。
目前被广泛使用的是通过Round Robin方式使用单独的名称来对应不同IP地址的DNS轮询法,这样在理想情况下不同的客户请求会被分配到集群中相应的实际服务器中,从而实现服务器之间的负载分担。但是由于调度粒度是每台主机,不同用户的访问模式会导致动态负载失衡。而且DNS轮询法存在不可靠性,当某一台服务器发生故障,被分配到该服务器IP的用户将无法访问,甚至于在一定时间内用户试图重新刷新客户端的浏览器,问题依旧存在。
一种更为合理的方法是在服务器集群中使用负载平衡服务器来平衡负载。相同的多个服务作为一种服务映射在单一IP地址上,这样对于终端用户来说他看到的仅仅是一台服务器而不是服务器集群。负载调度粒度的是针对每个连接的,它可以在多台服务器中实现好得多的负载平衡。单台或多台服务器发生故障时,这些服务器将被屏蔽,服务器管理会变得很容易,管理员可以在不停止对用户服务的情况下,任意增减服务器。
负载平衡技术能应用于两个层次:应用层和IP层。例如:一种应用层的负载平衡方法是建立一台可扩展的WEB服务器。它将客户端HTTP请求转发到服务器集群中的不同WEB服务器,然后通过不同WEB服务器返回的结果再返回给客户端。在应用层处理HTTP请求和应答的开销很大,当服务器节点数增加到4或更多时,负载平衡服务器自身成为新的瓶颈,这种瓶颈问题随着服务器的数据吞吐量的增加而更严重。
IP层的负载平衡开销很小,最大服务器节点数可以很方便地达到和超过100,IP层的负载平衡的延时比应用层的负载平衡小。另一个显而易见的优点是它能同时支持各种基于TCP/IP的应用。不管是HTTP/HTTPS、Telnet 、视音频流媒体还是企业级的应用 Corba, Tuxedo, CICS。不管协议是UDP还是TCP,负载平衡都能很好地工作。对于基于应用层的负载平衡,必须要为每一种应用和协议开发负载平衡服务代理。
负载平衡服务器的一个有益的副作用是故障接管。当集群中的单点发生故障,负载平衡服务器会监测到故障服务器并从集群中移出。新进的请求连接会被重新定向到集群中的其他实际服务器。当故障服务器恢复正常时,会被重新加入到集群中。只要集群中存在工作节点,其他服务器的故障对用户是透明的。因此整个站点可用性很高。
对于IP层的负载平衡服务器,如何分发IP包到集群服务器将影响整个集群的拓扑、配置和性能。有三种技术用于TriLoad 负载平衡系统。
在网络地址转换模式下,提供服务的IP被定义在平衡服务器上。当客户发出服务请求时,服务器通过网络地址转换将数据包中目的IP地址改为选中的应用服务器IP地址,然后重新发出数据包,应用服务器收到后,将应答包发回给负载平衡服务器,负载平衡服务器收到应答包后将其中的源地址改回成服务IP,发回客户端。
|
虚拟服务器通过网络地址转换的优点是实际服务器可以运行支持TCP/IP协议的任意操作系统,实际服务器可以使用私有地址,只需在平衡服务器上配置服务IP地址。
缺点:平衡服务器通过网络地址转换的性能扩展能力有限,因为请求包和应答包都必须通过平衡服务器,当服务器的节点数量达到20或更多时,平衡服务器可能成为整个系统的瓶颈。
和那种请求包和应答包都必须通过平衡服务器的网络地址转换不同,平衡服务器在直接路由模式下,将请求调度到不同的实际服务器,实际服务器直接将结果发回客户端。在大多数应用中,请求的字节数远小于应答的字节数,所以与网络地址转换相比平衡服务器能处理更多的请求。采用直接路由能更大程度提高平衡服务器的最大节点数。甚至于平衡服务器使用100M全双工的网卡,系统的最大数据吞吐量仍可以超过1Gbps。

直接路由的特点是运用MAC地址欺骗技术,因此实际服务器和负载平衡服务器必须在同一个物理网段中。
与直接路由的方法类似,IP隧道仅处理连接中客户端到服务器的那部分,应答包通过路由器直接发回客户端
|
缺点:所有服务器必须使用IP隧道(IP封装)协议。当然,优点是因为这些服务器的连接是通过IP隧道,平衡服务器和实际服务器可以在不同的局域网甚至是广域网。
负载平衡服务器通过直接将TCP/IP请求发送到集群中的不同服务器来提升整体系统的性能、平衡了系统的负载。负载平衡不论对于终端用户,任何的客户程序还是服务器端的程序都是透明的。
整个平衡系统包含以下各部分:
负载平衡服务器的核心是转发用户请求到实际服务器。
.
虚拟IP地址或者说服务IP地址。平衡服务器的自身IP只能被内部访问,比如说通过WEB接口管理负载平衡服务器,而对外部不可见,虚拟IP却是可以被外部访问。一个负载平衡服务器可以有多个服务IP。
对外发布的协议、虚拟IP和端口的组合。负载平衡服务器会将送到此服务的包转发到实际服务器。同样,一个虚拟IP上可以有多个服务。
提供负载平衡功能的主服务器,实时地将工作状态向备份负载平衡服务器复制。当主服务器从故障状态恢复到正常状态后,可以自动或手动强制接管备份平衡服务器。
提供负载平衡功能的备份服务器,实时地将工作状态从主负载平衡服务器复制到本地。当主服务器正常工作时,备份服务器处于闲置状态,当主服务器发生故障时,备份服务器接管主服务器的全部工作,继续提供负载平衡服务。
一个基于TCP/IP的实际服务器,在一个集群中最终处理用户请求。如WEB服务,FTP服务等。一个集群中可以有许多这样的实际服务器。
一个后台进程,周期性地检查实际服务器的健康状况。当一个实际服务器的状况发生变化,监控器会调用相应的警报器。每次监测到服务器失效,监控器会调用指定的Alert程序,而当服务器由失效变为正常工作时, Alert会被再调用一次。不同的应用可以使用不同的监控器,如Ping监控器,HTTP监控器等。
监控器可以带参数,而且系统总是将实际服务器的IP地址自动作为最后一个参数。例如HTTP可以指定参数“-t 2 -p %port%”,实际上等同于“-t 2 -p %port% %server%”,表示在指定端口监测HTTP服务,如果两秒钟无正常应答,认为检测失败。其中%port%,%server%都是系统变量,在运行时被替换为实际值。详见附录。
警报器是在实际服务器健康状态变化时调用的程序。常用的警报器包括:
l LB警报器:只在条件Become up和 Become down时触发,将实际服务器删除或重新加入集群。在新增加服务时,LB警报器会自动设置。
l Mail 警报器:在状态改变时发出电子邮件。
通常应该配置Alert,特别是LB警报器。和监控器一样,警报器也可以带参数。详见附录。
一种决定哪台实际服务器用来处理新进连接的算法。
1. RR:轮询(Round Robin),该算法就是以轮流的方式依次将请求发给不同的服务器,算法的优点是简洁,无需记录当前所有连接的状态,所以它是一种无状态调度。轮询算法假设所有的服务器处理性能均相同,不管服务器当前的连接数和响应速度,所以相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮询算法容易导致服务器间的负载不平衡。
2. WRR:加权轮询(Weighted Round Robin)调度,该算法可以解决服务器性能不一的问题,它用相应的权值表示服务器的性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮询算法是按权值的高低和轮询方式分配请求到各服务器。权值高的服务器先收到连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接。
3. LC:最小连接(Least-Connection)调度,该算法是把新连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器时,其连接数加1,当连接中断或超时,其连接数减1。
4. WLC:加权最小连接(Weighted Least-Connection)调度,该算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已连接数和其权值成比例。WLC是系统指定的缺省调度算法。
5. LBLC: 基于局部性的最少连接(Locality-Based Least-Connection)调度,该算法先根据请求的目标IP找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,则将请求发送到该服务器;若服务器不存在,或者服务器超载且有服务器处于其一半的工作负载,则用"最少连接"的原则选出一个可用的服务器,并将请求发送到该服务器。
6. LBLCR:带复制的基于局部性最少连接(Locality-Based Least-Connection with Replication)调度,该算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按"最小连接"原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按"最小连接"原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,并将请求发送 到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7. DH:目标地址散列调度(Destination Hashing),该算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,则将请求发送到该服务器,否则返回空。
8. SH:源地址散列调度(Source Hashing),该算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key),从静态分配的散列表中找出对应的服务器,若该服务器是可用的且未超载,则将请求发送到该服务器,否则返回空。
如果指定该选项,从客户端来的后续请求被重定向到处理第一个请求的实际服务器上。此为可选项,以秒为单位。对于大多数需要设置此设置的应用来说,3600秒是一个比较合适的数值。适用于应用使用两个以上端口,必须指向同一台服务器的情况,如SSL或FTP的应用;或者客户端和服务器不保持长连接,但是在服务器端保持一定的对话状态,如使用Cookie的HTTP WEB应用。虚拟服务的端口设置为0,表示匹配虚拟IP上所有端口时,持久时间必须设置为非零值。
当持久时间设置为0时意味着不使用此功能,这是缺省的。
注意:如果虚拟服务是用来处理FTP连接且虚拟服务采用的是直接路由或IP隧道转发机制,那么必须设置持久时间。
负载平衡服务器必须接入以太网中,它支持10M/100M/1000M的网络。服务器接入网络并启动后,你就能通过浏览器访问8080端口的服务来设置服务器。
负载平衡服务器网络地址初始值为192.168.0.111,在服务器启动时,你能修改这个地址,通过浏览器连接http://192.168.0.111:8080,用户名为admin,密码为admin登陆系统,最好在首次连接服务器时修改密码。
此外,还有个默认用户是monitor,密码为monitor。这个用户只能查看平衡服务器的状态,该用户密码也应该进行修改。
配置步骤包括:
l 配置负载平衡服务器
l 配置路由器/防火墙
l 配置实际服务器
这节用来配置负载平衡服务器的网络设置。安装有5项,网络接口、IP地址、网络掩码、网关和DNS。当服务第一次启动时,它的IP地址是192.168.0.111

在管理页面首页左列表中选择“网络设置”选项,可以查看负载平衡服务器基本信息。

在负载平衡服务器基本信息中单击修改按钮,系统转到负载平衡服务器基本配置页面。如果改变了服务器的IP,就必须在浏览器里使用新的IP地址来重新登录管理界面。

在管理页面首页左列表中选择“网络设置”选项,可以查看负载平衡服务器HA信息,此功能只在企业版中有。当HA Peer IP地址该项为空时,则不启用HA双机热备功能。

主从选择可以定义本负载平衡服务器是否是主服务器。只有平衡服务器是主服务器时才能使用自动接管功能。HA Peer IP地址为空时,表示不启用HA双机热备功能,此处输入的是另一台负载平衡服务器的IP地址。HA同步超时时间:主从服务器间数据同步的时限,心跳间隔:每隔一定的时间检测对方负载平衡服务器的工作状态,心跳重试次数:当收不到对方服务器的信息时,再发出检测的次数。强制接管从机:当选择“是”,如果主平衡服务器从故障状态恢复到正常转态时,强行接管备用平衡服务器的IP和当前所有工作。
定义服务(Service)前,必须至少先定义一个虚拟IP(VIP),也就是提供给客户端访问的那个IP,对客户端来说,它只知道这个IP,其它对它来说是透明的。
如下图所示,可以单击增加或删除按钮来定义新的VIP或去除已经没有用的VIP。

新增VIP页面提供了IP地址、掩码、网络接口别名和是否用于NAT路由器这四项供用户定义,其中网络接口别名是系统自动产生的,可以改成其他值或者直接使用,但前提是这个接口不能和已定义的其他VIP中的重复。同样,IP也不能重复(IP是用来唯一标识一个VIP的关键字)。
启用HA并采用NAT转发方式时,在负载平衡服务器发生故障时会接管所有的VIP,但是不会接管负载平衡服务器的实际IP。如果实际服务器使用主平衡服务器的IP作为默认路由,那么无法将包正常返回,为了使实际服务器的默认路由也能正常被接管,通常会在负载平衡服务器上定义一个新的VIP来专门负责NAT路由。此VIP应该设置采用NAT路由器方式,实际服务器的默认路由器应该使用此VIP。在负载平衡服务器单机模式下,采用NAT转发方式的实际服务器可以使用负载平衡服务器的真实IP。

在删除一个VIP之前,必须确保没有服务使用该VIP, 否则系统将产生一条操作失败的提示信息。

服务(Service)是负载平衡服务器的核心,所有访问实际应用服务器的客户都是通过使用指定的服务进行的。

理论上,定义服务的数量是没有限制的,但必须保证任意两个服务它们的名字以及IP地址,协议和端口的组合是不同的。

当单击增加按钮来定义服务的时候,系统将提供一个帮助页面,该页面将介绍怎样配置路由器/防火墙以及基于不同操作系统的实际应用服务器。负载平衡服务器管理系统本身不能配置这些实际服务器,所以用户必须手工进行配置,这里提供了一个配置路由器/防火墙和基于Linux的实际应用服务器的例子仅供参考。

点击位于服务列表右侧的铅笔形状的图标来修改服务设置,包括设置服务本身的基本信息以及定义在该服务下的实际应用服务器和监视器,在后续章节会介绍,新增,修改,禁用,启用和删除服务器/监视器的详细步骤。

如下图所示,服务详细信息页面列出了服务的基本信息,以及实际服务器和监视器。

在一个服务创建之后,只能修改调度算法,持久时间以及启用这三项。

选中要删除的服务,点击删除按钮,就可删除该服务,但是如果该服务下面定义了实际应用服务器,则系统就会产生一条失败提示信息指出该服务不能被删除。


当一个服务暂时不需要时,可以选中它并点击禁用按钮,但该服务仍保留在服务设置里。

服务禁用后,图标变灰。

应用运行在实际服务器上,并在指定的端口进行监听,用户的请求最终由该服务器进行响应。一台实际服务器隶属于某个特定的服务;然而,不同的实际服务器可以是相同的机器和相同的IP,只是他们定义在不同的服务上而已,但这些服务器的监听端口一定是不同的。

如果服务的转发类型是DR(direct routing)或TUN(tunneling) ,那么实际服务器也必须使用和服务指定的相同的端口进行监听,但对于转发类型是NAT(network address translation)的服务,此项不受限制。

当服务的转发类型是NAT时,实际服务器的端口必须是非零值。

当新增实际服务器的时候,系统将转到一个帮助页面(和新增服务时类似),该页面给出了配置路由器/防火墙以及设置实际服务器所需的步骤,具体的内容将根据服务的转发类型而有所不同。
新增实际服务器的同时,缺省使用服务定义的监视器,亦可不使用服务定义的监视器而定义自己的监视器。



只有转发模式、权重、是否使用服务定义的监视器和启用可被修改。

可以启用/禁用/删除实际服务器,而且可以同时针对多个服务器进行操作。
监视器用来检查实际服务器的运行状况。当新增一个服务时,将同时自动新增一个监视器,如果新增的服务定义的端口是80,则新增的监视器类型为http;还可选择类型为ping或connect。


如果对监视器的参数不是很了解,建议使用系统提供的缺省参数。
选择不同的监视器类型会有不同的参数设置。
下图为HTTP监视器的参数设置:

下图为Connect监视器的参数设置:
下图为Ping监视器的参数设置:

只有类型不能修改


当监视器发现实际服务器的状态发生改变时,警报器就会被调用。

一旦监视器发现实际服务器工作状态发生改变时,就会调用警报器。当新增一个监视器的时候,系统将提示安装警报器,可以选择lb类型或mail类型。lb警报器只在become down、become up的条件下触发,当实际服务器down时,会从群集中被移除,而当它再次变成可用时,就会被重新加入到群集中。Mail警报器按照触发的条件,可以将相关信息通过Mail方式发给管理员或指定的收件人。

不同类型的警报器,其参数设置也不同。

除名称和类型外都可被修改。


本章描述安装和配置负载平衡服务器的准备工作。
首先,必须选择在直接路由、网络地址转换和IP隧道中选择所用哪一种方式。
其次,决定是否用持续。如果应用是有状态的(stateful),例如一个WEB应用需要登陆和会话信息,就必须启用持续。
在直接路由中,负载平衡服务器转发含有目的服务IP的数据包到实际服务器,因此实际服务器的TCP堆栈必须接受数据包。它可以在Loopback 设备上配置服务IP来完成。但是操作系统会将Loopback上的IP作为服务IP的路由,在某些时候会和真实IP产生冲突。不像Unix可以设置IP掩码为255.255.255.255,Windows和一些Unix变量例如AIX是不接受这种掩码,要么在服务器启动后删除路由,要么重新选择服务IP和掩码避免冲突。在Unix中你可以在启动脚本中增加命令来增加和删除路由规则,但在Windows操作系统不能实现。在Windows中服务IP的最后一位用奇数,用255.255.255.252作为网路掩码。
直接路由这是默认和最有效的方式。在需要用这种方法时,负载平衡服务器,路由器(或者防火墙)和所有实际服务器必须在同一物理网段。
使用管理员控制台配置服务器:
l 配置负载平衡服务器内部自身IP
l 添加服务IP作为虚拟IP
l 选择直接路由作为负载平衡方式时,用虚拟IP添加服务
l 添加所有实际服务器到服务
使用路由器或防火墙指定的接口进行配置
l 增加到外界的路由规则,比如Internet,确保客户端能连接到服务的IP
l 增加网络适配器接口和与服务IP处于同一物理网段的IP地址
l 增加网络适配器接口和与实际的服务器处于同一物理网段的IP地址
注意: 请参考你的路由器或防火墙附带的参考手册,查看相关命令的详细信息。
实际服务器必须和负载平衡服务器内部地址处于同一网段,实际服务器被配置为接受目的服务IP数据包,也可以设置路由器/防火墙为默认网关。根据实际服务器的操作系统,应该有不同的配置。
l 对于Linux服务器来说,其内核版本必须大于等于2.4
echo "1" >/proc/sys/net/ipv4/ip_forward
iptables -A PREROUTING –t nat -p tcp -d <serviceIP> --dport <servicePort> -j REDIRECT --to <servicePort>
l 增加路由器或防火墙做为缺省网关
route add –net 0.0.0.0 gw <routerIP>
注意:对于Linux2.2以上的内核,你也可以配置一个Non-ARP 设备做为第一步,请查看相关的用户手册了解详细的信息。详见附录C
l 为Loopback 设备添加别名,
ifconfig lo0 alias <serviceIP> netmask 255.255.255.255
l 增加路由器或防火墙做为缺省网关
route add 0 <routerIP>
route change –host <serviceIP> 127.0.0.1
注意:对于其他版的Unix变量,请查看它们的系统管理手册了解更详细的信息
l 在本地的Loopback 设备上配置IP地址为服务IP,详见附录B
l 增加路由器或防火墙做为缺省网关
route add 0.0.0.0 mask 0.0.0.0 <routerIP> /p
这是一种简单配置应用于数量少的应用服务器集群。
使用管理员控制台配置服务器:
l 配置负载平衡服务器内部自身IP
l 添加服务IP作为虚拟IP
l 选择网络地址转换作为负载平衡方式时,用虚拟IP添加服务
l 添加所有实际服务器到服务
使用路由器或防火墙指定的接口进行配置:
l 增加到外界的路由规则,比如Internet,确保客户端能连接到服务的IP
l 增加网络适配器接口和与服务IP处于同一物理网段的IP地址
注意: 请参考你的路由器或防火墙附带的参考手册,查看相关命令的详细信息。
实际服务器必须设置到负载平衡服务器内部IP的缺省路由器
l 添加负载平衡服务器为默认路由器
route add –net 0.0.0.0 gw <loadBalanceIP>
l 添加负载平衡服务器为默认路由器
route add 0 < loadBalanceIP >
l 添加负载平衡服务器为默认路由器
route add 0.0.0.0 mask 0.0.0.0 < loadBalanceIP > /p
Note: 如果服务IP 和实际处于同一物理网段,你必须增加另一个路由规则强制使用负载平衡服务器做为缺省的网关。比如,服务 IP 是 192.168.0.10, 掩码是255.255.255.0, 你要在实际 服务器上增加一条路由规则: route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.10 on the real server(这条命令适用于Linux,你要根据 实际 服务器所在的操作系统来决定相关的命令). 如果是AIX操作系统,还需要执行 no -o ipignoreredirects=1 来禁用ICMP重定向。
多数的配置和直接路由相同,IP隧道被用于负载平衡服务器和实际服务器不处于同一物理网段甚至它们是通过广域网连接的情况下。目前只有Linux和Windows 2000服务器版支持IP-IP封装可以被作为实际服务器。
使用管理员控制台配置服务器:
l 配置负载平衡服务器内部自身IP
l 添加服务IP作为虚拟IP
l 选择IP隧道作为负载平衡方式时,用虚拟IP添加服务
l 添加所有实际服务器到服务
l 使用路由器或防火墙指定的接口进行配置(和直接路由方法相同):增加到外界的路由规则,比如Internet,确保客户端能连接到服务的IP
l 增加网络适配器接口和与服务IP处于同一物理网段的IP地址
l 增加网络适配器接口和与实际的服务器处于同一物理网段的IP地址
注意: 请参考你的路由器或防火墙附带的参考手册,查看相关命令的详细信息。
实际服务器和负载平衡服务器可以通过WAN连接,同样设置路由器或防火墙做为缺省的网关。
l 对于Linux服务器,其内核版本要大于等于2.4
echo "1" >/proc/sys/net/ipv4/ip_forward
iptables -A PREROUTING –t nat -p tcp -d <serviceIP> --dport <servicePort> -j REDIRECT --to <servicePort>
l 增加路由器或防火墙做为缺省的网关
router add –net 0.0.0.0 gw <routerIP>
l 增加隧道配置
modprobe ipip
ifconfig tunl0 0.0.0.0 up
注意:对于Linux 2.2以上的内核,你同样可以把 Non-ARP 设备做为第一步进行配置,更多的细节请查看相关的手册。详见附录C
l 控制面板->路由和远程访问->手动配置服务器
l 路由接口->添加新的IP隧道
l IP路由选择->常规->添加新接口->选择刚建的IP隧道
l 本地地址中输入实际服务器真实IP。,
l 远程地址中输入负载平衡服务器真实IP。
l 禁用路由和远程访问服务,重新再启动该服务
注意:详见附录E