Dell Unity:如何更改 LACP 中继或绑定负载平衡算法(戴尔可纠正)
Summary: 链路聚合控制协议 (LACP) 流量在通过 LACP 中继或绑定写入 Unity SP 时是均衡的,但在针对读取请求发送响应时不是均匀均衡的。
Symptoms
在某些联网条件和环境中,默认算法可能默认使用单个接口。
例子:
当源MAC地址相同时(也就是使用路由器时),MAC将始终相同,并且用于传输的端口将始终相同。
此外,在特殊情况下,不同的 MAC 也可能产生相同的值。
例如,如果 MAC 始终以偶数(0、2、4、6、8、A、C 或 E)结尾,并且 LACP 中继或绑定中有两个端口,则哈希的计算也会每次都通过同一端口引导流量。
LACP 中继或绑定显示流量未平衡,平均使用单个接口而不是所有接口。
这可以在生产网络上确认(由网络交换机系统管理员进行),也可以通过查看 Unisphere 中 “系统 >性能”下的图形网络显示来确认。
netstat -i' Service Shell 中的输出。
Cause
Unity 上的 LACP 使用第 2 层作为其默认“xmit_hash_policy”。
使用 Layer2+3 作为“xmit_hash_policy”旨在提供比单独使用 Layer2 更平衡的流量分配,尤其是在需要第 3 层网关设备才能到达大多数目标的环境中。
参考:https://www.kernel.org/doc/Documentation/networking/bonding.txt
Layer2 使用硬件 MAC 地址和数据包类型 ID 字段的 XOR 来生成哈希。
公式为
hash = source MAC XOR destination MAC XOR packet type ID slave number = hash modulo slave count.
Layer2+3 使用 layer2 和 layer3 协议信息的组合来生成哈希。
哈希是使用硬件 MAC 地址和 IP 地址的 XOR 组合生成的。
公式为
hash = source MAC XOR destination MAC XOR packet type ID hash = hash XOR source IP XOR destination IP hash = hash XOR (hash RSHIFT 16) hash = hash XOR (hash RSHIFT 8) And then hash is reduced modulo slave count.
第 2 层和第 2+3 层均符合 802.3ad 标准。
Resolution
对于 Unity OE 代码 4.3 及更高版本:
将 xmit_hash_policy 使用 svc_network_bond 命令。
Dell Unity™ 系列版本 4.3:服务命令技术说明 — 第 74 页。
用法:
svc_network_bond [-h|--help] -d <device> {-s -o <option> -v <value>} {-g [-o <option>]}
语法类似于以下示例:
service@(none) spb:~> svc_network_bond -s -d bond23 -o xmit_hash_policy -v 2
可接受的值 xmit_hash_policy 是:
0 或第 2 层默认 设置
此参数使用硬件 MAC 地址的 XOR 来生成哈希。
1 或第 3 层+4 使用 上层协议信息(如果可用)生成哈希。
这允许到特定网络对等体的流量跨越多个从属节点,尽管单个连接不会跨越多个从节点。
2 或第 2+3 层 使用第 2 层和第 3 层协议信息的组合来生成哈希 - 模式 2 或第 2+3 层算法符合 802.3ad 标准。
对于 Unity OE 代码 4.2.3.9670635 及更低版本:
请联系 戴尔客户服务,并参考此 KBA 编号。
对于 Unity OE 代码 5.3.x 或更高版本
进行更改不需要服务 shell,也无需重新启动。
下面是在我们实验室的xmit_hash_policy中设置 Unity 阵列的示例。
此 Unity 阵列配置有称为 bond22 的 LACP 中继。
使用服务帐户通过 SSH 登录到 Unity 阵列。
首先,检查其xmit_hash_policy设置为什么。
# svc_network_bond --get --device bond22 -o xmit_hash_policy INFO: Selected device: bond22 INFO: Option to show: xmit_hash_policy INFO: Execution code: 0 xmit_hash_policy=0 #
接下来,将xmit_hash_policy设置为 2
# svc_network_bond --set --device bond22 -o xmit_hash_policy -v 2 INFO: Selected device: bond22 INFO: Option to modify: xmit_hash_policy INFO: Requested value: 2 WARNING: Do you want to proceed? [yes/no]: yes <<<<<< sometimes y works and sometimes it fails on the first attempts. Retry then. INFO: Execution code: 0 INFO: Option 'xmit_hash_policy' has been successfully changed. #
# svc_network_bond --get --device bond22 -o xmit_hash_policy INFO: Selected device: bond22 INFO: Option to show: xmit_hash_policy INFO: Execution code: 0 xmit_hash_policy=2 #
Additional Information
netstat 和 arp 要求启用服务 shell。
示例 'netstat -i' 输出,其中显示绑定的成员,并可用于确定流量是否正在哈希处理。
在此示例中,“bond20”(LACP 绑定)由接口“eth20”和“eth21”组成。
请注意 TX-OK 列中的差异,该列表示来自 Unity 的出站流量。
21:12:03 service@(none) spb:~> netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg bond20 9000 0 101724658 0 11 0 126087418 0 0 0 BMmRU cmin0 9000 0 14341258 0 0 0 11301712 0 0 0 BMRU eth2 1500 0 0 0 0 0 0 0 0 0 BMU eth3 1500 0 0 0 0 0 0 0 0 0 BMU eth10 1500 0 0 0 0 0 0 0 0 0 BMU eth11 1500 0 0 0 0 0 0 0 0 0 BMU eth12 1500 0 0 0 0 0 0 0 0 0 BMU eth13 1500 0 0 0 0 0 0 0 0 0 BMU eth20 9000 0 52249885 0 1 0 38317 0 0 0 BMsRU eth21 9000 0 49474773 0 10 0 126049101 0 0 0 BMsRU eth22 1500 0 0 0 0 0 0 0 0 0 BMU eth23 1500 0 0 0 0 0 0 0 0 0 BMU eth_int 9000 0 14341055 0 0 0 11301598 0 0 0 BMRU eve_br0 1500 0 16 0 0 0 3656 0 0 0 BMRU lo 65536 0 963282566 0 0 0 963282566 0 0 0 LRU mgmt 1500 0 1405994 0 64 0 360538 0 0 0 BMRU mgmt_vdev 1500 0 356150 0 64 0 326216 0 0 0 BMRU srm 1500 0 135650 0 64 0 5 0 0 0 BMRU vetheve1 1500 0 16 0 0 0 3647 0 0 0 BMRU
服务 shell 上“arp”的输出示例,显示每个 IP 地址的 MAC 地址(硬件地址)。
这些应该不同,才能使 LACP 在多个物理端口之间准确地对流量进行负载平衡。
有多个接口必须按您使用的接口进行筛选。
使用
'ip addr' 要找到”Iface“,分配给要调查的 IP 地址。
19:23:33 service@(none) spa:~> arp Address HWtype HWaddress Flags Mask Iface 10.98.25.61 ether 00:25:b5:02:01:fc C bond20 10.98.25.60 ether 00:25:b5:02:00:1c C bond20 10.98.25.70 ether 00:25:b5:02:00:dc C bond20 10.98.25.63 ether 00:25:b5:02:01:8c C bond20 10.98.25.65 ether 00:25:b5:02:01:6c C bond20 10.98.25.62 ether 00:25:b5:02:01:dc C bond20 10.98.25.64 ether 00:25:b5:02:01:9c C bond20 10.98.25.67 ether 00:25:b5:02:01:0c C bond20 10.98.25.66 ether 00:25:b5:02:01:7c C bond20 10.98.25.59 ether 00:25:b5:02:00:0c C bond20 peer ether 8e:92:80:4d:2d:02 C eth_int 10.98.25.69 ether 00:25:b5:02:00:fc C bond20 10.98.25.1 ether 00:08:e3:ff:fd:90 C bond20 10.98.25.68 ether 00:25:b5:02:01:1c C bond20