考虑具有两个相同 WS2012R2 服务器的配置。两者都有四端口网络板。每个服务器都有一个 NIC 连接到其他服务器共享的子网,最终可供客户端计算机访问。每台服务器上的其余三个端口是“nic 组合”,并连接到仅由相关两台服务器共享的不同子网。我希望看到的是 SMB 流量优先通过更快的 3-nic 路径,并且仅在必要时才诉诸更拥挤的 1-nic 路径。
我可以相信 SMB3 中的负载平衡在这里能做正确的事情吗?如果不行,我可以应用某种类似于 tcp/ip 路由成本的权重吗?
答案1
我可以很放心地告诉您该产品将“做正确的事情”,但我没有代表性环境来准确模拟您所谈论的内容。
从技术角度来说,魔鬼在于服务器计算机通过 API 通信其网络接口的详细信息FSCTL_QUERY_NETWORK_INTERFACE_INFO
。这种协商实际上在 4.8 节中作为示例显示。[MS-SMB2]:服务器消息块 (SMB) 协议版本 2 和 3规范。不幸的是,规范中包含与网络连接选择相关的逻辑的部分只是说“客户端选择任何一个网络接口对来建立新连接...”。接口选择协议中有一些细微差别(微软很有帮助地将其从规范中省略了,尽管我认为有人可能会认为这种行为超出了规范)。本文例如,描述了“不可路由”(读取:APIPA 和链路本地地址)如何不用于 SMB 多通道。
除了上文中描述的“不可路由”地址之外,这确实让我怀疑产品中是否存在隐含的假设,即客户端/服务器对上的任意网络接口都能够进行通信。(这很可能是失败的根源,在某些奇怪的场景中,流量过滤/策略使该假设不成立,等待着被挖掘出来。)我猜想可能对与创建初始通道的接口位于同一子网中的接口有一些偏好。(如果微软公布了这种行为,那肯定会很好!)(我看到了我不是唯一一个思考这个问题的人, 至少...)
您可以从机器上执行操作Get-SmbMultichannelConnection
,查看在长时间运行的复制操作期间是否正在创建服务器之间的 SMB 多通道连接。-IncludeNotSelected
如果您想查看“未选择”的路径,请添加参数。
您可以使用 cmdlet 直接排除来自 SMB 多通道的连接New-SmbMultichannelConstraint
,但这本身并没有加权通道优先级 - 这只是排除(这不是您想要的)。
另外:我假设您正在使用 W2K12 中的内置 NIC 组合功能。您可能需要使用交换机检查所选的 LACP 哈希算法(在 Windows Server 中称为“负载平衡模式”)是否最佳。我见过有人谈论更改该模式以使用不同的交换机提供更高的吞吐量。