微软的网络负载平衡(NLB)一直是网络管理员获得更高的性能和更高的可用性的一种低成本的选择。虽然微软的NLB没有其它专用负载平衡程序的那些功能,但是,价格却非常公道。然而,在运行和配置NLB之前,每一个服务器管理员都要知道网络交换机是如何工作的。
当交换机接收一个信息段的时候,交换机要根据这个信息段中的目标MAC地址决定把这个信息段发送到哪一个端口。大多数经常阅读SearchNetworking网站内容的读者都非常了解这个情况。为了做出明智的决策,交换机保持一个“发送数据库”。这个数据库包含所有的端口列表,以及每个端口以外的MAC地址。再说一次,我知道这不是突发新闻。但是,请忍耐一下听我说。现在你认识到了FDB入口并不是网络工程师设置的。IP子网是在路由器界面上设置的。交换机通过监视来自每个端口的信息段和不断跟踪源MAC地址来主动增加FDB数据库的内容。因此,当交换机收到来自特定的端口的特殊的MAC地址的时候,交换机就会把所有指向那个MAC地址的信息段发送到那个端口。但是,最重要的是要了解,如果这台交换机以前从来没有看到过那种MAC地址,这台交换机将把这个信息段发送到交换机的所有的端口,当然,发来信息的端口除外。(当交换机首次启动时,这是一种正常的操作。)
这与NLB有什么关系?
很高兴你问这个问题。
微软NLB的工作方式(主要是Windows 2000和缺省的Windows 2003)使用一个MAC地址发送出网数据。这个MAC地址与微软NLB在ARP(地址转换协议)应答中发送的MAC地址是不一样的。这个结果就是,进网的数据来到一个交换机FDB数据库中不存在的MAC地址,这样交换机就把这个进网的数据发送到所有的端口。交换机就这样允许网络中的所有的服务器接收这个数据,然后决定谁处理这个数据包。现在,你也许会想“哦,这太聪明了!” 但是,在你过分激动之前,你应该考虑一下这对你的网络设计有什么意义。
首先,你的交换机连接的所有的其它服务器怎么样?这些服务器会看到多少通信?这是不是一个问题?
第二,安全怎么样?你是否要让交换机在所有的数据包发送给服务器集群之前连接接收这些数据包的其它端口?或者,如果恶意黑客定期制作有你的服务器集群源地址的数据包,并且欺骗你的交换机把所有这些通信从这个服务器集群重新引导到其它的地方,你会怎么办呢?进行这样的故障诊断可不是闹着玩的。
第三,网络的其它方面如何?但愿你不是坚持把服务器连接到网络的核心的管理员之一,所有这些垃圾信息会发送给网络中的每一台交换机和每一个用户吗?
如果你目前使用这个技术,我强烈建议你升级到Windows 2003,这个操作系统支持基于多播的NLB。如果你在短期内不能安装Windows 2003,你可以通过阅读微软网站介绍的“最佳做法”文件来解决令人担心的这些问题。
……