集群的负载均衡技术

http://bbs.jpym.com/thread-12723-1-1.html
集群的负载均衡技术

前言 

当前,无论在企业网、园区网还是在广域网如Internet上,业务量的发展都超出了过去最乐观的估计,上网热潮风起云涌,新的应用层出不穷,即使按照当时最优配置建设的网络,也很快会感到吃不消。

尤其是各个网络的核心部分,其数据流量和计算强度之大,使得单一设备根本无法承担,而如何在完成同样功能的多个网络设备之间实现合理的业务量分配,使之不致于出现一台设备过忙、而别的设备却未充分发挥处理能力的情况,就成了一个问题.

负载均衡机制也因此应运而生。

负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。它主要完成以下任务:解决网络拥塞问题,服务就近提供,实现地理位置无关性 ;为用户提供更好的访问质量;提高服务器响应速度;提高服务器及其他资源的利用效率;避免了网络关键部位出现单点失效。 

定义 

其实,负载均衡并非传统意义上的"均衡",一般来说,它只是把有可能拥塞于一个地方的负载交给多个地方分担。如果将其改称为"负载分担",也许更好懂一些。说得通俗一点,负载均衡在网络中的作用就像轮流值日制度,把任务分给大家来完成,以免让一个人累死累活。不过,这种意义上的均衡一般是静态的,也就是事先确定的"轮值"策略 。 

与轮流值日制度不同的是,动态负载均衡通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理分配出去。结构上分为本地负载均衡和地域负载均衡(全局负载均衡),前一种是指对本地的服务器集群做负载均衡,后一种是指对分别放置在不同的地理位置、在不同的网络及服务器群集之间作负载均衡。 

服务器群集中每个服务结点运行一个所需服务器程序的独立拷贝,诸如Web、FTP、Telnet或e-mail服务器程序。对于某些服务(如运行在Web服务器上的那些服务)而言,程序的一个拷贝运行在群集内所有的主机上,而网络负载均衡则将工作负载在这些主机间进行分配。对于其他服务(例如e-mail),只有一台主机处理工作负载,针对这些服务,网络负载均衡允许网络通讯量流到一个主机上,并在该主机发生故障时将通讯量移至其他主机。 

负载均衡技术实现结构 

在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。它主要完成以下任务: 

◆解决网络拥塞问题,服务就近提供,实现地理位置无关性 
◆为用户提供更好的访问质量 
◆提高服务器响应速度 
◆提高服务器及其他资源的利用效率 
◆避免了网络关键部位出现单点失效 

广义上的负载均衡既可以设置专门的网关、负载均衡器,也可以通过一些专用软件与协议来实现。对一个网络的负载均衡应用,从网络的不同层次入手,根据网络瓶颈所在进行具体分析。从客户端应用为起点纵向分析,参考OSI的分层模型,我们把负载均衡技术的实现分为客户端负载均衡技术、应用服务器技术、高层协议交换、网络接入协议交换等几种方式。 


负载均衡的层次 


◆基于客户端的负载均衡 

这种模式指的是在网络的客户端运行特定的程序,该程序通过定期或不定期的收集服务器群的运行参数:CPU占用情况、磁盘IO、内存等动态信息,再根据某种选择策略,找到可以提供服务的最佳服务器,将本地的应用请求发向它。如果负载信息采集程序发现服务器失效,则找到其他可替代的服务器作为服务选择。整个过程对于应用程序来说是完全透明的,所有的工作都在运行时处理。因此这也是一种动态的负载均衡技术。 

但这种技术存在通用性的问题。因为每一个客户端都要安装这个特殊的采集程序;并且,为了保证应用层的透明运行,需要针对每一个应用程序加以修改,通过动态链接库或者嵌入的方法,将客户端的访问请求能够先经过采集程序再发往服务器,以重定向的过程进行。对于每一个应用几乎要对代码进行重新开发,工作量比较大。 

所以,这种技术仅在特殊的应用场合才使用到,比如在执行某些专有任务的时候,比较需要分布式的计算能力,对应用的开发没有太多要求。另外,在采用JAVA构架模型中,常常使用这种模式实现分布式的负载均衡,因为java应用都基于虚拟机进行,可以在应用层和虚拟机之间设计一个中间层,处理负载均衡的工作。 

◆应用服务器的负载均衡技术 

如果将客户端的负载均衡层移植到某一个中间平台,形成三层结构,则客户端应用可以不需要做特殊的修改,透明的通过中间层应用服务器将请求均衡到相应的服务结点。比较常见的实现手段就是反向代理技术。使用反向代理服务器,可以将请求均匀转发给多台服务器,或者直接将缓存的数据返回客户端,这样的加速模式在一定程度上可以提升静态网页的访问速度,从而达到负载均衡的目的。 

使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能。然而它本身也存在一些问题,首先就是必须为每一种服务都专门开发一个反向代理服务器,这就不是一个轻松的任务。 

反向代理服务器本身虽然可以达到很高效率,但是针对每一次代理,代理服务器就必须维护两个连接,一个对外的连接,一个对内的连接,因此对于特别高的连接请求,代理服务器的负载也就非常之大。反向代理能够执行针对应用协议而优化的负载均衡策略,每次仅访问最空闲的内部服务器来提供服务。但是随着并发连接数量的增加,代理服务器本身的负载也变得非常大,最后反向代理服务器本身会成为服务的瓶颈。 

◆基于域名系统的负载均衡 

NCSA的可扩展Web是最早使用动态DNS轮询技术的web系统。在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。在很多知名的web站点都使用了这个技术:包括早期的yahoo站点、163等。动态DNS轮询实现起来简单,无需复杂的配置和管理,一般支持bind8.2以上的类Unix系统都能够运行,因此广为使用。 

DNS负载均衡是一种简单而有效的方法,但是存在不少问题。 

首先域名服务器无法知道服务结点是否有效,如果服务结点失效,余名系统依然会将域名解析到该节点上,造成用户访问失效。 

其次,由于DNS的数据刷新时间TTL(Time to LIVE)标志,一旦超过这个TTL,其他DNS服务器就需要和这个服务器交互,以重新获得地址数据,就有可能获得不同IP地址。因此为了使地址能随机分配,就应使TTL尽量短,不同地方的DNS服务器能更新对应的地址,达到随机获得地址。然而将TTL设置得过短,将使DNS流量大增,而造成额外的网络问题。 

最后,它不能区分服务器的差异,也不能反映服务器的当前运行状态。当使用DNS负载均衡的时候,必须尽量保证不同的客户计算机能均匀获得不同的地址。例如,用户A可能只是浏览几个网页,而用户B可能进行着大量的下载,由于域名系统没有合适的负载策略,仅仅是简单的轮流均衡,很容易将用户A的请求发往负载轻的站点,而将B的请求发往负载已经很重的站点。因此,在动态平衡特性上,动态DNS轮询的效果并不理想。 

◆高层协议内容交换技术 

除了上述的几种负载均衡方式之外,还有在协议内部支持负载均衡能力的技术,即URL交换或七层交换,提供了一种对访问流量的高层控制方式。Web内容交换技术检查所有的HTTP报头,根据报头内的信息来执行负载均衡的决策。例如可以根据这些信息来确定如何为个人主页和图像数据等内容提供服务,常见的有HTTP协议中的重定向能力等。 

HTTP运行于TCP连接的最高层。客户端通过恒定的端口号80的TCP服务直接连接到服务器,然后通过TCP连接向服务器端发送一个HTTP请求。协议交换根据内容策略来控制负载,而不是根据TCP端口号,所以不会造成访问流量的滞留。 

由于负载平衡设备要把进入的请求分配给多个服务器,因此,它只能在TCP连接时建立,且HTTP请求通过后才能确定如何进行负载的平衡。当一个网站的点击率达到每秒上百甚至上千次时,TCP连接、HTTP报头信息的分析以及进程的时延已经变得很重要了,要尽一切可能提高这几各部份的性能。 

在HTTP请求和报头中有很多对负载平衡有用的信息。我们可以从这些信息中获知客户端所请求的URL和网页,利用这个信息,负载平衡设备就可以将所有的图像请求引导到一个图像服务器,或者根据URL的数据库查询内容调用CGI程序,将请求引导到一个专用的高性能数据库服务器。 

如果网络管理员熟悉内容交换技术,他可以根据HTTP报头的cookIE字段来使用Web内容交换技术改善对特定客户的服务,如果能从HTTP请求中找到一些规律,还可以充分利用它作出各种决策。除了TCP连接表的问题外,如何查找合适的HTTP报头信息以及作出负载平衡决策的过程,是影响Web内容交换技术性能的重要问题。如果Web服务器已经为图像服务、SSL对话、数据库事务服务之类的特殊功能进行了优化,那么,采用这个层次的流量控制将可以提高网络的性能。 

◆网络接入协议交换 

大型的网络一般都是由大量专用技术设备组成的,如包括防火墙、路由器、第3、4层交换机、负载均衡设备、缓冲服务器和Web服务器等。如何将这些技术设备有机地组合在一起,是一个直接影响到网络性能的关键性问题。现在许多交换机提供第四层交换功能,对外提供一个一致的IP地址,并映射为多个内部IP地址,对每次TCP和UDP连接请求,根据其端口号,按照即定的策略动态选择一个内部地址,将数据包转发到该地址上,达到负载均衡的目的。很多硬件厂商将这种技术集成在他们的交换机中,作为他们第四层交换的一种功能来实现,一般采用随机选择、根据服务器的连接数量或者响应时间进行选择的负载均衡策略来分配负载。由于地址转换相对来讲比较接近网络的低层,因此就有可能将它集成在硬件设备中,通常这样的硬件设备是局域网交换机。 

当前局域网交换机所谓的第四层交换技术,就是按照IP地址和TCP端口进行虚拟连接的交换,直接将数据包发送到目的计算机的相应端口。通过交换机将来自外部的初始连接请求,分别与内部的多个地址相联系,此后就能对这些已经建立的虚拟连接进行交换。因此,一些具备第四层交换能力的局域网交换机,就能作为一个硬件负载均衡器,完成服务器的负载均衡。 

由于第四层交换基于硬件芯片,因此其性能非常优秀,尤其是对于网络传输速度和交换速度远远超过普通的数据包转发。然而,正因为它是使用硬件实现的,因此也不够灵活,仅仅能够处理几种最标准的应用协议的负载均衡,如HTTP 。当前负载均衡主要用于解决服务器的处理能力不足的问题,因此并不能充分发挥交换机带来的高网络带宽的优点。 

使用基于操作系统的第四层交换技术因此孕育而生。通过开放源码的Linux,将第四层交换的核心功能做在系统的核心层,能够在相对高效稳定的核心空间进行IP包的数据处理工作,其效率不比采用专有OS的硬件交换机差多少。同时又可以在核心层或者用户层增加基于交换核心的负载均衡策略支持,因此在灵活性上远远高于硬件系统,而且造价方面有更好的优势。 

◆传输链路聚合 

为了支持与日俱增的高带宽应用,越来越多的PC机使用更加快速的链路连入网络。而网络中的业务量分布是不平衡的,核心高、**低,关键部门高、一般部门低。伴随计算机处理能力的大幅度提高,人们对多工作组局域网的处理能力有了更高的要求。当企业内部对高带宽应用需求不断增大时(例如Web访问、文档传输及内部网连接),局域网核心部位的数据接口将产生瓶颈问题,瓶颈延长了客户应用请求的响应时间。并且局域网具有分散特性,网络本身并没有针对服务器的保护措施,一个无意的动作(像一脚踢掉网线的插头)就会让服务器与网络断开。 

通常,解决瓶颈问题采用的对策是提高服务器链路的容量,使其超出目前的需求。例如可以由快速以太网升级到千兆以太网。对于大型企业来说,采用升级技术是一种长远的、有前景的解决方案。然而对于许多企业,当需求还没有大到非得花费大量的金钱和时间进行升级时,使用升级技术就显得大材小用了。在这种情况下,链路聚合技术为消除传输链路上的瓶颈与不安全因素提供了成本低廉的解决方案。 

链路聚合技术,将多个线路的传输容量融合成一个单一的逻辑连接。当原有的线路满足不了需求,而单一线路的升级又太昂贵或难以实现时,就要采用多线路的解决方案了。目前有5种链路聚合技术可以将多条线路"捆绑"起来。 

同步IMUX系统工作在T1/E1的比特层,利用多个同步的DS1信道传输数据,来实现负载均衡。 

IMA是另外一种多线路的反向多路复用技术,工作在信元级,能够运行在使用ATM路由器的平台上。 

用路由器来实现多线路是一种流行的链路聚合技术,路由器可以根据已知的目的地址的缓冲(cache)大小,将分组分配给各个平行的链路,也可以采用循环分配的方法来向线路分发分组。 

多重链路PPP,又称MP或MLP,是应用于使用PPP封装数据链路的路由器负载平衡技术。MP可以将大的PPP数据包分解成小的数据段,再将其分发给平行的多个线路,还可以根据当前的链路利用率来动态地分配拨号线路。这样做尽管速度很慢,因为数据包分段和附加的缓冲都增加时延,但可以在低速的线路上运行得很好。 

还有一种链路聚合发生在服务器或者网桥的接口卡上,通过同一块接口卡的多个端口映射到相同的IP地址,均衡本地的以太网流量以实现在服务器上经过的流量成倍增加。目前市面上的产品有intel和dlink的多端口网卡,,一般在一块网卡上绑定4个100M以太端口,大大提高了服务器的网络吞吐量。不过这项技术由于需要操作系统驱动层的支持,只能在win2000和linux下实现。 

链路聚合系统增加了网络的复杂性,但也提高了网络的可靠性,使人们可以在服务器等关键LAN段的线路上采用冗余路由。对于IP系统,可以考虑采用VRRP(虚拟路由冗余协议)。VRRP可以生成一个虚拟缺省的网关地址,当主路由器无法接通时,备用路由器就会采用这个地址,使LAN通信得以继续。总之,当主要线路的性能必需提高而单条线路的升级又不可行时,可以采用链路聚合技术。 

◆带均衡策略的服务器群集 

如今,服务器必须具备提供大量并发访问服务的能力,其处理能力和I/O能力已经成为提供服务的瓶颈。如果客户的增多导致通信量超出了服务器能承受的范围,那么其结果必然是——宕机。显然,单台服务器有限的性能不可能解决这个问题,一台普通服务器的处理能力只能达到每秒几万个到几十万个请求,无法在一秒钟内处理上百万个甚至更多的请求。但若能将10台这样的服务器组成一个系统,并通过软件技术将所有请求平均分配给所有服务器,那么这个系统就完全拥有每秒钟处理几百万个甚至更多请求的能力。这就是利用服务器群集实现负载均衡的最初基本设计思想。 

早期的服务器群集通常以光纤镜像卡进行主从方式备份。令服务运营商头疼的是关键性服务器或应用较多、数据流量较大的服务器一般档次不会太低,而服务运营商花了两台服务器的钱却常常只得到一台服务器的性能。通过地址转换将多台服务器网卡的不同IP地址翻译成一个VIP(Virtual IP)地址,使得每台服务器均时时处于工作状态。原来需要用小型机来完成的工作改由多台PC服务器完成,这种弹性解决方案对投资保护的作用是相当明显的——既避免了小型机刚性升级所带来的巨大设备投资,又避免了人员培训的重复投资。同时,服务运营商可以依据业务的需要随时调整服务器的数量。 

网络负载均衡提高了诸如Web服务器、FTP服务器和其他关键任务服务器上的因特网服务器程序的可用性和可伸缩性。单一计算机可以提供有限级别的服务器可靠性和可伸缩性。但是,通过将两个或两个以上高级服务器的主机连成群集,网络负载均衡就能够提供关键任务服务器所需的可靠性和性能。 

为了建立一个高负载的Web站点,必须使用多服务器的分布式结构。上面提到的使用代理服务器和Web服务器相结合,或者两台Web服务器相互协作的方式也属于多服务器的结构,但在这些多服务器的结构中,每台服务器所起到的作用是不同的,属于非对称的体系结构。非对称的服务器结构中每个服务器起到的作用是不同的,例如一台服务器用于提供静态网页,而另一台用于提供动态网页等等。这样就使得网页设计时就需要考虑不同服务器之间的关系,一旦要改变服务器之间的关系,就会使得某些网页出现连接错误,不利于维护,可扩展性也较差。 

能进行负载均衡的网络设计结构为对称结构,在对称结构中每台服务器都具备等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。然后,可以通过某种技术,将外部发送来的请求均匀分配到对称结构中的每台服务器上,接收到连接请求的服务器都独立回应客户的请求。在这种结构中,由于建立内容完全一致的Web服务器并不困难,因此负载均衡技术就成为建立一个高负载Web站点的关键性技术。 

总之,负载均衡是一种策略,它能让多台服务器或多条链路共同承担一些繁重的计算或I/O任务,从而以较低成本消除网络瓶颈,提高网络的灵活性和可靠性 
随着ISP开始向用户提供高速的Internet连接,普通小型企业及计算机用户要建立自己的Web服务器、FTP服务器或者Mail服务器,就变得非常的容易。但是,如果ISP出现错误的话,我们将怎么办呢?一个最常用的解决方法就是进行另外一个ISP的冗余连接。本文将介绍使用一个Linux主机来完成Internet冗余连接,主要有以下内容: 
1.配置主机,使其可以处理多个ISP的流入信息。 
2.网络流出连接的负载平衡。 
3.配置各种服务以实现冗余。 
4.使用ipchains或者iptables配置防火墙。 
图1描述了小型企业或家庭计算机网络的结构。在图中,Linux是作为Internet和内部局域网两个部分之间的防火墙。在本例中,网卡eth1使用的DSL,网卡eht2使用的是线缆modem。Linux主机通过和两个ISP的连接实现负载平衡,这种方法不仅仅适用于高速网络连接。同样的技术也可以用于在两个拨号连接间实现负载平衡。

图1 实现Internet冗余连接的Linux主机 

在图1中测试用的主机使用的是CPU为Intel Celeron 533MHz的计算机,操作系统使用的是Red Hat 6.2,内核为2.2.18。本文所述方法在内核为 2.4.13的Red Hat 7.2中也测试通过。不过,读者在实际应用中,不一定非得使用533MHz的CPU,事实上,在本例中,用一台老的配置有32M内存的Pentium 100机器作为防火墙也完全可以。此外,本文中一些例子虽然是针对Red Hat的,不过,只需稍加修改,就可用于其它Linux发行版。 
在本文中,我没有提供网卡配置、Linux内核编译以及DNS配置等内容。因为这方面的信息在网上或者书店里都有大量的资料。此外,读者也可以到http://www.linuxdoc.org去查找一些相关的资料。 

配置内核 
Linux内核2.2以及更高版本支持高级路由技术,它可以在一个Linux主机中实现负载平衡和多个缺省的路由。为了支持多个Internet连接,在编译时必需加入下面几个内核网络选项: 
CONFIG_IP_ADVANCED_ROUTER=y 
CONFIG_IP_MULTIPLE_TABLES=y 
CONFIG_IP_ROUTE_MULTIPATH=y 
如果要想使用新内核中的高级路由功能,那么就必需要安装ip路由工具包(在Red Hat 7.1以上版本中均带有该工具包),如果没有该工具包,可以从以下地址下载: 
ftp://ftp.inr.ac.ru/ip-routing/ 
ip路由工具包提供了两个专门的命令:ip和tc用于实现高级的路由功能,有关ip命令的文文件可查看以下地址: 
http://snafu.freedom.org/linux2.2/docs/ip-cref/ip-cref.HTML 

源IP路由 
缺省情况下,TCP/IP数据包是通过检测目的IP地址,然后在路由表中查找一个到达目的地的路径。路由表可以通过netstat –r command命令来查看。如果发现了一个路径,数据包就会被送到网卡,否则,数据包就会被送到缺省的网关。对于大多数直接连入Internet的主机来说,缺省网关一般是某一个ISP。在本例中,这就意味着所有向外的Internet连接都通过DSL接口。这不是一个冗余Internet连接所希望发生的。很显然,当你在系统中加入一个线缆Modem后,你并不希望由DSL连接来响应你的线缆Modem连接。 
要解决这个问题,我们使用ip命令建立一个多路由表。而路由表的选择是基于流出数据包的IP地址的。这可以通过以下的命令来实现: 
# Setup source IP routing rules for DSL 
ip rule add from 63.89.102.157 lookup 1 
ip route add 10.0.0.0/24 via 10.0.0.1 table 1 
ip route add 0/0 via 63.89.102.1 table 1 


# Setup source IP routing rules for cable modem 
ip rule add from 65.3.17.133 lookup 2 
ip route add 10.0.0.0/24 via 10.0.0.1 table 2 
ip route add 0/0 via 65.3.17.1 table 2 
如果一个流出的数据包的源IP地址为63.89.102.157 (DSL),那么就在路由表1中选择,它有两条路径: 
> ip route list table 1 
10.0.0.0/24 via 10.0.0.1 dev eth0 
default via 63.89.102.1 dev eth1 
第一行把本地数据流路由到内部网,第二行则捕获所有剩下的数据包并通过DSL接口将其送到ISP。线缆Modem的路由表2使用的也是同样的方法。 

负载平衡 
在内部网中实现流出负载平衡,使用的是CONFIG_IP_ROUTE_MULTIPATH内核选项,它可以让系统有多个默认的网关。可以使用以下命令从/etc/sysconfig/network文件中删除默认网关,然后再使用高级路由功能设置缺省网关: 
# ip route add default equalize 
nexthop via 63.89.102.1 dev eth1 
nexthop via 65.3.17.1 dev eth2 
要查看高级路由表,使用以下命令: 
> ip route list 
255.255.255.255 dev eth0 scope link 
255.255.255.255 dev eth2 scope link 
255.255.255.255 dev eth1 scope link 
10.0.0.1 dev eth0 scope link 
63.89.102.157 dev eth1 scope link 
65.3.17.133 dev eth2 scope link 
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 
63.89.102.0/24 dev eth1 proto kernel scope link src 63.89.102.157 
65.3.17.0/24 dev eth2 proto kernel scope link src 65.3.17.133 
127.0.0.0/8 dev lo scope link 
default equalize 
nexthop via 63.89.102.1 dev eth1 weight 1 
nexthop via 65.3.17.1 dev eth2 weight 1 
CONFIG_IP_ROUTE_MULTIPATH内核选项将把所有这些路径(缺省路由)等同看待,然后再根据/usr/src/linux/Documentation/Configure.help来选择其特定的方式。Ip route命令的equalize选项,会让Linux内核基于IP地址平衡外部连接。对于一个特定的IP地址,内核会选择一个接口用于传输流出的数据包,然后内核会为该IP地址在路由缓冲中建一个记录。这样,其它到达的有相同IP地址的数据包就会使用同一个接口,直到该记录从路由缓冲中删除。我们可以使用ip route list cache命令来查看路由缓冲。
配置服务 
各种不同的服务(DNS、SMTP、HTTP、LDAP、SSH等) 可以通过DNS循环来实现。减少每一个DNS记录里的TTL(存活时间),让远程系统只能缓冲IP信息30分钟。这样流入的信息就会分散在两个IP地址上。对于流入的SMTP连接,在DNS中添加了两个MX记录,这样如果一个接口关闭了,电子邮件将从另外一个接口传送。 
你可以使用如下所示的dig命令来检查你的DNS配置: 
> dig alphapager.org any 

; <<>> DiG 8.2 <<>> alphapager.org any 
;; res options: init recurs defnam dnsrch 
;; got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4 
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 5 
;; QUERY SECTION: 
;; alphapager.org, type = ANY, class = IN 

;; ANSWER SECTION: 
alphapager.org. 30M IN A 63.89.102.157 
alphapager.org. 30M IN A 65.3.17.133 
alphapager.org. 30M IN NS ns.alphapager.org. 
alphapager.org. 30M IN NS ns.herdejurgen.com. 
alphapager.org. 30M IN SOA proxy.alphapager.org. 
root.proxy.alphapager.org. ( 
2001031000 ; serial 
3H ; refresh 
1H ; retry 
1W ; expiry 
30M ) ; minimum 

alphapager.org. 30M IN MX 10 ns.herdejurgen.com. 
alphapager.org. 30M IN MX 10 ns.alphapager.org. 

;; ADDITIONAL SECTION: 
ns.alphapager.org. 30M IN A 63.89.102.157 
ns.herdejurgen.com. 30M IN A 65.3.17.133 

;; Total query time: 98 msec 
;; FROM: pandora to SERVER: default -- 192.168.100.1 
;; WHEN: Sat Mar 10 22:15:22 2001 
;; MSG SIZE sent: 32 rcvd: 326 
所有的DNS记录(除了ns.alphapager.org和ns.herdejurgen.com)现在都被解析成了两个IP地址。比如: 
> nslookup seann.herdejurgen.com 
Server: proxy-in.alphapager.org 
Address: 10.0.0.1 

Name: seann.herdejurgen.com 
Addresses: 65.3.17.133, 63.89.102.157 
对于Apache,可以更改httpd.conf中的以下行来实现多个名字的虚拟主机: 
NameVirtualHost 63.89.102.157:80 
NameVirtualHost 65.3.17.133:80 
Inbound LDAP and SSH traffic are distributed using round-robin DNS and require no special configuration. 

启动脚本 
为了支持我们的网络配置,必须对启动脚本进行一些更改。这里更改的脚本是指Red Hat的,不过我们很容易将其推广到其它的Linux发行套件。系统启动以后,ip rule命令只能被执行一次。我们可以把以下的行添加到/etc/rc.d/init.d/network脚本中来实现这一目的: 
# Add non interface-specific static-rules 
if [ -f /etc/sysconfig/static-rules ]; then 
sh /etc/sysconfig/static-rules 
fi 
/etc/sysconfig/static-rules文件内容: 
# Setup source IP routing rules 
ip rule add from 63.89.102.157 lookup 1 
ip rule add from 65.3.17.133 lookup 2 


# Setup load balancing 
ip route add default equalize 
nexthop via 63.89.102.1 dev eth1 
nexthop via 65.3.17.1 dev eth2 
每一次对某个接口执行ifup后,都必须要执行ip route命令。我们可以在/etc/sysconfig/network-scripts/ifup-routes中添加以下行来实现该目的: 
# Add any advanced routes 
grep "^advanced " /etc/sysconfig/static-routes | 
while read ignore dev args; do 
if [ "$dev" = "$1" ]; then 
/sbin/ip route add $args 
fi 
done 
/etc/sysconfig/static-routes文件内容: 
advanced eth0 10.0.0.0/24 via 10.0.0.1 table 1 
advanced eth0 10.0.0.0/24 via 10.0.0.1 table 2 
advanced eth1 0/0 via 63.89.102.1 table 1 
advanced eth2 0/0 via 65.3.17.1 table 2 

防火墙 
我们都知道,出于安全性的考虑,只要主机连接在Internet上,就应该有一个防火墙阻止恶意的信息访问主机。设置防火墙时,首先决定哪一些服务可以通过Internet访问,然后关闭所有其它的服务。当然并不是说运行了防火墙就万事大吉了,事实上,任何一个你允许通过防火墙来访问的服务都可能有自己安全上的漏洞,所以你必须经常注意更新你的应用程序,以使其具有最新的补丁。 
大部分防火墙只支持外部网和内部网有单一的连接。因此,要支持多个外部网接口,就必须要自己写一些防火墙脚本。第一个用于编写脚本的工具是基于数据包的ipchains,它随Linux 2.2内核一起发行。第二个工具是基于数据包的iptables,它随2.4版的内核一起发行。 
Iptables是ipchains的下一代,因其支持连接跟踪,所以功能更加强大。Iptables的可扩展性也非常不错,我们可以在不更改基本的源代码的前提下为它增加一些新功能(比如字符串匹配)。Ipchains和iptables都会把信息通过一系列的规则链,以决定是否接受或者拒绝接受该数据包。 
Iptables 中使用了三个规则(或者称"链")表(filter、nat和mangle)来过滤数据包。在ipchains中,三个对应的规则分别为INPUT、FORWARD和OUTPUT。INPUT分析刚到达网络接口的数据包,FORWARD分析经过伪装的数据包。而OUTPUT分析即将流出网络接口的数据包。图2描述的是ipchains防火墙中数据包通过不同的规则链的过程。

图2 ipchains数据包的传输过程 

在iptables的nat表中,增加了两个规则,它们是PREROUTING和POSTROUTING。这些规则用于实现伪装以及网络地址翻译。所有流入或者流出的数据包都必须通过这些规则链。在iptables中INPUT和OUTPUT规则链用于处理去往防火墙的数据包,而FORWARD规则链则只用于处理数据包伪装。图3描述了数据包在iptables防火墙的不同规则链的过程。

图3 iptables数据包的传输过程 

在iptables中,magle表使用PREROUTING和OUPUT链来让用户修改数据包中的IP标识,比如TTL或者TOS(服务类型)。 

防火墙内核配置 
要想建立起一个基于Linux 2.2内核的ipchains防火墙,必须在内核配置文件中配置以下的功能: 
CONFIG_IP_FIREWALL=y 
CONFIG_IP_MASQUERADE=y 
CONFIG_IP_MASQUERADE_ICMP=y 
CONFIG_IP_ROUTE_TOS=y 
CONFIG_SYN_COOKIES=y 
而要建立一个基于Linux 2.4内核的iptables防火墙,就必须在内核配置文件中配置以下功能: 
CONFIG_IP_NF_IPTABLES=y 
CONFIG_IP_NF_CONNTRACK=y 
CONFIG_IP_NF_MATCH_LIMIT=m 
CONFIG_IP_NF_MATCH_PSD=m 
CONFIG_IP_NF_MATCH_STATE=m 
CONFIG_IP_NF_MATCH_IPLIMIT=m 
CONFIG_IP_NF_MATCH_STRING=m 
CONFIG_IP_NF_FILTER=m 
CONFIG_IP_NF_TARGET_REJECT=m 
CONFIG_IP_NF_NAT=m 
CONFIG_IP_NF_TARGET_MASQUERADE=m 
CONFIG_IP_NF_TARGET_REDIRECT=m 
CONFIG_IP_NF_MANGLE=m 
CONFIG_IP_NF_TARGET_TOS=m 
CONFIG_IP_NF_TARGET_LOG=m 
CONFIG_IP_ROUTE_TOS=y 
CONFIG_SYN_COOKIES=y 
现在,这些核心功能中的一部分在主流Linux 2.4内核的版本中还不可用,不过它们可能作为补丁被添加进去。要把这些功能添加到内核中,必须安装Linux 内核2.4.13版本和iptables1.2.4版本,可以在以下网址获得源程序: 
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.13.tar.gz 
http://netfilter.filewatcher.org/iptables-1.2.4.tar.bz2 
按以下步骤把iptables补丁加到内核中: 
1、在/usr/src/linux目录下安装Linux 2.4.13,并运行它。 
2、把iptables-1.2.4.tar.bz2解压到它自己的目录中。 
3、iptables-1.2.4# make patch-o-matic 
选择"yes"到以下补丁: 
string 
psd (port scan detection) 
iplimit 
因为并不是每个补丁都兼容,因此只选择需要的补丁即可。 
4、iptables-1.2.4#开始安装 
5、/usr/src/linux# make oldconfig 
在CONFIG_IP_NF_MATCH选项时回答"m"。 
6、重新编译内核并重启。 

防火墙脚本 
配置防火墙脚本的基本流程是依次设置INPUT、FORWARD和OUTPUT规则。Iptables防火墙脚本还要设置PREROUTING和POSTROUTING规则。各脚本都有注释,描述什么信息被接收或者拒绝。REJECT会忽略数据包并且给发送者返回一个ICMP信息,告诉他信息已经丢失。而DENY(ipchains)或者drop(iptables)则在丢弃数据包后,不做任何回复。在有人探测主机的特定端口时,该功能可以让系统仿佛不存在,从而有效地保护系统。在本文的防火墙脚本中,设计成不给远程系统作响应。 
要在Red Hat 7.1上配置防火墙脚本,先把脚本放在/etc/init.d/firewall中,然后执行以下命令: 
# chkconfig firewall on 
要为你的系统配置防火脚本,还必须编辑以下两行,以定义内部网和外部网的接口: 
INT_IFACE="eth0" 
EXT_IFACES="eth1 eth2" 
INPUT规则链在防火墙上为服务开了一个口,所以对于特定的系统,你必须编辑服务列表 。在ipchains防火墙中,流入连接可以使用以下的行: 
# ACCEPT TCP connections for various 
# services found in /etc/services 
for service in ftp ssh smtp domain 
http auth ldap https; do 
ipchains -A INPUT -i $EXT_IFACE -p tcp 
-d $IP $service -j ACCEPT 
done 
防火墙脚本在不同的服务间循环,这在主机上是允许的。在本例中,这些服务是FTP、SSH、Sendmail、DNS、HTTP、ident、LDAP和HTTPS。这些基于TCP协议的名字和端口号可以在/etc/services文件中找到。 
通过以下规则,在ipchains防火墙脚本中,INPUT链还可以接收任何源自本地的连接: 
# ACCEPT non-SYN TCP packets on 
# unprivileged ports (returns) 
ipchains -A INPUT -i $EXT_IFACE -p tcp 
! -y -d $IP 1024: -j ACCEPT 

# ACCEPT all UDP packets on unprivileged ports 
ipchains -A INPUT -i $EXT_IFACE -p udp -d $IP 1024: 
-j ACCEPT 
ipchains不支持连接跟踪,而iptables一个很大的改进即是支持这一功能。这就意味着数据包只有和一个活动的连接相符,才能被接收。在iptables防火墙脚本中使用以下规则来处理: 
# ACCEPT return TCP/UDP traffic (stateful firewall) 
iptables -t filter -A INPUT -m state 
--state ESTABLISHED -i $EXT_IFACE 
-p tcp -d $IP --dport 1024: -j ACCEPT 
iptables -t filter -A INPUT -m state 
--state ESTABLISHED -i $EXT_IFACE 
-p udp -d $IP --dport 1024: -j ACCEPT 
因为UDP是一个无状态协议,iptables连接跟踪维护一个状态表,并且只对源自内部网的信息作出响应。 
Iptables防火墙脚本接受向内的连接并且根据下面所列的规则在连接跟踪数据库中加入一个新的连接: 
# ACCEPT inbound TCP connections for various 
# services found in /etc/services 
for service in ftp ssh smtp domain 
http auth ldap https; do 
iptables -t filter INPUT -m state 
--state NEW,ESTABLISHED -i $EXT_IFACE 
-p tcp -d $IP --dport $service -j ACCEPT 
done 
我们可以通过查看/proc/net/ip_conntrack文件来查看连接跟踪。 
以下iptables规则允许在TCP端口20上有主动模式的FTP连接请求: 
# ACCEPT active FTP data connections on firewall 
iptables -t filter -A INPUT -m state --state RELATED 
-i $EXT_IFACE -p tcp -d $IP --dport 1024: 
--sport ftp-data -j ACCEPT 
在网络内部的连接,FORWARD规则会通过NAT把连接进行伪装。使用NAT,大部分协议都可以正常工作,只有很少一部分需要一个重写IP地址的模块。对于主动模式的FTP连接,需要一个辅助程序来通过防火墙。你可以使用modprobe命令加载ip_masq_ftp(ipchains)或者ip_nat-ftp(iptables)模块,以实现对主动FTP连接的伪装。这样,处于主动的FTP连接的远程机器,为了传输数据,会要求连接本地机。这时,ip_masq_ftp模块会重新修改FTP连接中的数据包,使得内部机器看起来就像是直接连接在Internet上一样。对于被动模式的FTP连接,可以使用TCP端口21来传输数据,以避开这个问题。值得注意的是,因为FTP的密码在网络上是以文本的形式传输的,所以并不安全。要建一个安全的FTP站点,可以使用sftp,它在通信时使用的是安全的套接字。Sftp随着OpenSSH客户端工具起发行。 
对于各种应用程序的伪装模块,可以在/lib/modules/'uname -r'/ipv4 (ipchains) 或者/lib/modules/'uname -r'/ kernel/net/ipv4/netfilter/ (iptables)目录中找到。 
FORWARD使用以下的iptables规则来伪装通过防火墙的数据包: 
# ACCEPT new outbound traffic (stateful firewall) 
iptables -t filter -A FORWARD -m state —state NEW,ESTABLISHED 
-i $INT_IFACE -s $INT_NET -j ACCEPT 

# ACCEPT return traffic (stateful firewall) 
iptables -t filter -A FORWARD -m state —state NEW,ESTABLISHED,RELATED 
-i $EXT_IFACE -s ! $INT_NET -j ACCEPT 

# Pass Internet traffic to internal network unmodified 
iptables -t nat -A POSTROUTING -o $INT_IFACE -j ACCEPT 

# Masquerading outbound connections from internal network 
iptables -t nat -A POSTROUTING -o $EXT_IFACE -j MASQUERADE 
OUTPU规则中还可以通过配置TOS(服务类型)标识来实现信息传输的先后次序。很多IPS都容易忽略TOS标识。事实上,由于CONFIG_IP_ROUTE_TOS内核选项判断信息流顺序时正是基于这一标识,所以这一标识非常有用。这就意味着,当一个交互式的应用程序(比如SSH)运行时,你可以让高带宽的应用程序(比如FTP)以最大的吞吐量运行,也不会使交互延迟。也就是说,可以让FTP不影响SSH连接的性能。 
TOS标识在iptables防火墙mangle表中的PREROUTING和OUTPUT规则中设置。以下规则会让SSH数据包的延迟最小: 
iptables -t mangle -A PREROUTING -j TOS 
--set-tos Minimize-Delay -p tcp --dport ssh 
iptables -t mangle -A OUTPUT -j TOS 
--set-tos Minimize-Delay -p tcp --sport ssh 
OUTPUT规则还可以限制系统对各种ICMP信息的响应。使用以下的配置,我们可以允许ICMP响应ping和traceroute,而不响应时间戳: 
# ACCEPT various ICMP messages 
for message in echo-reply destination-unreachable 
source-quench redirect echo-request 
time-exceeded parameter-problem; do 
ipchains -A OUTPUT -p icmp -s 0/0 $message -j ACCEPT 
done 


防火墙的维护 
要检查防火墙规则的效率,可以使用以下命令来执行防火墙脚本: 
# ./firewall status 
该命令输出的结果中,如果前两列是零,那么就意味着没有与规则相符的数据包。DENY和drop规则的零意味着没有人试图得用特定的规则对你进行**。ACCEPT规则的零意味着没有接受符合该规则的信息。 
如果想查找防火墙规则的错误,那么务必要要在ipchains命令后加上-l选项,这样就可把REJECT和DENY规则的信息写入/var/log/messages文件。Iptables防火墙脚本会创建一个特别的规则链dropLOG,它将会记录被拒绝的数据包。做为管理员,应该经常查看这些信息,以发现潜在的**者。 

结束语 
以上说了那么多,你是不是有点犯晕,没关系,如果你在实际中,亲身实践一遍,你可能会说,不过如此。 

我公司的网络环境为:20余台电脑,10M共享式以太网。向电信申请了ADSL接入,接入方式为虚拟拨号(动态IP),收费标准为每月200元,180小时。采用Linux作为代理服务器实现ADSL上网共享。根据公司规模小、管理任务简单的情况,没有设专职的网络管理员。 
为了控制费用,将每月的上网时长限制在180小时之内,制定的允许上网时段为:周一至周五,每天9:00~17:00。这样,每月22或23个工作日,每天开通8小时,月累计时长大体为180小时。 
最初的做法是,在代理服务器上将ADSL拨号命令加入到系统启动文件中,开机就上网,每天定时开通代理服务器。随着用户需求的增加,又要由同一台服务器提供局域网内的WWW、FTP等服务。考虑使用Linux操作系统提供的功能,实现ADSL上网共享的定时开通。在服务器上要实现的目标规划为:DHCP、WWW、FTP服务7×24小时开通;ADSL上网共享服务每周一至周五,每天9:00定时开通,17:00定时关闭。由于没有配备UPS,还要考虑服务器断电、恢复供电后重新启动的情况。 
分析设置的思路: 
1. 系统启动时: 
(1) 自动加载DHCP、WWW、FTP服务; 
(2) 检查系统日期、时间,如果在周一至周五、9:00~17:00之间,开通ADSL连接。 
2. 定时事件: 
(1) 周一至周五每天9:00,开通ADSL连接; 
(2) 周一至周五每天17:00,关闭ADSL连接。 
定时使用系统提供的crontab命令进行设置。以root身份登录,在终端提示符下执行crontab –e编辑定时任务,内容是: 
0 9 * * 1-5 adsl-start 
0 17 * * 1-5 adsl-stop 
这个定时任务的目标是,周一至周五,每天9点,进行ADSL的虚拟拨号连接(adsl-start);17点,关闭ADSL连接(adsl-stop)。 
服务器启动时,检查系统时间,如果符合ADSL开通时段,应该立即提供ADSL上网共享服务。在启动文件/etc/rc.d/rc.local的最后加入下列命令: 
HOUR=`date +%H` 
WEEK=`date +%W` 
if test $HOUR –ge 9 –a $HOUR –lt 17 –a $WEEK –ge 1 –a $WEEK –le 5 
then 
adsl-start 
fi 
上述命令实现的目标是,检查系统时钟的星期、小时数,如果是星期一至星期五,9点至17点之间,则进行ADSL虚拟拨号连接(adsl-start)。 
以上设置,经过一个多月的使用,效果良好,实现了无人值守的上网共享定时服务。 
安装的Linux版本为Redhat Linux 7.2专业版(里仁9CD套装)。服务器主要配置为PII 350、128M、30G、双网卡,没有软驱、光驱、显示器,机器在SETUP中电源管理设置为断电自动恢复(Auto Resume on Power Failure)。 
对于涉及的crontab、date等Linux命令和bash编程知识感兴趣的朋友,请查看Linux手册获得深入了解。上面提供的定时设置,只需稍加修改,就可以适用于模拟拨号、ISDN拨号以及通过网卡连接等各种上网共享环境。
双网卡服务器的网络负载平衡如何设置?
双网卡负载均衡服务器 

前言:市面上现在天生支持绑定功能的网卡不多,而且多是出身名门的高档服务器网卡,身价不菲,设置过程也比较专业,使用和维护都不简便。难道我等平头百姓,攥着几十元的廉价8139的兄弟们就无缘领略双网卡绑定的快感了吗?非也,今天我就教大家一招,只需一款小小的软件,就可以用普通的8139之类的网卡体验一把双网卡绑定的愉悦,这个软件就叫做"NICExpress",可能行家们已经捂着嘴乐了,呵呵,笔者的出发点是给菜鸟兄弟们排难解惑,穷办法自娱自乐,说得过火的地方,大家不要见笑,DIY的乐趣就在于此啊。 

朋友或许会问了,为什么要用双网卡呢?用双网卡有什么好处?所谓双网卡,就是通过软件将双网卡绑定为一个IP地址,这个技术对于许多朋友来说并不陌生,许多高档服务器网卡(例如intel8255x系列、3COM服务器网卡等)都具有多网卡绑定功能,可以通过软硬件设置将两块或者多块网卡绑定在同一个IP地址上,使用起来就好象在使用一块网卡。 

多网卡绑定的优点不少,首先,可以增大带宽,假如一个网卡的带宽是100M,理论上两块网卡就是200M,三块就是300M,当然实际上的效果是不会是这样简单的增加的,不过经实际测试使用多个网卡对于增加带宽,保持带宽的稳定性肯定是有裨益的,如果交换机等相关条件不错的话,这个效果还是很能令人满意;其次,可以形成网卡冗余阵列、分担负载,双网卡被绑定成"一块网卡"之后,同步一起工作,对服务器的访问流量被均衡分担到两块网卡上,这样每块网卡的负载压力就小多了,抗并发访问的能力提高,保证了服务器访问的稳定和畅快,当其中一块发生故障的时候,另一块立刻接管全部负载,过程是无缝的,服务不会中断,直到维修人员到来。 

OK,现在就手把手的教大家如何用50元来打造出双网卡的效果!

先下载软件(点击这里下载),这是最新版本4.0,只有2.15M,软件的兼容性已经做得很好,支持win98/Me/2000/XP/2003。基本上支持目前市场上常见的各种网卡,百兆和千兆网卡都可以用来绑定,但是千万注意,最好用于绑定的网卡是完全相同的,至少也是基于同一芯片的,这样多块网卡才能合作得比较好。切记不要把10M网卡和100M网卡绑定在一起,那样根本起不到提升作用。 

下载完软件,先不忙安装,咱们还是先准备好硬件。 

第一部分:硬件安装 

虽然,理论上讲绑定越多网卡在一起,最终效果提升就越明显,但是考虑到复杂程度,这里就以绑定双网卡为例进行说明,如果读者觉得好玩,兴致很高的话,按照下面方法愿意绑定多少就绑定多少个网卡,其实一般同一台服务器,绑定2-3块网卡也就够了,太多了,据说因为链路聚合的先天缺点,会过多占用服务器资源,反过来会影响服务器速度(关于这个我没实验,不过我觉得凡事都离不开物极必反的道理,适度最好)。 

然后,抱出笔者的一台私有服务器,呵呵,虽然破旧一点,不过可是立功不小啊,上面现在运行着FTP、MAIL等服务,几百个朋友的EMAIL都是通过它来传递的啊。配置情况为intel810主板(集成显卡)+256MSD内存+10GIDE硬盘(系统盘)+120GIDE硬盘(存放互联网垃圾)。系统软件是windows2000高级服务器版。 

废话少说,开干,打开服务器机箱,把两块网卡拧在主板PCI插槽上,拧好了,看看还不错 

拿出珍藏的10M-8口集线器,哈哈,别笑话,我手头只有这个,能说清楚方法就可以了,如果是读者自己DIY,请务必选一台好的交换机,至少要10/100M自适应的,这是网络通畅的关键,别象我把100M网卡连在10M集线器上,那速度怎么也好不了啊。做几条网线,把集线器、网卡连接起来,集线器连入上级交换机,因为是在家里实验,所以,我就把集线器的Uplink口连入家用路由器的任意一个网口里,路由器则连入我家ADSL"大猫"。 

第二部分:设置调试 

下面要进行设置及调试了,也就是要将这两块8139D廉价网卡,如同高档服务器网卡那样绑定在一起,使用同一个IP地址,同时同步工作。其过程并不复杂,估计20分钟足够了。 

将刚刚下载的NIC Express软件的安装包NIC4.rar解压缩得到安装文件"NICExpressW2KEE.exe",双击它启动安装程序,一路NEXT,软件提示输入unlock key(注册码),如果没有注册码,就只好点击Demo,选择试用,这样可以获得30天的免费试用期,在这30天里如果觉得不错,你可以想办法去弄一个注册码(怎么弄?找小编问,他可能有,哈哈)。 

到下图所示界面,软件提示选择是否开启LOAD Balancing 功能?什么是LOAD Balancing 功能呢?LOAD Balancing的中文意思可以翻译为负载均衡,在这里就是网络负载均衡。也就是当多块网卡被绑定合一之后,当数据流量很大的时候,软件会自动调整,将数据流量负载均衡地分配到各个网卡上,以减轻单块网卡的压力,达到畅快的访问效果。我们绑定双网卡,其中目的之一就是为了实现负载均衡,我们自然要开启这个功能,所以,在这里一定要选择"Enabled"。当然,如果你在这里选择错了也没关系,今后也可以通过NIC Express软件管理界面开启。 

继续一路NEXT,在Windows XP里安装时如果遇到提示"NIC Express Virtual Miniport"没有通过Windows测试,无法验证它同Windows XP的相容性,不要理会,选择"仍然继续"就行了。

到了下图所示界面,就到了真正绑定网卡的时候了: 

大家看到这个界面一共分为上、中、下,三个窗口,上面的是空白,中间的写着8139-2,这个8139-2是我自己起的绑定之后的网卡组的名称,原来这里默认写的是New array,也可以不修改,你也可以根据自己喜好,写成别的名字。在最下面的窗口里列出了目前服务器上安装的两块网卡的名字。我们下一步就是要用鼠标选中下面的两块网卡名字,然后点击界面中间的Add键,把两块网卡加入上面的窗口里,这样两块网卡就这样被加入了网卡组里,初步绑定成一块"网卡"了,今后可以使用同一个IP地址了。 

点击OK继续,NIC Express出现一个配置界面,选项很多,但是不必太操心,因为这些配置都不必修改,使用默认值就可以了,直接点击OK、点击Finish完成安装进程。至此软件安装基本结束,剩下就需要对软件和网卡进行一些必要的设置工作。 

点击桌面"开始"菜单,选择执行菜单里的"NIC Express Enterprise Edition"选项,这是NIC Express软件自带的一个监控程序,首先点击"setting"选项,在这里可以设置网卡流量计量单位,可以按照Packets/Sec、Mbits/Sec、Kbits/Sec三种单位来计算,一般都是使用默认的Mbits/Sec来计算,也就是兆/每秒,其实在这里只需要修改一下"Graph Detail(图形显示)"即可,将默认的"By Protocol"改成"By Incoming/Outgoing",别的不需要改。 
如果你想分别观察绑定组中每块网卡的流量或者整个组的流量,只需在"select Device"选项中选择一下设备即可。最后点击"Advanced"选项,设定网卡绑定的工作模式,在这里也可以点击"Load Balancing Disable"来关闭网卡负载均衡功能。使用NIC Express绑定的双网卡组默认工作于"NIC Express ELB"模式下,这是NIC Express所特有的一种工作模式,实际效果很好。我们都知道利用昂贵的Intel PROSET绑定的Intel 8255x的组合是运行在"802.3ad"工作模式下的,这一模式在NIC Express中也可以选择,但是多数使用者在实际使用后都认为"NIC Express ELB"模式的效果优于"802.3ad"模式,大家今后可以自己实践测试比较一下。如果你也使用默认的"NIC Express ELB"模式,那么"Advanced"选项里也就不用改什么,一切默认即可。至此NIC Express的设置结束。

第三部分:"虚拟网卡"设定

最后还要看看网卡的设置,用鼠标在桌面"网上邻居"上点击右键弹出"网络和拨号连接"窗口,可以看到原来的两个网卡连接图标已经变成了三个,多出来的一个图标就是"NIC Express Virtual Adapter",这个就是绑定后的网卡组,这个网卡组的使用和使用单一网卡完全一样,相当于一个单一的"虚拟网卡"。

用鼠标在这个图标上点击右键选择属性,可以为这个"虚拟网卡"设定IP地址、子网掩码、网关等等,其实在安装"NIC Express"过程中,如果服务器原来的单一网卡已经设置了这些,那么"虚拟网卡"就会自动设定和原来的网卡一样。在这里选择"NIC Express Transport for Ethernet"还可以自由对网卡绑定组进行调整,例如,减少或者加入一块网卡,这个较之Intel PROSET要方便许多,Intel PROSET在增加或者减少绑定组里的网卡之前必须删除原来的绑定组然后重新创建。

好了,好了,至此一切都已经做好,我们的服务器已经成为一台地地道道的"双网卡冗余服务器"了,我们来运行一下,看看表现。 

第四部分:测试双网卡绑定后的效果

检查一下线路,前面说过两块网卡已经用网线连入10M集线器(这就相当于机房机柜里的百兆交换机),集线器的Uplink口连入了家用路由器的任意一个网口,路由器通过ADSL大猫接入互联网(北京512K包月ADSL),这样服务器就已经和互联网连通了,按下Power键启动服务器,由于服务器里面已经安装了动态域名软件,服务器启动之后,很快与国际域名www.usacase.com连接到一起(具体过程请看不久前发表在太平洋网站的《绝对疯狂!1G容量的邮件服务器自己打造》),这时只要访问www.usacase.com域名,即可从世界各地访问到我的服务器了,我让上海的一个朋友用FTP软件登陆这台"双网卡冗余服务器",下载一个50M的压缩文件包。嚯,只见服务器上的两块8139D网卡的指示灯同时闪烁起来,闪烁的频率完全同步,煞是好看! 

再看那台古董级10M集线器,两个接上网卡的接口指示灯也是飞快同步闪烁,说明两块网卡在同步工作,同时分担访问的流量。上海的朋友说感觉速度不错,毕竟只是512K的ADSL,也仅能看看网卡同步闪烁的美丽效果了。 

然后,我又在局域网里进行了传输实验,因为有那个10M集线器的瓶颈,所以效果不是很好,但是也能看出一些明显改善。从局域网另一台使用单个杂牌10M8029网卡的电脑上通过网上邻居访问已经用NIC Express绑定了双8139D网卡的服务器,传输200M文件,通过"NIC Express Enterprise Edition"中的曲线监控图观察到,双网卡绑定组的传输速率从8M/s起步,最高达到8.2M/s,两机之间平均传输速率比较稳定,偶尔有大幅度的波动,是软件正在调整两块网卡的负载均衡,只有零点几秒就恢复正常,基本稳定在7.5-8M/s左右,已经接近那个10M集线器的最大传输极限。之后,从服务器上删除一块网卡,再进行两机传输实验,发现传输最高速率已经骤然减少到5M/s,而且传输过程中速率上下波动很大,平均传输速率也就3M/s左右,可见前后差异还是很明显的。
 

你可能感兴趣的:(集群的负载均衡技术)