VIF上的负载平衡如何工作?
适用场景
Data ONTAP 7
Data ONTAP 8
问题解答
VIF/ifgrp 类型概述
NetApp 实施的中继称为VIF。这背后的理论取决于您设置的VIF类型。三种类型的VIF (在Data ONTAP 8及更高版本中称为ifgrp) 为:
- 单模式—无负载平衡、严格故障转移
- Multi-mode—负载平衡
- LACP—负载平衡、具有低级别连接验证
标准单模式VIF/ifgrp
如果一个接口上的物理链路断开、则网络会话将持续存在、并故障转移到VIF中的另一个接口(一个VIF中最多可以有16个接口)。
这是最简单的VIF实施、因为没有交换机配置。
注意:单个VIF可以分布在不同的交换机上、因为它们不需要特定的交换机配置。但是、多个 VIF的所有端口都必须连接到一个交换机。这种支持取决于交换机、但大多数交换机不支持将多个VIF连接到不同的交换机。
标准多模式VIF/ifgrp
多模式 VIF/ifgrp允许所有成员接口用于流量。 此模式允许进行故障转移、并增加可供多个连接主机或TCP 流使用的潜在聚合带宽。
但是、一个常见的误解是、所有可用的"负载平衡"算法都允许给定的单个主机利用总聚合带宽。
换言之、如果 创建的多模式或LACP VIF/ifgrp包含四个1 Gbps成员接口、则有时会假定能够利用4 Gbps的主机(可能安装了1 Gbps网络接口卡)在与四个成员的VIF/ifgrp通信时可实现高达4 Gbps的速率。 实际上、每个主机(或 "-b port"情况下的TCP/UDP流)只能利用一个成员接口。 在此示例中、给定主机或TCP/UDP 流可用的最大带宽为1 Gbps。 但是、不同的主机或流可以使用不同的成员接口、从而减少端口使用和争用。
因此、VIF/ifgrp允许多个主机或流每秒向此存储控制器发送和接收高达4 Gbps的数据、但每个主机或流只能达到1 Gbps。
此行为并非NetApp特有、它是现代交换机中使用的802.3ad链路聚合的一项基本原则。
LACP VIF/ifgrp
LACP vifs/ifgrp在功能上与多模式VIFs/ifgrp相同、但有一个例外。 LACP使用链路 聚合控制协议(LACP)添加了802.3ad链路故障检测功能。 LACP不会更改负载分布的工作方式、它只会为VIF/ifgrp添加一层故障检测
使用LACP、 VIF/ifrgrp的物理接口成员(例如物理端口)将验证它是否可以 与直接连接的交换机端口交换低级协议数据单元(PDU)。 如果无法交换这些PDU、则会从VIF/ifgrp中删除成员接口。 LACP 只能在一级VIF/ifgrp上配置、因为只能在物理接口(物理端口) 与交换机上的端口之间交换PDU。
负载平衡算法
多模式和LACP vifs/ifgrp有4种负载平衡类型:
IP地址
流量平衡基于源的IP地址。这是默认设置、每个主机最多可以使用VIF/ifgrp中的一个成员接口。
MAC地址
流量平衡基于源的MAC地址(通常在路由环境(即路由器)中每次都是相同的地址)、并允许每台主机在VIF/ifgrp中最多使用一个成员接口。
轮循
无法预先确定以太网数据包要通过的传出接口。传输的响应将以轮循方式使用成员接口。 这是唯一能够确保在不利条件下实现真正负载平衡的方法、例如、IP和/或MAC地址分布不当的单个或多个顶级主机。
注意:在Data ONTAP 7.3.1中、不再支持循环。
注意:轮 循负载平衡可能会由于传输路径中的分钟差异而导致数据包传输无序。 这会增加TCP 重复ACK和重新传输。 因此、与轮循负载平衡结合使用时、某些协议和应用程序的性能不会达到令人满意的水平。
端口
基于源和目标IP地址以及传输层端口号的流量平衡。也称为IP+port。在Data ONTAP®7.3.1D3和7.3.2版之后提供。 由于此选项会将TCP/UDP端口号添加到计算中、因此一个主机可以 向存储控制器传输多个TCP流、每个流都使用VIF/ifgrp中的不同成员接口。 这样就可以使带宽使用量高于单个成员接口中可能的吞吐量。
ONTAP 负载平衡实施
对于基于IP和MAC的负载平衡的工作原理、存在一些混淆。 在Data ONTAP 7.3.2中、用于在多模式或LACP VIF/ifgrp中平衡成员接口之间的流量的算法发生了更改。
7.3.2之后的Data ONTAP版本:
自Data ONTAP 7.3.2起、多模式或LACP ifgrp/VIF使用"SuperFastHash"实施 、利用源和目标IP 地址的最后16位(-b IP)、源和目标MAC地址的最后16位(-b mac)或源和目标IP地址的最后16位 以及源和目标TCP 端口(-b端口)。
与在 7.3.2之前的Data ONTAP版本中使用的算法相比、该算法的输出可实现更动态、更平衡的分布。 但是、结果仍然相同、因为每个TCP 流只会与一个接口相关联、从而只允许每个TCP流具有一个端口的带宽。
7.3.2之前的Data ONTAP版本:
7.3.2之前的文档将此公式表述为:
((source_address XOR Destination _address)% number_on_links)
上述公式的示例:
FilerA:
VIF上的IP地址:10.10.7.31
VIF中的接口数:4 (接口编号为0、1、2、3)
平衡类型:IP
Test Machine:IP地址:
10.10.5.6
从测试计算机发出网络请求时、文件管理器将查看源的最后一个八位字节、并对最后4位执行XOR以确定流量将返回的接口。
源的最后一个八位组是:00000110
目标的最后一个八位组:00001111
XOR等效:00001001等于9 (最后4位)
除以4等于2,其余(模数)为1。这意味着返回流量将从1号接口返回。
这是一项测试。设置如下:
FilerA:VIF上的IP地址:10.60.192.181
VIF中的接口数:2 (接口编号为0和1)
平衡类型:IP
Test Machine:
IP address:10.60.192.205
从测试机I:
- 通过NFS挂载文件系统
- 已通过mkfile创建10M文件
在此操作期间、VIF统计信息如下所示:
f840-rtp2> vif stat mvif1 1
Virtual interface (trunk) mvif1
e3b e3a
Pkts In Pkts Out Pkts In Pkts Out
42822 19395 42040 20131
1 0 1 0
1 0 1 0
0 0 0 0
2 0 2 0
2 0 2 0
4 0 4 0
0 0 0 0
3 0 3 0
2 0 2 0
3 0 3 0
0 0 7372 3849
0 0 1 0
1 0 1 0
1 0 1 0
2 0 2 0
其数学原理如下:
源的最后一个八位组是:10110101目标的最后一个八位组
:11001101
XOR等效:0111000等于8 (最后4位)
除以2等于4、其余(模数)为0。这意味着返回流量将从0号接口(即E3A)返回。
VIF测试设置
- 在文件管理器上创建多模式VIF (标注接口):
vif create multi-vif_name interface_1 interface_2 - 在交换机上、为文件管理器所连接的交换机端口创建EtherChannel组:
set port channel Blade/Interface_list mode desirable - 验证端口通道是否已设置:
show port channel - 将IP地址分配给VIF:
ifconfig vif_name ip_address网络掩码XXX.XXX.XXX.XXX up - 确保文件管理器正在通过NFS导出文件系统。
- 从UNIX测试客户端对文件管理器的VIF执行Ping操作。
- 使用VIF的IP地址挂载从文件管理器派生的文件系统。
- 打开文件管理器的telnet窗口、然后执行"VIF stat VIF_name 1"
- 将目录更改为挂载点。
- 获取测试计算机和文件管理器的最后一个八位字节、然后执行XOR。将最后4位相加。为该值添加标注。
- 将上一个值除以接口数、其余值将为流量将输出的接口数。
- 执行"mkfile 10m testfile"、监控telnet窗口并查看哪个接口具有传入/传出流量。
追加信息