How to :使用ISA Server 2004企业版中的缓存阵列路由
在使用多台ISA Server服务器时,ISA Server 2004企业版使用CARP(Cache Array Routing Protocol,缓存阵列路由协议)来将这些ISA Server计算机上的缓存无缝的、高效的集成在一起,就像是一个缓存一样。CARP允许ISA Server服务器高效的对客户的Web访问进行负载均衡,并对存储在它们之上的缓存内容进行划分。CARP为客户提供信息,识别阵列中最匹配它的访问请求的ISA Server,这样就不会在阵列成员内部间相互转发客户的请求数据;并且,CARP同样支持阵列服务器和链式代理间的选择。
在客户发起请求时,CARP使用基于hash的路由方式来决定阵列内部中解决客户请求的最佳路径,这个请求解决方案路由是基于阵列成员识别hash值和URLs的。对于任何给定的URL请求,浏览器或者下游代理服务器可以精确的知道信息存储在阵列中的某处,不管此URL对应的内容是否已经通过过去的请求进行了缓存、需要从Internet上获取或者在这次访问时对它进行缓存。
CARP提供以下强大的功能:
-
因为使用CARP来决定最佳请求解决路径,在代理服务器间不会产生查询消息(如果使用通用的Internet缓存协议(Internet Cache Protocol,ICP),就会在代理服务器间产生大量的查询信息),这样避免了在网络中有许多服务器时产生大量的查询信息,造成网络拥塞;
-
CARP消除了阵列内部代理服务器缓存重复内容的可能。在一个ICP网络内,如果有大量的URLs请求,具有多个代理服务器的阵列很快就会在每台服务器上缓存相同的内容;而基于hash路由方式的CARP会保持内部代理服务器缓存内容的唯一性,这样可以保持对于查询的快速响应和高效的使用服务器资源。
-
CARP具有很好的扩展性。因为CARP使用基于hash的路由,所以它和点对点的连接无关。当添加更多的代理服务器,CARP会越来越快和越来越高效。而ICP阵列必须通过传送查询信息来决定缓存内容的位置,没有扩展性,当添加更多的代理服务器时,ICP阵列需要使用更多的查询信息来决定缓存内容的位置。
-
CARP会自动进行调整,添加或删除阵列中的服务器。基于hash的路由意味着,当一个服务器离线或者在线时,只有很少的URL缓存需要重新建立。
-
CARP保证缓存对象根据你为服务器配置的负载系数来在阵列内全部的服务器上进行分布。
CARP在客户端和服务器端为请求提供高效的路由方式。在客户端,CARP通过客户选择一个阵列服务器来为客户发起的URL请求进行服务,ISA Server 2004按照以下步骤执行CARP算法:
-
客户端浏览器通过自动发现或者指定查询( Wpad.dat和Array.dll?Get.Routing.ScriptClient)脚本来选择一个阵列,这个脚本由ISA Server产生,然后在阵列中进行检索;
-
当一个用户在Web浏览器中输入一个URL时,脚本将从阵列服务器中进行计算,建立一个适合处理此URL的服务器列表;
-
浏览器连接到列表的第一个服务器,然后请求此页面。如果第一个服务器没有响应,那么将会联系列表中的第二个服务器,直到请求的对象得到响应为止;
-
此脚本对于每个给定的URL总是返回相同的服务器列表,这样确保每一个URL对应的内容只是在一个阵列服务器上进行缓存。
ISA Server产生的脚本实现CARP算法,此脚本包含了阵列内部的配置和当前状态信息。此脚本保证各ISA Server服务器上缓存的内容与其设置的负载系数一致。
当客户端浏览器通过预定、循环或者随机的方式选择阵列成员服务器后,向此服务器发起连接请求。当一个请求到达阵列成员服务器,服务器以请求的URL为参数运行CARP算法,然后决定适合此URL的最佳服务器,然后转发此请求到对应的服务器。服务器端CARP主要是在客户计算机没有配置或者配置不正确的请求下使用的。
一些Web站点要求客户在会话周期内使用同样的IP地址,对于这些Web服务器不应该使用CARP。你可以使用CARP例外来设置排除在CARP外的站点。阵列内部的ISA Server可能具有不同的硬件或者性能,你可能会在不同的服务器上分配不同的缓存负载。你可以使用CARP的负载系数来实现。
启用CARP时,阵列中的所有服务器上的缓存驱动器将被视为一个逻辑缓存驱动器。这样,缓存对象便可以有效地分布在成员服务器上。
要启用CARP,必须执行以下操作:
-
至少在阵列的一个成员服务器上启用缓存;
-
为阵列级的网络启用CARP。CARP将作用于此网络中客户所请求的对象;
-
为阵列成员配置负载系数。由于在默认情况下,每台服务器上的负载系数均设置为100,所以这一操作为可选的。如果您希望有更多的对象缓存到特定的服务器上,可以对此服务器配置更高的负载系数;如果将较少的对象缓存到该服务器上,则应配置较低的负载系数。
-
CARP功能要求阵列内部通讯所使用的网络侦听Web代理客户端请求。这一步骤非常关键,在默认情况下,阵列内部通讯网络是默认的内部网络,ISA Server已经对此网络侦听了Web代理客户端请求;但是在启用了NLB的时候,如果你修改了阵列内部通讯所使用的网络,那么你必须配置阵列通讯所使用的网络侦听Web代理客户端请求(启用Web代理服务)。
下图是我们的试验网络拓朴结构,
网络连接已经确认正常工作,Florence和Istanbul已经安装了ISA Server服务,共享安装在Florence上的配置存储服务器,并且同属FLORENCE阵列,阵列内部通信通过默认的内部网络进行。此次试验不涉及DNS,各台服务器的DNS服务器设置为空,各服务器的TCP/IP设置如下:
Florence
Internal:
-
IP:192.168.0.1/24
-
DG:None
External:
-
IP:61.139.0.1/24
-
DG:61.139.0.1
Istanbul
Internal:
-
IP:192.168.0.8/24
-
DG:None
External:
-
IP:61.139.0.8/24
-
DG:None
此次试验不涉及内部网络客户端的配置。要配置客户使用CARP的完整功能,只需要配置客户为Web代理客户即可,你可以在客户端浏览器属性中设置ISA Server为代理服务器或者使用ISA Server的自动发现特性,配置ISA Server的自动发现特性请参见“为防火墙客户和Web代理客户配置自动发现”一文。
在这个试验中,我们按照以下步骤进行:
-
启用缓存;
-
设置负载系数;
-
启用CARP和设置CARP例外;