现在的位置: 首页 > 综合 > 正文

网络负载平衡

2017年01月11日 ⁄ 综合 ⁄ 共 5870字 ⁄ 字号 评论关闭
网络负载平衡(NLB)是IP负载平衡技术,它是Windows 2000 Advanced Server和Windows2000 DataCenter的一部分。有了NLB,传入的TCP通信、用户数据报协议(UDP)通信和一般路由封装(GRE)通信请求被分发给各个群集成员。分发的依据是基于服务器负载百分比设置的统计算法。通过使用网络载量平衡创建服务器群集,可增强Internet服务器程序的可用性,这些Internet服务器程序可以是用于Web、代理、域名服务(DNS)、FTP、虚拟专用网(VPN)和流式媒体服务器等程序。同时,网络载量平衡有助于调整你的服务器性能,以跟上不断增长的基于Internet客户的需求。同时NLB提供了动态伸缩功能,即在不影响客户机的情况下。自动适应群集内服务器的添加和删除。NLB是智能的,因为它可以检测到服务器故障,并将其从正运行的群集内悄悄地删除。集群资源从当前不可用的节点切换到可用的节点,重新提供服务叫做故障切换。通常的故障切换有两种类型:
  ★有计划切换:由系统管理员进行系统升级或软件维护而强制进行切换。
  ★故障切换:由于掉电、系统或软件故障而引起的切换。
  
  深入了解群集
  在对网络负载平衡的应用例子讲解之前,我们必须来了解群集这样一个概念。群集就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机。例如,一个提供Web服务的集群,对外界来看是一个大Web服务器。不过集群的节点也可以单独提供服务,我们来看看一个基本的群集图.
  
 

  实现群集的方法
  
  实现了群集在某种程度上就算是实现了负载均衡。均衡的意思就是要使外部的连接平均地分布到内部的服务器上。一般来说,我们可以通过下面儿种方式进行群集服务。
  1、网络地址转换(NAT)法。这种方法可能大家较熟悉,地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址,外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。我们还可以对Nat进行改造,创建多路NAT服务,使多个IP地址和网络通道混合使用。
  2、直接路由(Direct forwarding)法。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快、开销少。
  3、隧道技术(Direct forwarding)。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法,为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。
  总之,集群所能提供的服务是基于TCP/IP的Web服务、Mail服务。News服务、DNS服务、Proxy服务器等等。
  
  应用案例
  
  下面介绍一个用TurboLinux Cluster Server来实现一个负载均衡集群系统,用于提供Web和FTP的服务。其实这个例子在网上很多,大家还可以到网上去找找相应的资料。
  配置为:服务器共有12台,其中11台安装TurbolinuxCluster Server,1台安装Windows2000Sever。我们给外部提供Web和Ftp服务,要求外部的连接始终轮换的请求内部的服务器。具体配置如下:
  1、设置各台服务器的IP地址、子网掩码、路由等,调通网络,将一台TurboLinux服务器设置成DNS服务器,使其能够正向解析和反向解析。服务器名此例为pcl,域为test.com
  2、配置Cluster Server。执行Turbolinux clusteradmin,设置情况如下(注:箭头连接的是选单选项,箭头所指为下级选单,最后冒号后为设置情况)。
  
  
 

  
  网络设置:netmask 255.255.255.0
  
  配置集群各节点:因为TnrhnLinux Cluster Server本身能被工具自动同步,所以只需配置Windows2000 Server:→开始→设置→控制面板→添加新硬件→下一步→添加/排除设备故障→添加新设备→否,从列表选择硬件→其他设备→Microsoft:Microsoft Loopback Adapter→完成。桌面上右键单击"网上邻居"→属性→TCP/IP→设置IP地址、缺省网关、子网掩码(注:先设成:255.255.255.0)。开始→运行→regedit→找到注册表中跟Microsoft Loopback Adapter相关的项,将子网掩码改成:255.255.255.255.
  配置系统以便运行合适的服务、并配置适合控制管理器管理的配置,以便在控制管理器申使用。
  管理选单中执行内容同步:选t1cs_content_sync,输入密码,将复制控制管理计算机中的服务内容。在管理选单中执行设置同步:选tlcs_config_sync,输入密码,将复制控制管理计算机中的设置。现在己经可以进入运行状态,可将客户端连接在服务器的交换机上。客户端可以请求Web和FTP服务,需要查看运行情况可以用控制台从https://coml.blcserver.com:910管理。
  作为防火墙的计算机设备同样也需要负载平衡。通常,防火墙处于外部网和内部网之间,决定了哪些内部网络可以被哪些外部网络访问,以及哪些外部服务可以被内部人员访问。这样就造成了防火墙必定肩负着沉重的负担,而负载平衡恰恰可以缓解外部网络多主于网络带宽的压力,即在防火墙上面增加冗于功能。使用了负载平衡算法的冗余防火墙系统,能监测每个防火墙上的用户数目和流量,平等地动态分配单元进出的流量,保证所有安装的防火墙的性能处在最优化状态,这样整个系统处理数据流量的能力比单个防火墙就有了很大的提高。同时,不论处于备用状态还是负载均衡状态下,每个防火墙还监视其他设备的工作状态,当一个防火墙单元失效时。系统会将所有请求重新分配到其他单元上,并达到新的负载平衡。
  配置上面的防火墙体系,首先需要防火墙自身的支持。这种防火墙可以采用SecureCom 8001防火墙。其次需要对路由器进行设置,对进出外网的数据包进行转发才行。负载平衡应用到网络IDS的原理也和防火墙差不多,大家可以试着去揣摩一下。
  在程序编写上我们也可以用到负载平衡,只是现在的负载平衡很明显是用软件来替代硬件的算法,在速度上可能不是那么快,但效果还是很好的,可以缓解外部对内部服务器的要求。大家都使用过的QQ,其服务器就有很多台。而每次我们登录的服务器可能都不是一样的。尽管如此,也许我们登录的IP也只是一个群集IP地址(即这个IP地址会把我们重新定向到另一台我们所不知道的服务器上面。实现负载均衡)。很多大型的有实力的公司也会在全国各地建立自己的分站点,总不可能大家都去访问一台服务器吧,这样服务器很容易崩溃的。
  接下来,我们来和大家讨论一下如何在ASP程序里实现负载平衡。当我们创建交互式Web页面时最大的挑战之一是维持用户的状态,一个站点也许想记住你是谁、在n页之前你点击了什么。在这最后一次做了些什么、现在马上要向你显示什么。实现这些功能的途径有许多,如查询字符串、提交表单或Cookies,最强大的一种是ASP的Session对象。服务器可以在Session集台中跟踪一整群的变量。通过与用户的Session Cookie相匹配来保持每个用户有一个特定变量。只要用户在服务器上保持活跃,Session变量就维持它的状态。然后在大量用户的使用中跟踪用户会给服务器带来很大的负载。然而对真正的负载平衡来说,每当处于服务器上的用户点击一个连接时;它就转到另一个服务器上面去,从而改变服务器的状态,而每当浏览一个新页面时都潜在地丢失他们的Session信息。如果你发现自己是在这样的环境下编写代码,或者你怀疑你的站点最终是负载平衡的,可能只有4种方法来解决这个问题:完全不使用Session、使用临时Cookies、购买第三方组件来处理Session管理,以及仅对Web范围内的第一次点击进行负载平衡。
  
  1.根本不使用Sessions
  
  显然,绕过Sessions管理这个问题的一个途径就是根本不使用Sessions变量,但是你仍然受困于状态保持的问题。你可以使用最简单的方法跟踪用户,而不用写客户机。"一种不安全的方法是使用浏览器查询字符串,或用隐藏值进行表单置入,以便用户保持活跃状态。这将允许你给他们一个用户id,并将变量存储在一个所有的Web服务器都能到达的地方。比如说,我们保持了变量 Ship To Zip Code.Type Of Customer和 CustomerEmail,可以这样写:
  
 

  这样通过将所有的Session信息存储在数据库中,可以使这3个变量在每一页上都保持活跃,确保用户ID的值很难猜到,这很重要。当访问第一页时,将分配给用户的sessionID存储为用户名。当用户离开这一页时可以考虑清除这个数据,有效地重新生成ASP session对象。这可以手工完成,或者用一个限时程序将数周以上的记录删除。
  
  2.使用临时Cookies
  
  对于特别的非敏感数据,直接向客户机中写入信息是有意义的。比如说,如果我们的站点只使用了一个变量来跟踪用户的ZIP码来得到用户在当地的交通记录,那么以HTTPCookie的形式将用户的ZIP码写入他们的机器应该不会产生什么危害。因为你可以将Cookie论写成浏览器关闭时失效,就可以使它们模仿一个Session变量的功能,也可以使他们是持久的,好在用户下一次访问时记住他。用Request对象Cookie的值可以为服务器所用。请求Cookie的值,然后将值带进来。所以在我们上面的例子中,可以这样做:
  

  你不得不把这些放置在每个页面的顶部,但是如果用户把3个Cookies都设置了,那么每一页都可以存取和使用这些用户特定的变量。你还可以在一个Cookie中设置3个变量,请看Ken Baumbach的文章Cookie Basics with ASP,里面有设置变量的更多信息。如果你认为用户可能在浏览器上使Cookie无效,这种方法就不适用。但是越来越多的站点要求使用Cookies,Web用户也越来越熟练了。有可能相对很少的用户会使Cookies无效,但是这要在执行这一方法之前进行考虑。虽然上面的方法肯定能奏效,但是它们削弱了ASP的功能。因为它限制了其中一个关键组件Session对象的使用。
  
  3.购买一个第三方组件
  
  第三方组件一般可以比TTS更好地处理Session.在这里我们向大家介绍一个组件:由SoftArtisans提供的SA-Session Pro。它使用2000文件系"统存储用户的信息,整个网络范围内的服务器都可以使用。第三方组件创建"Session引擎"把网络服务器和Session管理器分离。这样,每次用户都可以被重定向到相同的Session引擎,同时也对服务器本身的点击进行负载平衡。另一个可选择的第三方组件是Microsoft的成员服务器。它是Microsoft的站点服务器,它允许一个站点处理状态维护以外的问题。
  由于ASP已经越来越成为企业级网络应用程序的选择,而负载平衡也成为这些应用程序成功的最大威胁,在市场上会出现越来越多的第三方组件。ASP本身就是服务器对象或ActiveX组件,就是可以处理这些插件的。
  不知道大家现在对SQL 2000了解吗?现在SQL2000可以和Win2000合作处理用户的Cookies,这样一来,ASP的Cookies变量和Session可以都存储在SQL2000数据库中,我们就再也不需要购买其他不是很可靠的第三方组件了。
  
  充分利用Win2000 Adv server
  
  Windows 2000 Advanced Server操作系统在包含Windows 2000服务器标准版全部特性和功能的基础上,为需要高度可伸缩性。可靠性及可用性的组织机构提供了额外特性。Windows 2000Advanced Server是一种通用高可用解决方案,适用于当今的PC客户机服务器局域网。它通过共享的SCSI磁盘阵列将两套Windows2000系统耦合在一起,创建成一种单一系统环境,或称为集群。终端客户可以存取所有的集群资源。例如,磁盘共享、文件共享以及数据库应用程序,而且不必了解集群内部各服务器名字。如果一台服务器失效,集群的第二台服务器将立即接替其工作负荷,重新连接客户机,迁徒共享存储器和文件共享等。
  Windows 2000 Advancedserver集群适用工业标准部件,以非常低的成本提供系统级高可用性。对客户机来说,集群的寻址跟单一服务器寻址没有差别。集群通过冗余CPU、存储器以及数据路径提供高水平的可用性。Wmdows 2000的网络负载平衡群集最多可将 32台运行 Windows2000Advanced Server软件的服务器合并到单个群集中,以此对基于 TCP/IP的服务和应用程序提供可伸缩性和高可靠性。客户端可使用一个IP地址访问群集,并用其他 IP地址访问多宿主服务器。网络负载平衡群集通过在群集中的服务器之间分配客户机连接以提供高性能。如果服务器故障或因升级、测试和维护而脱机,群集将自动重新配置,而且客户机连接也将重新分配。
  如果要在非群集环境下访问某个网络应用程序或资源,网络客户端必须与物理服务器 (是指网络中由唯一的网络名称和 IP地址所标识的特定计算机)连接。如果该服务器发生故障,则无法访问应用程序或资源.Windows 2000 Advanced Server允许通过服务器群集创建虚拟服务器。与物理服务器不同,虚拟服务器不与特定的计算机相关联,但可以像组那样进行故障转移。如果虚拟服务器所在的节点产生故障,则客户端仍可以使用相同的服务器名访问它的资源。
  对硬件RAID的支持,MicrosoftWindows硬件兼容性列表也包含了用于群集的许多不同硬件RAID配置
  群集技术和负载平衡是不可分割的。我们用了很大的篇幅给大家介绍了群集技术,它是实现负载平衡的关键。而负载平衡技术的强大功能还必须大家通过亲身实践才能体会到。 

抱歉!评论已关闭.