随着各行业信息化建设的发展
,使人们对网络
服务器的处理能力、高可用性提出了更高的要求
。尤其是高度信息化的
企业中
,关键性网络服务已经成为
企业生成过程中的重要环节,服务的中断意味着生产的中断,机会的丧失
。
负载平衡不但可以有效地解决单
服务器的性能限制,而且可以实现故障的快速转移,保证服务的高可用性以及灵活的扩展性。于是,负载平衡几乎是每个网络管理员的必修课。本文章主要讲述windows2003在网络负载平衡(Network Load Balancing )方面的应用。
Windows的负载平衡主要是依靠组建网络负载平衡群集来实现的,支持WEB、FTP、Proxy、V、Windows Media、Telnet等服务器的负载平衡。
负载平衡的原理
NLB其实就是提供相同服务的一系列服务器同时监听服务请求,并允许在同一时间运行多个应用程序实例。NLB的核心是位于网络适配器驱动和网络层之间的WL.SYS的筛选器驱动。NLB把每个IP数据包分发到所有群集节点,并根据数据包的源地址、目标地址、传输层协议、端口、群集的配置参数以及算法做出由某个节点处理而其他节点丢弃此数据包的统一决定。
负载平衡的概念
配置负载平衡之前,需要理解几个重点概念。
群集IP 地址和子网掩码:群集的虚拟IP地址,是表现在客户面前的“外部”地址。
专用IP 配置和子网掩码:群集各节点的本地IP地址,唯一标识群集的各节点。
完整Internet名:能够访问此群集的D名称,比如cluster.it.com.cn。
群集操作模式:在方案的选择中详细讲述。
端口规则:windows2003中新加的功能,细化了控制微粒,可以阻止某节点特定应用程序的流量,而在windows2000中这是不能实现的。
优先级(单一主机标识符):范围在1-32之间(32是一个群集的最大节点数)。此值决定如何处理没有包含在任何为群集定义的端口规则中的传入网络通讯。具有最高优先级的主机(优先值最小)将处理所有这种通讯。
负载平衡的要求
操作系统的要求 在windows2003的所有版本系统中,NLB都是可用的。群集可以兼容以前的windows服务器操作系统(比如2000,NT4.0)。
网络结构的要求
NLB可以在连接到FDDI(光纤分布式数据接口),以太网,吉比特以太网的服务器上运行,但不能在Token Ring(令牌环)网络上运行。
网卡的要求
所有的网络适配器必须在Windows2003的硬件兼容列表中。一般情况下,服务器的网卡都会符合要求。
交换机和路由器的要求
当计划使用VLAN来防止交换数据洪水时,必须确保交换机支持VLAN设置;当使用多播时,部分路由器不支持把单播IP地址映射为一个多播MAC地址,需要手工设置。
通讯协议的要求
绑定到群集的网络适配器只能安装TCP/IP协议,可以必须静态分配,不支持DHCP。
应用程序的要求
首先必须是TCP或UDP通讯,而且确定当前应用程序或服务必须支持NLB。
负载平衡的设计
由于网络负载平衡不能根据CPU和内存利用率来分配流量,而且性能并不是随着节点数量的增加而线性变化的(因为随着规模的增大,由此产生的网络开销,CPU开销也随着增大),,所以正确的设计和规划负载平衡是至关重要的。
群集的实现需要群集内部的通讯(比如心跳信息和聚合通讯)以及管理和内容复制的数据传输。这部分通讯占用了网络的可用带宽。为了克服单网卡的局限性,可以使用双网卡,一个用于负载客户端的通讯,另一个用于传输内部通讯,管理和内容的数据。
群集操作模式的选择是设计的重要一步。单播模式是指各节点的网络适配器被重新指定了一个虚拟MAC(由02-bf和群集IP地址组成确保此MAC的唯一性)。由于所有绑定群集的网络适配器的MAC都相同,所以在单网卡的情况下,各节点之间是不能通讯的,这也是推荐双网卡配置的原因之一。为了避免交换机的数据洪水,应该结合VLAN使用。
多播模式下,网络适配器在保留原有的MAC地址不变的同时,还分配了一个各节点共享的多播MAC地址。所以,即使单网卡的节点之间也可以正常通讯。但单网卡的带宽占用、竞争网络适配器等缺点仍然存在。
此外,部分路由器(特别是Cisco产品)还不支持单播IP地址和多播MAC的ARP映射的自动创建,需要手工配置。IGMP多播(只有在选中多播时,才可以选择此项),在继承多播的优点之外,NLB每隔60秒发送一次IGMP信息,使多播数据包只能发送到这个正确的交换机端口,避免了交换机数据洪水的产生。
端口规则是windows2003的新特性。NLB提供3种筛选模式,可以针对端口规则采取禁止、多主机负载平衡和单主机的特殊处理。其中,多主机筛选模式提供了真正意义上的负载平衡,并且可以根据节点的实际处理能力进行负载量的分配。
单个群集的最大节点数为32,如果还不能满足需要,可以使用Round-Robin Domain Name Service把请求映射到多个群集上(但也因此引入了单点故障D,除非D冗余)。