Windows2016 NLB操作模式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40478570/article/details/102154766

                                                                               Windows2016 NLB操作模式

WIndows NLB的操作模式分为单播模式与组播模式

单播模式

在该模式下,NLB集群内的所有服务器的MAC都会被替换成一个集群MAC地址,他们通过此群集MAC地址来接收外部来的连接Web Fram的请求,发送到此群及MAC地址的请求,会被送到群集中的每一台服务器,不过采用单播模式的话,会遇到一些问题,以下是这些问题与解决方案

  • 二层交换机每个口所记录的MAC地址必端须唯一

如下图所示,两台服务器连接到一台两层交换及的两个端口上,这两台服务器的MAC都会修改为相同的02-BF-11-22-33-44,当这两台服务器的数据包发送到交换机时,交换机会将数据包的源MAC地址与入接口进行一对一的绑定,然而两个数据包的MAC地址都是02-BF-11-22-33-44,但是交换机的每一个端口所记录的MAC必须是唯一的,也就是不允许两个物理端口绑定一个相同的MAC地址

Windows NLB可以通过MaskSourceMAC功能来解决这个问题,它会根据每一台服务器的主机ID(HostID)来更改外发数据包中的源MAC地址,也就是将群集MAC地址中最高第2组字符改为主机ID,然后将此修改过的源MAC地址

例如下图中的集群地址为02-BF-11-22-33-44,而第一台服务器的HostID为01,则其外发数据包中的源MAC地址会被改成02-01-11-22-33-44,因此当交换机收到数据包后,其连接的物理接口对应的地址就为01-01-11-22-33-44,如此一来交换机就不会有相同MAC地址的问题了

  • Switch Flooding

NLB还会引起交换机泛洪的现象,以下图为例,虽然交换机的每一个接口记录的MAC地址是唯一的,但当路由器收到要发往集群IP地址220.10.11.5的数据包时,他会通过ARP协议来查询220.10.11.5的MAC地址,不过他从ARP响应数据包获得的地址确实群集MAC地址02-BF-11-22-33-44,因此他会将该数据包送到MAC地址02-BF-11-22-33-44,然而交换机没有任何一个接口与该MAC地址绑定,所以当交换机接收到该数据包时,便会将它从所有接口发送出去,也就是出现了Switch Flooding的现象

NLB单播模式的Switch Flooding算是正常现象,因为它让发送到此集群的数据包能够被送到该群集的每一台服务器,不过如果在此交换机上还有连接着不隶属于此集群的计算机的话,则Switch Flooding会对这些计算机造成额外的网络负担,甚至会因为其他计算机也收到专属于此集群的数据包而有安全上的顾虑

如果有其他计算机与NLB群集链接在同一台交换机的话,则解决Switch Flooding的方法则可如下图一样,将NLB群集内所有的服务器连接到一个HUB(集线器)后,再将HUB连接到交换机,同时停用前面所说的MaskSourceMAC功能,这样的话交换机只有这个端口会记录集群MAC地址,因此当路由器将数据包发送到交换机时,交换机只会将数据包从这个端口发送给集线器,而集线器收到数据包后,会将数据包发送到所有NLB集群服务器

★附注1:停用MaskSourceMAC功能的方法:运行注册编辑器regedit.exe,将位于以下路径的MaskSourceMAC键值改为0

HKEY_LOCAL-MACHINE\SYSTEM\CurrentControlSet\Services\WLBS\Parameters\Interface\Adapter-GUID

其中Adapter-GUID为网卡的GUID

★附注2:也可以通过VLAN技术来解决Switch Flooding问题,也就是将NLB群集内所有服务器所连接的端口划分为同一个VLAN,以便让NLB群集的流量局限在此VLNA内传输,不会发送到交换机中不属于此VLAN的接口

  • 群集服务器之间无法相互通信的问题

如果网页内容直接放在Web服务器内,并利用DFS复制功能来保持服务器之间的网页内容一致的话,则采用NLB单播模式还有另外一个问题:群集服务器之间无法通信,因此群集服务器之间将无法通过DFS复制功能保持网页内容一致

当左侧服务器要与右侧固定IP为220.10.11.2的服务器通信时,他会通过ARP请求数据包来询问其MAC地址,而右侧服务器所回复的MAC地址是群集MAC地址02-BF-11-22-33-44,然而这个MAC地址也是左侧服务器自己的MAC地址,所以无法通信

集群服务器之间无法通信的解决方案为:为每一台服务器额外安装一块网卡,此网卡不要启用WindowsNLB,如此每台服务器内的这块网卡都保有原来的MAC地址,服务器之间可以通过这块网卡来互相通信


总结一下:单播模式共三个问题

  1. 多端口MAC地址冲突
  2. Switch Flooding
  3. 群集服务器之间无法通信

多播模式

多播数据包会同时被发送给多台计算机,这些计算机都是隶属于同一个多播组,他们组有一个共同的MAC多播地址,多播模式具有以下特性:

  • NLB群机内每一台服务器的网卡仍然保持原有的唯一MAC地址,因此群集成员之间可以正常通信,而且在交换机内每一个端口所记录的MAC地址就是每台服务器的唯一MAC地址
  • NLB群集内每台服务器还会有一个共享的群集MAC地址,他是一个多播MAC地址,群机内所有服务器都隶属于一个多播组,并通过这个多播MAC地址来接收外部的请求

多播模式下有以下问题:

  • 路由器可能不支持:以下图为例,当路由器接收到要发往群集IP地址220.10.11.5的数据包时,他会通过ARP来查询220.10.11.5的MAC地址,而他从ARP回复数据包中得到的MAC地址却是多播MAC地址,01-00-5E-7F-0B-05,路由器要解析的是单播IP地址220.10.11.5,可得到的确实多播MAC地址,有些路由器可能不接受这样的结果

★解决方案:在路由器内建立静态ARP表项,以便将群集IP地址映射到多播MAC地址,如果路由器不支持建立此类型静态数据的话,则需要更换路由器或改用单播模式

  • 仍然会有Switch Flooding现象:虽然每一个端口所记录的MAC地址是唯一的,担当路由器接收到发送到群集IP220.10.11.5的数据包时,他通过ARP来查询220.10.11.5的MAC地址时所获得的是多播MAC地址01-00-5E-7F-0B-05,因此他会将此数据包发送到01-00-5E-7F-0B-05,然而交换机内并没有任何一个端口绑定该MAC地址,因此当交换机收到此时便会将他送到所有的端口,如此便发生了Switch Flooding现象

★解决方案:我们在单播模式下已经解释过如何解决Switch Flooding现象,而在多播模式下,还可以通过支持IGMP snooping的交换机来解决Switch Flooding的现象,因为这种类型的交换机会窥探路由器与NLB群集服务器之间的IGMP包(加入组,脱离组),如此便可以得知哪些端口所连接的服务器属于此多播组,以后当交换机接收到要送到此多播组的数据包时,贬值会将它送往这些接口

★附注:如果IIS Web服务器只有一块网卡的话,就选用多播模式,如果IIS Web服务器拥有多块网卡,或网络设备不支持多播模式的话,就可以采用单播模式

IIS的共享设置

Web Farm内所有Web服务器的设置应该要同步,而在Windows Server2016的IIS内通过共享设置功能,将Web服务器的配置文件存储到远程计算机的共享文件夹内,然后让所有Web服务器都来使用相同的配置文件,这些配置文件包含:

  • ApplicationHost.config:IIS的主要配置文件,它存储这IIS服务器内所有站台,应用程序,虚拟目录,应用程序池等设置与服务器的通用默认值
  • Adminstration.config:存储着委派管理的设置,IIS采用模块化设计,Administration.config内也存储着这些模块的相关数据
  • ConfigEncKey.key:在IIS内建立ASP.NET环境时,有些数据会被ASP.NET加密,例如ViewState、Form Authentication Tickets、等, 此时需要让Web Farm内每一台服务器来使用相同的计算机秘钥(machine key),否则当其中一台服务器利用专有秘钥对数据加密后,其他使用不同秘钥的服务器就无法对其解密,这些共享密钥是被存储在ConfigEncKey.key中的 

本文绝大部分内容来自戴有炜先生原创的《Windows Server 2016网络管理与架站》

猜你喜欢

转载自blog.csdn.net/qq_40478570/article/details/102154766
今日推荐