《本文转译自 Forefront TMG (ISA Server) Product Team 博客文章How topatch a TMG array– some thoughts on NLB high availability”》

使用 TMG 队列的原因之一是它提供了 NLB,NLB 具有故障容错和网络负载均衡的功能。

NLB 依赖心跳技术(heartbeats)来判断集群节点是否正常工作。集群节点相互划分各自潜在的客户端 IP 地址(实际上使用 IP 的哈希值)并发送 heartbeats,由此通知网络中其它成员它们已经开启并工作。

一旦某个节点出错或关闭(发送 heartbeats 失败),其余的节点会接管该节点负责的 IP 哈希值,以保证服务覆盖到该节点正常服务的客户端。

这些技术与更新 TMG 队列中的节点有什么联系呢?

对于新建立的连接来说,以上机制是无可厚非的,但如果我们只是移除 TMG 机群中的一个节点呢?使用这种机制的已存在连接将会发生什么变化呢?正常工作的其它节点并不会发现被移除节点的连接状态已经改变,因此它所管辖的客户端 IP 将丢失服务。

如果你只是突然更新并重启 TMG 序列中的节点,这种情况就真的会发生。

那么如何避免这种情况?有没有可变通的方案呢?

一般情况下,NLB 会支持“drain mode“。

当你使用“drainstop”方式停止一个节点的服务,NLB 将仍然对这个节点所管辖的已存在连接提供服务,但它不会接受新的连接。队列中其他节点将代替已停止节点处理新的连接。

于是,如果你为了更新或安装补丁必须故意移除某个节点,可以在移除该节点之前先使用“drainsstopping”功能,继续使该节点负责处理的已存在的连接。

你可以参考以下步骤来为一个特定的 TMG 节点安装补丁:

1、使用“drain and stop”停止该节点,等待会话流量归零(可使用会话按钮查看);

2、点击“suspend”将该节点从 NLB 中移除(这样下次重启时 NLB 不会自动运行);

3、为该节点安装补丁;

4、确保安装好补丁的节点系统正常运行;

5、重启 NLB 把该节点重新加入队列。

以下截图显示了 TMG 管理控制台中的 NLB 相关选项:

负载均衡 最小连接数 负载均衡nlb_IP

参考资料:

http://technet.microsoft.com/en-us/library/cc725691.aspx

作者

Balint Toth
Support Escalation Engineer
Microsoft CSS Forefront Edge Team

技术校对

Eric Detoc

Escalation Engineer

Microsoft CSS Forefront EdgeTeam