在部署了网络负载均衡(NLB)的网络中,当某个客户针对NLB虚拟地址发起连接请求时, NLB通过某种NLB算法来确定(通常是根据发起请求的客户端源地址来决定)为客户服务的NLB节点。在NLB节点没有变动之前,对于某个客户,将总是由某个对应的NLB节点为它提供服务。ISA防火墙企业版中的集成NLB依赖于Windows服务器系统的NLB服务,对于客户发起的请求,也是采用相同的方式进行处理。
例如,对于一个具有三个NLB节点(ISA1、ISA2、ISA3)的ISA防火墙 NLB阵列,当一个客户(10.1.1.1)发起连接请求时,NLB通过NLB算法确定由ISA1为此客户服务;而当另外一个客户(10.1.1.2)发起连接时,NLB通过NLB算法确定由ISA2为此客户服务。在NLB节点没有变动时,客户10.1.1.1的连接请求将会始终通过NLB节点ISA1来进行处理;而客户10.1.1.2的连接请求则会始终通过NLB节点ISA2来进行处理。
当某个NLB节点出现故障时,NLB将在所有节点上重新进行汇聚,并重新根据 NLB算法来确定为客户提供服务的NLB节点。例如,此时ISA1节点出现故障,无法再提供NLB服务;则NLB重新进行汇聚,如果客户10.1.1.1 再发起连接请求,则就是ISA2或者ISA3来为它进行服务。
当NLB节点失效时,NLB可以让其他NLB节点来为客户提供服务。但是,如果NLB节点的NLB服务没有失效但是所提供的其他服务失效时,怎么办呢?
如下图所示,两台ISA防火墙属于相同的NLB阵列,分别通过不同的外部链路连接到 Internet,并且对内部网络提供NLB服务。两台ISA防火墙允许内部网络中的用户通过自己来访问外部网络,正在为不同的客户提供服务;如果此时, ISA1上的外部链路突然断开,会出现什么情况呢?
此时,由于ISA1上的NLB服务并没有出现故障,所以NLB会认为ISA1仍然是有效的 NLB节点,并且同样会分配客户给它。但是,由于外部链路断开,ISA1所服务的客户却不能再连接到Internet了。这当然就不能有效的实现网络负载均衡中的容错特性。
那么,出现这种情况时,该怎么办呢?
答案很简单,当出现这种情况时,停止ISA1上的NLB服务,这样,NLB会认为ISA1上的NLB服务已经失效,将重新汇聚NLB,并且重新分配客户。从而原来属于ISA1的客户可以通过仍然运行正常的ISA2来访问外部网络。
要实现ISA防火墙NLB的故障转移比较简单,微软已经考虑到了。你可以通过配置 ISA防火墙的连接性验证工具来实现当外部链路出现故障时进行相关的操作,但是要停止ISA防火墙上的NLB服务不是一件容易的事情。由于ISA防火墙上的NLB服务是和ISA防火墙服务集成的,所以你不能通过Windows的NLB stop命令来停止ISA防火墙上的NLB服务;微软也没有相关的关于如何停止ISA防火墙上的NLB服务的说明。在这种情况下,只能通过停止ISA防火墙服务来停止ISA防火墙上的NLB服务。
但是停止ISA防火墙服务后,无法依靠ISA防火墙本身启动ISA防火墙服务,这样又给故障恢复时的处理带来难题。当外部链路恢复的时候,还是需要你手动启动ISA防火墙服务才能将这台ISA防火墙正常加入NLB阵列中运行,这造成了额外的管理负担。不过你可以通过第三方的链路监测软件实现NLB的故障转移和自动恢复,例如KS-Soft Advanced Host Monitor或者GFI Network Server Monitor。你可以配置它们当外部链路出现问题时停止ISA防火墙服务,而当外部链路恢复时启动ISA防火墙。
在此我给大家演示一下如何实现ISA防火墙NLB的故障转移,网络拓朴结构如下图所示:
内部网络地址范围为10.1.1.0/24,部署了两台ISA企业版防火墙Florence 和Firenze,操作系统均为Windows server 2003 SP1,IP地址分别为10.1.1.1和10.1.1.2。对内部网络配置了NLB,NLB虚拟地址为10.1.1.254,
两台ISA防火墙上的NLB服务均工作正常。
Berlin是内部网络中的客户,IP地址为10.1.1.8,默认网关配置为NLB的虚拟地址10.1.1.254。
我已经创建了允许内部网络的所有用户访问外部网络的访问规则,已经确认所有网络连接工作正常。在进行整个部署之前,你必须预先考虑好如何配置有效的连接性验证方式,以及什么时候触发警告。如果要验证外部链路是否连接正常,你可以Ping离你最近的外部网络中的某台持续在线的服务器或路由器的IP地址。在此我通过配置连接性验证工具Ping我的DNS服务器61.139.2.69实现,如果连续两次不能Ping通时,则停止ISA防火墙服务。
本文中的操作步骤如下:
配置连接性验证工具;
配置警告操作;
测试;
配置连接性验证工具
打开ISA管理控制台,展开阵列,点击监视节点,点击右边面板的连接性标签,最后点击创建新的连接性验证程序链接;
在弹出的欢迎使用新建连接性验证程序向导页,输入连接性验证程序的名称,在此我命名为Ping 61.139.2.69,点击下一步;
在连接性验证细节页,在监视到此服务器或 URL 的连接栏,输入IP地址为61.139.2.69,然后在验证方法栏,选择发送一个 Ping 请求,点击下一步;
注:关于连接性验证工具的使用及详细描述,请参见理解ISA 2004的连通性验证工具一文;
在正在完成连接性验证程序向导页,点击完成;
此时,我们的连接性验证工具就创建好了,如下图所示,验证结果均正常。
配置警告操作
接下来我们就需要配置当连接性验证工具出现无连接的警告时,停止ISA防火墙服务。在ISA防火墙管理控制台中点击警报标签,然后在右边的任务面板中点击配置警报定义链接;
在弹出的警报属性对话框,在列表中找到无连接警报,然后点击编辑按钮;
在弹出的无连接属性对话框,首先在常规标签确认它是启用的,
然后在事件标签,由于我想当连续两次出现无连接事件(即连续两次不能Ping通61.139.2.69)时触发警告,所以勾选发生次数,然后输入2,其他保持默认,点击操作标签,
在操作标签,勾选停止选择的服务,然后点击选择按钮;
在弹出的选择 ISA 服务器服务对话框,勾选Microsoft 防火墙,然后点击确定;
点击两次确定返回到ISA管理控制台,最后点击应用按钮保存修改和更新防火墙配置,并且等待直到所有ISA防火墙服务器完成配置的同步。
测试
我们现在在客户机Berlin上访问ISA中文站进行测试,访问成功。
ISA防火墙的实时日志如下图所示,可以清楚的看到,是由Firenze为它提供的服务。
现在,我们把Firenze上的外部链路断开,由于默认情况下连接性验证程序每30秒执行一次,所以等待大约1分钟后,你会发现Firenze上的ISA防火墙服务已经自动停止了,如果在Firenze上的ISA管理控制台的警告中查看,你可以看到触发了以下三个警告,如图所示。
现在我们在Berlin上试试继续访问呢,访问仍然成功。
但是,你可以从ISA防火墙的实时日志中看到,已经不是Firenze而是Florence为它提供的服务了。
至此,ISA防火墙NLB的故障转移就完全配置成功了。