代码编织梦想

#创建bond0主设备并关联两个从设备enahisic2i2和enahisic2i3:
modprobe bonding
cat /sys/class/net/bonding_masters
echo +bond0 > /sys/class/net/bonding_masters
ifconfig bond0 up
cat /sys/class/net/bonding_masters
ifconfig enahisic2i2 down
echo +enahisic2i2 > /sys/class/net/bond0/bonding/slaves
ifconfig enahisic2i3 down
echo +enahisic2i3 > /sys/class/net/bond0/bonding/slaves
  #修改为mode4
echo -enahisic2i2 > /sys/class/net/bond0/bonding/slaves
echo -enahisic2i3 > /sys/class/net/bond0/bonding/slaves
ifconfig bond0 down
echo 4 > /sys/class/net/bond0/bonding/mode
cat /sys/class/net/bond0/bonding/mode

Linux以太网绑定驱动程序HOWTO

最新更新:2011年4月27日

最初发布:Thomas Davis <lda.gov上的tadavis>

更正,HA扩展:2000/10 / 03-15:

威利·塔罗(Willy Tarreau)

米奇·威廉姆斯<intel.com上的mitch.a.williams>

介绍

Linux绑定驱动程序提供了一种用于将多个网络接口聚合为单个逻辑“绑定”接口的方法。绑定接口的行为取决于模式。一般来说,模式提供热备用或负载平衡服务。另外,可以执行链路完整性监视。

绑定驱动程序最初来自Donald Becker的内核2.0的beowulf补丁。从那以后,它已经发生了很大的变化,并且来自极端Li​​nux和beowulf站点的原始工具将无法与此版本的驱动程序一起使用。

对于新版本的驱动程序,更新的用户空间工具以及向谁寻求帮助,请按照此文件末尾的链接进行操作。

1.绑定驱动程序安装

最流行的发行版内核随附作为模块可用的绑定驱动程序。如果您的发行版不存在,或者您需要从源代码编译绑定(例如,从kernel.org配置和安装主线内核),则需要执行以下步骤:

1.1使用绑定配置和构建内核

当前版本的bonding驱动程序位于最新内核源的drivers / net / bonding子目录中(可在http://kernel.org上找到)。大多数“自己动手”的用户都想使用kernel.org中最新的内核。

使用“ make menuconfig”(或“ make xconfig”或“ make config”)配置内核,然后在“网络设备支持”部分中选择“绑定驱动程序支持”。建议将驱动程序配置为模块,因为它是当前将参数传递给驱动程序或配置多个绑定设备的唯一方法。

构建并安装新的内核和模块。

1.2绑定控制实用程序

建议通过iproute2(netlink)或sysfs配置绑定,旧的ifenslave控制实用程序已过时。

2.绑定驱动程序选项

绑定驱动程序的选项在加载时作为参数提供给绑定模块,或通过sysfs指定。

模块选项可以作为insmod或modprobe命令的命令行参数给出,但通常在 /etc/modprobe.d/*.conf配置文件或特定于发行版的配置文件中指定(其中一些内容将在下一节中详细介绍)。

下面的“通过Sysfs手动配置绑定”部分提供了有关sysfs绑定支持的详细信息。

可用的绑定驱动程序参数在下面列出。如果未指定参数,则使用默认值。最初配置绑定时,建议在单独的窗口中运行“ tail -f / var / log / messages”以查看绑定驱动程序错误消息。

指定miimon或arp_interval和arp_ip_target参数非常重要,否则在链路故障期间会发生严重的网络降级。很少有设备至少不支持miimon,因此实际上没有理由不使用它。

具有文本值的选项将接受文本名称,或者为了向后兼容,将接受选项值。例如,“ mode = 802.3ad”和“ mode = 4”设置相同的模式。

参数如下:

active_slave

为支持它的模式指定新的活动从属(活动备份,balance-alb和balance-tlb)。可能的值是任何当前被奴役的接口的名称或空字符串。如果给出了名称,则从站及其链接必须打开,才能被选为新的活动从站。如果指定了空字符串,则将清除当前的活动从站,并自动选择一个新的活动从站。

请注意,这仅可通过sysfs接口使用。没有使用该名称的模块参数。

该选项的常规值是当前活动从站的名称,如果没有活动从站或当前模式不使用活动从站,则为空字符串。

ad_actor_sys_prio

在AD系统中,这指定系统优先级。允许的范围是1-65535。如果未指定该值,则它将65535作为默认值。

该参数仅在802.3ad模式下有效,可通过SysFs界面使用。

ad_actor_system

在AD系统中,这指定协议数据包交换(LACPDU)中参与者的mac地址。该值不能为NULL或多播。最好为此Mac设置本地管理员位,但驱动程序不强制执行。如果未提供该值,则系统默认为使用主服务器的mac地址作为参与者的系统地址。

该参数仅在802.3ad模式下有效,可通过SysFs界面使用。

ad_select

指定要使用的802.3ad聚合选择逻辑。可能的值及其影响是:

stable or 0

主动聚合器由最大聚合带宽选择。

仅当活动聚合器的所有从属服务器都关闭或活动聚合器没有从属服务器时,才重新选择活动聚合器。

这是默认值。

bandwidth or 1

主动聚合器由最大聚合带宽选择。在以下情况下会发生重新选择:

一个slave被添加到绑定中或从绑定中删除
任何从站的链接状态更改
任何从站的802.3ad关联状态更改
债券的管理状态更改为up

count or 2

主动聚合器由最大数量的端口(从站)选择。如上面“带宽”设置中所述进行重新选择。
当活动聚合器发生部分故障时,带宽和计数选择策略允许对802.3ad聚合进行故障转移。这使具有最高可用性(无论是带宽还是端口数)的聚合器始终处于活动状态。

此选项是在绑定版本3.4.0中添加的。

ad_user_port_key

在AD系统中,端口键分为三个部分,如下所示-

位 采用
00 双工
01-05 速度
06-15 用户自定义
这定义了端口密钥的高10位。值可以在0-1023之间。如果未指定,则系统默认为0。

该参数仅在802.3ad模式下有效,可通过SysFs界面使用。

all_slaves_active

指定应丢弃(0)或传递(1)重复帧(在非活动端口上接收)。

通常,绑定会丢弃重复的帧(在非活动端口上接收到),这对于大多数用户而言是理想的。但是有时候允许复制重复的帧是很好的。

默认值为0(丢弃在非活动端口上接收到的重复帧)。

arp_interval

指定ARP链路监视频率(以毫秒为单位)。

ARP监控器通过定期检查从设备来确定它们最近是否发送或接收了流量(精确的标准取决于绑定模式和从设备的状态),从而工作。常规流量是通过为arp_ip_target选项指定的地址发出的ARP探针生成的。

可以通过下面的arp_validate选项修改此行为。

如果在以太通道兼容模式(模式0和2)下使用ARP监视,则应将交换机配置为在所有链路上平均分配数据包的模式。如果将交换机配置为以XOR方式分发数据包,则将在同一链路上收到来自ARP目标的所有答复,这可能导致其他团队成员失败。ARP监视不应与miimon结合使用。值为0将禁用ARP监视。默认值为0。

arp_ip_target

指定当arp_interval> 0时用作ARP监视对等方的IP地址。这些是发送的ARP请求的目标,以确定到目标​​的链接的运行状况。以ddd.ddd.ddd.ddd格式指定这些值。多个IP地址必须用逗号分隔。必须至少提供一个IP地址,ARP监视才能起作用。最多可以指定16个目标。默认值是没有IP地址。
arp_validate

指定是否应在任何支持arp监视的模式下验证ARP探测和答复,或者是否应出于链接监视目的而过滤(忽略)非ARP流量。

可能的值为:

none或0

不执行验证或过滤。
active或1

仅对活动的从站执行验证。
backup或2

仅对备份从站执行验证。
all或3

对所有从站执行验证。
filter或4

过滤应用于所有从站。不执行验证。
filter_active或5

过滤将应用于所有从站,仅对活动从站执行验证。
filter_backup或6

过滤将应用于所有从站,仅对备份从站执行验证。
验证:

启用验证会使ARP监视器检查传入的ARP请求和答复,并且仅在从站接收到适当的ARP流量时才认为它处于启动状态。

对于活动的从属服务器,验证将检查ARP答复,以确认它们是由arp_ip_target生成的。由于备份从站通常不会收到这些答复,因此对备份从站执行的验证是在通过活动从站发出的广播ARP请求上进行的。某些交换机或网络配置可能会导致备用从站无法接收ARP请求的情况;在这种情况下,必须禁用备份从站的验证。

验证备用从站上的ARP请求主要是帮助绑定以确定在活动从站发生故障时哪个从站更可能工作,它并不能真正保证如果将备用从站选为下一个活动从站,则备用从站将正常工作。

验证在网络配置中很有用,在该配置中,多个绑定主机同时向通用交换机之外的一个或多个目标发出ARP。如果交换机和目标之间的链接发生故障(但不是交换机本身),则由多个绑定实例生成的探测流量将使标准ARP监视器误以为链路仍处于正常状态。使用验证可以解决此问题,因为ARP监视器仅考虑与其自身绑定实例相关联的ARP请求和答复。

过滤条件:

启用过滤将导致ARP监视器仅将传入的ARP数据包用于链路可用性。非ARP的到达数据包可以正常传递,但在确定从设备是否可用时不计算在内。

在确定从站是否已出于链接可用性目的而接收到流量时,过滤仅通过考虑ARP数据包的接收(任何ARP数据包,而不考虑源或目的地)来进行。

过滤在网络配置中很有用,在这种配置中,大量的第三方广播流量会使标准ARP监视器误认为链路仍然处于正常状态。使用过滤可以解决此问题,因为出于链路可用性目的仅考虑ARP流量。

此选项是在绑定版本3.1.0中添加的。

arp_all_targets

指定为了使ARP监视器将从站视为已启动,必须​​达到的arp_ip_targets数量。对于启用了arp_validation的从站,此选项仅影响活动备份模式。

可能的值为:

any或0

仅在任何arp_ip_targets可达时才考虑从属
all或1

仅在所有arp_ip_targets都可达时才考虑从属

downdelay

指定检测到链接故障后禁用从属服务器之前等待的时间(以毫秒为单位)。此选项仅对miimon链接监控器有效。下延迟值应为miimon值的倍数;如果不是,它将四舍五入到最接近的倍数。默认值为0。

fail_over_mac

指定活动备份模式是应将所有从属服务器在奴役时都设置为相同的MAC地址(传统行为),还是在启用后根据选定的策略对绑定的MAC地址进行特殊处理。

可能的值为:

none或0

此设置禁用fail_over_mac,并导致绑定在奴役时将活动备份绑定的所有从设备设置为相同的MAC地址。这是默认值。
active或1

“活动” fail_over_mac策略指示绑定的MAC地址应始终为当前活动从站的MAC地址。从站的MAC地址不变。而是在故障转移期间更改绑定的MAC地址。

此策略对于无法更改其MAC地址的设备,或拒绝使用自己的源MAC(会干扰ARP监视器)的传入广播的设备很有用。

此策略的缺点是必须通过免费ARP更新网络上的每个设备,而不是仅更新一个交换机或一组交换机(如果该交换机侦听传入的流量,则通常发生于任何流量,而不仅仅是ARP流量)以更新其表)以使用传统方法。如果免费ARP丢失,通信可能会中断。

当此策略与mii监视器结合使用时,在能够实际发送和接收之前断言链接的设备特别容易丢失免费ARP,并且可能需要适当的上延迟设置。

follow或2

“ follow” fail_over_mac策略导致通常选择绑定的MAC地址(通常是添加到绑定的第一个从设备的MAC地址)。但是,第二个及其后的从属设备在充当备份角色时未设置为该MAC地址。在故障转移时使用绑定的MAC地址对从站进行编程(以前处于活动状态的从站将接收新处于活动状态的从站的MAC地址)。

当使用相同的MAC地址对多个端口进行编程时,此策略可能会造成混乱或导致性能下降,这对于多端口设备很有用。

除非第一个从站无法更改其MAC地址,否则默认策略为none,在这种情况下,默认情况下会选择活动策略。

仅当绑定中不存在从属设备时,才可以通过sysfs修改此选项。

此选项是在绑定版本3.2.0中添加的。在绑定版本3.3.0中添加了“遵循”策略。

lacp_rate

选项,指定我们要求链接伙伴以802.3ad模式传输LACPDU数据包的速率。可能的值为:

slow或0
请求合作伙伴每30秒发送一次LACPDU
fast或1
请求合作伙伴每1秒发送一次LACPDU
默认为慢速。

max_bonds

指定要为此绑定驱动程序实例创建的绑定设备的数量。例如,如果max_bonds为3,并且尚未加载绑定驱动程序,则将创建bond0,bond1和bond2。默认值为1。指定值为0将加载绑定,但不会创建任何设备。

miimon

指定MII链路监视频率(以毫秒为单位)。这决定了检查每个从站的链接状态检查链接故障的频率。零值将禁用MII链接监视。值100是一个很好的起点。下面的use_carrier选项影响确定链接状态的方式。有关其他信息,请参见“高可用性”部分。默认值为0。

min_links

指定在声明运营商之前必须处于活动状态的最小链接数。它类似于Cisco EtherChannel最小链接功能。这允许在将绑定设备标记为已启动(载波打开)之前,设置必须处于启动状态(链接状态)的最小成员端口数。这对于诸如集群之类的更高级别的服务希望在切换之前确保最少数量的低带宽链接处于活动状态的情况很有用。此选项仅影响802.3ad模式。

默认值为0。这将导致在有活动的聚合器的情况下声明载波(对于802.3ad模式),而不管该聚合器中可用链接的数量如何。请注意,由于没有至少一个可用链接就无法激活聚合器,因此将此选项设置为0或1会产生完全相同的效果。

模式mode

指定一种绑定策略。默认值为balance-rr(round robin循环)。可能的值为:

balance-rr或0

在这里插入图片描述
循环策略:从第一个可用的从设备到最后一个可用的从设备按顺序传输数据包。此模式提供负载平衡和容错能力。

active-backup(主动备份)或1

在这里插入图片描述
主动备份策略:绑定中只有一个从节点处于活动状态。当且仅当活动的从站发生故障时,另一个从站才变为活动状态。绑定的MAC地址在外部仅在一个端口(网络适配器)上可见,以避免混淆交换机。

在绑定版本2.6.2或更高版本中,当在活动备份模式下发生故障转移时,绑定将在新活动的从属服务器上发布一个或多个免费ARP。如果绑定主接口和在其上面配置的每个VLAN接口都配置了至少一个IP地址,则将为其发布一个免费ARP。为VLAN接口发出的免费ARP标记有适当的VLAN ID。

此模式提供容错能力。下面记录的主要选项会影响此模式的行为。

balance-xor(平衡异或)或2

在这里插入图片描述
XOR策略:基于所选的传输哈希策略进行传输。默认策略是简单的[(源MAC地址 XOR 目标MAC地址 XOR 数据包类型ID --进行XOR运算)模数从设备计数]。可以通过xmit_hash_policy选项选择备用传输策略,如下所述。

此模式提供负载平衡和容错能力。

broadcast(广播)或3

在这里插入图片描述
广播策略:在所有从属接口上传输所有内容。此模式提供容错能力。

802.3ad或4

在这里插入图片描述
此模式根据802.3ad规范提供动态链接聚合。它使用选定的平衡传输策略来平衡和监视共享相同速度和双工设置的聚合组,以平衡传出流量。

IEEE 802.3ad动态链接聚合。创建共享相同速度和双工设置的聚合组。根据802.3ad规范,使用活动聚合器中的所有从设备。

出站流量的从设备选择是根据传输哈希策略完成的,可以通过下面介绍的xmit_hash_policy选项从默认的简单XOR策略中进行更改。请注意,并非所有传输策略都可能符合802.3ad,特别是关于802.3ad标准第43.2.4节的数据包错序要求。不同的对等实现对不合规的容忍度会有所不同。

先决条件:

1.基本驱动程序中的Ethtool支持,用于检索每个从站的速度和双工。

2.支持IEEE 802.3ad动态链接聚合的交换机。

大多数交换机将需要某种类型的配置才能启用802.3ad模式。

balance-tlb(传输负载平衡-Transmit Load Balancing)或5

在这里插入图片描述
传输负载平衡模式:不需要任何特殊交换机支持的通道绑定。

在tlb_dynamic_lb = 1模式下;输出流量根据每个从站上的当前负载(相对于速度计算)进行分配。

在tlb_dynamic_lb = 0模式下;会禁用基于当前负载的负载平衡,并且仅使用哈希分布来分配负载。

当前从站接收到传入流量。如果接收从站发生故障,则另一个从站将接管发生故障的接收从站的MAC地址。

先决条件:

基本驱动程序中的Ethtool支持用于检索每个从站的速度。

balance-alb(Adaptive load balancing)或6

自适应负载平衡:包括balance-tlb以及IPV4流量的接收负载平衡(rlb),并且不需要任何特殊的交换机支持。接收负载均衡是通过ARP协商实现的。绑定驱动程序在出局时拦截本地系统发送的ARP答复,并用绑定中一个从服务器的唯一硬件地址覆盖源硬件地址,以便不同的对等服务器使用不同的硬件地址。

来自服务器创建的连接的接收流量也得到了平衡。当本地系统发送ARP请求时,绑定驱动程序将复制并保存ARP数据包中对等方的IP信息。当ARP答复从对等方到达时,将检索其硬件地址,并且绑定驱动程序将向该对等方发起ARP答复,将其分配给绑定中的一个从属。使用ARP协商进行平衡的一个有问题的结果是,每次广播ARP请求时,它都会使用绑定的硬件地址。因此,对等方了解绑定的硬件地址,并且接收流量的平衡崩溃到当前从属。通过向所有对等方发送更新(ARP应答)以及它们各自分配的硬件地址来进行处理,从而重新分配流量。当将新的从站添加到绑定中并且重新激活不活动的从站时,接收流量也会重新分配。接收负载在绑定中的最高速度从站组之间按顺序(循环)分配。

当链路重新连接或新的从属服务器加入绑定时,通过向每个客户端发起具有选定MAC地址的ARP答复,接收流量将在绑定中的所有活动从属服务器之间重新分配。必须将updelay参数(在下面详细说明)设置为等于或大于交换机的转发延迟的值,以便发送给对等方的ARP答复不会被交换机阻止。

先决条件:

1.基本驱动程序中的Ethtool支持,用于检索每个从设备的速度。

2.基本驱动程序支持,用于在设备打开时设置其硬件地址。这是必需的,以便团队中将始终有一个使用绑定硬件地址(curr_active_slave)的从属,同时为绑定中的每个从属拥有唯一的硬件地址。如果curr_active_slave失败,则其硬件地址将与所选的新curr_active_slave交换。

num_grat_arp,num_unsol_na

指定故障转移事件后要发出的对等通知(免费ARP和主动的IPv6邻居通告)的数量。一旦新从站上的链路建立(可能立即),就在绑定设备和每个VLAN子设备上发送对等通知。如果数字大于1,则以peer_notif_delay指定的速率重复此操作。

有效范围是0-255;默认值为1。这些选项仅影响活动备份模式。分别为绑定版本3.3.0和3.4.0添加了这些选项。

从Linux 3.0和绑定版本3.7.1起,这些通知由ipv4和ipv6代码生成,并且重复次数不能独立设置。

packets_per_slave

在移动到下一个之前,指定要通过从属设备传输的数据包数量。当设置为0时,将随机选择一个从站。

有效范围是0-65535;默认值为1。此选项仅在balance-rr模式下有效。

peer_notif_delay

指定在故障转移事件后发出的每个对等通知(免费ARP和未经请求的IPv6邻居通告)之间的延迟(以毫秒为单位)。此延迟应为链路监视间隔的倍数(arp_interval或miimon,以活动状态为准)。默认值为0,这意味着要与链接监视器间隔的值匹配。

一个字符串(eth0,eth2等),指定哪个从站是主要设备。指定的设备在可用时将始终是活动的从站。仅当主设备离线时,才会使用备用设备。当一个从站优先于另一个从站时,例如,一个从站的吞吐量高于另一个从站时,这很有用。

主要选项仅对活动备份(1),balance-tlb(5)和balance-alb(6)模式有效。

primary_reselect

指定主从服务器的重选策略。当活动从站发生故障或主从站发生故障时,这会影响如何选择主从站作为活动从站。此选项旨在防止主从站与其他从站之间发生触发。可能的值为:

always 或 0(默认)

只要从站恢复正常,主从站就成为活动的从站。
better 或 1

如果主从站的速度和双工优于当前活动从站的速度和双工,则主从站在恢复时将变为活动从站。
failure 或 2

仅当当前活动从站发生故障并且主要从站启动时,主要从站才成为活动从设备。
在两种情况下,会忽略primary_reselect设置:

如果没有从站处于活动状态,则第一个要恢复的从站将成为活动从站。

最初被奴隶制时,主要的奴隶总是主动奴隶。

通过sysfs更改primary_reselect策略将根据新策略立即选择最佳活动从站。根据情况,这可能会或不会导致活动从站的更改。

为绑定版本3.6.0添加了此选项。

tlb_dynamic_lb

指定是否在tlb模式下启用流的动态改组。该值对其他任何模式均无效。

tlb模式的默认行为是根据该时间间隔内的负载来调整从属设备之间的活动流。这样可以提供良好的lb特性,但可能导致数据包重新排序。如果需要重新排序,请使用此变量禁用流改组,并依赖哈希分发仅提供的负载平衡。xmit-hash-policy可用于选择适当的哈希设置。

sysfs条目可用于更改每个绑定设备的设置,并且初始值从module参数派生。仅在绑定设备关闭时才允许更改sysfs条目。

默认值为“ 1”,它启用流混洗,而值“ 0”,则禁用混洗。在绑定驱动程序3.7.1中添加了此选项

上延

指定检测到链路恢复后启用从站之前等待的时间(以毫秒为单位)。此选项仅对miimon链接监控器有效。updelay值应该是miimon值的倍数;如果不是,它将四舍五入到最接近的倍数。默认值为0。

use_carrier

指定miimon是否应使用MII或ETHTOOL ioctl vs.netif_carrier_ok()来确定链接状态。MII或ETHTOOL ioctl的效率较低,并且在内核中使用了已弃用的调用序列。的 netif_carrier_ok()依赖于设备驱动器与netif_carrier_on /关保持其状态; 在撰写本文时,大多数(但不是全部)设备驱动程序支持此功能。

如果Bonding坚持在不应该建立链接的情况下保持链接状态,则可能是网络设备驱动程序不支持netif_carrier_on / off。netif_carrier的默认状态为“ carrier on”,因此,如果驱动程序不支持netif_carrier,它将显示为好像始终处于连接状态。在这种情况下,将use_carrier设置为0将导致绑定恢复为MII / ETHTOOL ioctl方法来确定链接状态。

值为1表示可以使用netif_carrier_ok(),值为0表示将使用不推荐使用的MII / ETHTOOL ioctl。预设值是1。

xmit_hash_policy

选择在“异或”,“ 802.3ad”和“ tlb”模式下用于从机选择的传输哈希策略。可能的值为:

layer2

使用硬件MAC地址和数据包类型ID字段的XOR生成哈希。公式是

hash =源MAC XOR目标MAC XOR数据包类型ID从站号=哈希模从站数

此算法会将所有流量都放在同一从属服务器上的特定网络对等方。

此算法符合802.3ad。

layer2+3

此策略结合使用layer2和layer3协议信息来生成哈希。

使用硬件MAC地址和IP地址的XOR生成哈希。公式是

哈希=源MAC XOR目标MAC XOR数据包类型ID哈希=哈希XOR源IP XOR目标IP哈希=哈希XOR(哈希RSHIFT 16)哈希=哈希XOR(哈希RSHIFT 8)然后,哈希从模数减少。

如果协议是IPv6,则首先使用ipv6_addr_hash对源地址和目标地址进行哈希处理。

此算法会将所有流量都放在同一从属服务器上的特定网络对等方。对于非IP流量,公式与第2层传输哈希策略的公式相同。

此策略旨在提供比单独的layer2更均衡的流量分配,尤其是在需要layer3网关设备到达大多数目的地的环境中。

此算法符合802.3ad。

layer3+4

该策略使用上层协议信息(如果可用)来生成哈希。尽管单个连接不会跨越多个从属,但这允许到特定网络对等方的流量跨越多个从属。

未分段的TCP和UDP数据包的公式为

hash =源端口,目标端口(如标题中所示)hash = hash XOR源IP XOR目标IP hash = hash XOR(哈希RSHIFT 16)hash = hash XOR(哈希RSHIFT 8)然后,哈希减少了从模块的模数。

如果协议是IPv6,则首先使用ipv6_addr_hash对源地址和目标地址进行哈希处理。

对于分段的TCP或UDP数据包以及所有其他IPv4和IPv6协议通信,将省略源和目标端口信息。对于非IP流量,公式与第2层传输哈希策略的公式相同。

此算法不完全符合802.3ad。既包含分段数据包又包含未分段数据包的单个TCP或UDP会话将看到数据包在两个接口上分条。这可能会导致无序交付。大多数流量类型均不符合此条件,因为TCP很少将流量分段,并且大多数UDP流量不参与扩展的会话。802.3ad的其他实现可能会也可能不会容忍这种不符合。

encap2+3

该策略使用与layer2 + 3相同的公式,但是它依赖skb_flow_dissect获取标头字段,如果使用封装协议,则可能导致内部标头的使用。例如,这将提高隧道用户的性能,因为数据包将根据封装的流进行分配。
encap3 + 4

该策略使用与layer3 + 4相同的公式,但是它依赖skb_flow_dissect获取标头字段,如果使用封装协议,则可能导致内部标头的使用。例如,这将提高隧道用户的性能,因为数据包将根据封装的流进行分配。
默认值为layer2。此选项是在绑定版本2.6.3中添加的。在早期版本的绑定中,此参数不存在,并且layer2策略是唯一的策略。为绑定版本3.2.2添加了layer2 + 3值。

resend_igmp

指定故障转移事件后要发布的IGMP成员资格报告的数量。故障转移后立即发布一份成员资格报告,随后的数据包每200ms间隔发送一次。

有效范围是0-255;缺省值为1。值0阻止响应故障转移事件而发出IGMP成员资格报告。

此选项对于绑定模式balance-rr(0),活动备份(1),balance-tlb(5)和balance-alb(6)很有用,在该模式下,故障转移可以将IGMP流量从一个从站切换到另一个从站。因此,必须发出新的IGMP报告,以使交换机通过新选择的从属设备转发传入的IGMP通信。

为绑定版本3.7.0添加了此选项。

lp_interval

指定绑定驱动程序将学习数据包发送到每个从属对等交换机的实例之间的秒数。

有效范围是1-0x7fffffff; 默认值为1。此选项仅在balance-tlb和balance-alb模式下有效。

3.配置绑定设备

您可以使用发行版的网络初始化脚本或使用iproute2或sysfs接口手动配置绑定。发行版通常使用以下三个程序包之一来进行网络初始化脚本:初始化脚本,sysconfig或接口。这些软件包的最新版本支持绑定,而较旧的版本则不支持。

我们将首先描述使用初始化脚本,sysconfig和具有完全或部分绑定支持的接口的发行版配置绑定的选项,然后提供有关在没有网络初始化脚本支持的情况下启用绑定的信息(例如,较早版本的initscript或sysconfig) 。

如果不确定您的发行版是否使用sysconfig,initscripts或接口,或者不知道它是否足够新,请不要担心。确定这一点非常简单。

首先,在/etc/network目录中查找一个名为interfaces的文件。如果您的系统中存在此文件,则系统使用界面。请参阅带有接口支持的配置。

否则,发出命令:

$ rpm -qf /sbin/ifup
它将以一行文本开头,以“ initscripts”或“ sysconfig”开头,后跟一些数字。这是提供网络初始化脚本的软件包。

接下来,要确定您的安装是否支持绑定,请发出以下命令:

$ grep ifenslave /sbin/ifup
如果返回任何匹配项,则您的初始化脚本或sysconfig支持绑定。

3.1使用Sysconfig支持进行配置

本部分适用于使用具有绑定支持的sysconfig版本的发行版,例如SuSE Linux Enterprise Server 9。

SuSE SLES 9的网络配置系统确实支持绑定,但是,在撰写本文时,YaST系统配置前端不提供使用绑定设备的任何方法。但是,可以手动管理绑定设备,如下所示。

首先,如果尚未配置它们,则配置从设备。在SLES 9上,最简单的方法是运行yast2 sysconfig配置实用程序。目的是为每个从设备创建一个ifcfg-id文件。完成此操作的最简单方法是为DHCP配置设备(这只是获得创建的ifcfg-id文件文件;有关DHCP的一些问题,请参见下文)。每个设备的配置文件的名称将采用以下格式:

ifcfg-id-xx:xx:xx:xx:xx:xx
其中“ xx”部分将替换为设备永久MAC地址中的数字。

创建了ifcfg-id-xx:xx:xx:xx:xx:xx文件集后,有必要编辑从设备的配置文件(MAC地址与从设备的MAC地址相对应)。在编辑之前,该文件将包含多行,并且将如下所示:

BOOTPROTO='dhcp'
STARTMODE='on'
USERCTL='no'
UNIQUE='XNzu.WeZGOGF+4wE'
_nm_name='bus-pci-0001:61:01.0'

将BOOTPROTO和STARTMODE行更改为以下内容:

BOOTPROTO='none'
STARTMODE='off'

不要更改UNIQUE或_nm_name行。删除所有其他行(USERCTL等)。

一旦修改了ifcfg-id-xx:xx:xx:xx:xx:xx 文件,就该为绑定设备本身创建配置文件了。该文件名为ifcfg-bondX,其中X是要创建的绑定设备的编号,从0开始。第一个这样的文件是ifcfg-bond0,第二个是ifcfg-bond1,依此类推。sysconfig网络配置系统将正确启动绑定的多个实例。

ifcfg-bondX文件的内容如下:

BOOTPROTO="static"
BROADCAST="10.0.2.255"
IPADDR="10.0.2.10"
NETMASK="255.255.0.0"
NETWORK="10.0.2.0"
REMOTE_IPADDR=""
STARTMODE="onboot"
BONDING_MASTER="yes"
BONDING_MODULE_OPTS="mode=active-backup miimon=100"
BONDING_SLAVE0="eth0"
BONDING_SLAVE1="bus-pci-0000:06:08.1"

将样本BROADCAST,IPADDR,NETMASK和NETWORK值替换为适合您的网络的值。

STARTMODE指定设备何时联机。可能的值为:

onboot设备在启动时启动。如果不确定,这可能就是您想要的。
manual仅当手动调用ifup时才启动设备。如果您由于某种原因不希望绑定设备
hotplug设备通过热插拔事件启动。对于绑定设备,这不是有效选择。
off or设备配置将被忽略。
ignore

行BONDING_MASTER ='yes’表示该设备是绑定主设备。唯一有用的值是“yes”。

BONDING_MODULE_OPTS的内容提供给该设备的绑定模块实例。在此处指定绑定模式,链接监视等选项。不要包含max_bonds绑定参数;如果您有多个绑定设备,这会使配置系统感到困惑。

最后,为每个从站提供一个BONDING_SLAVEn =“从设备”。其中“ n”是一个递增值,每个从站一个。“从设备”可以是接口名称(例如“ eth0”),也可以是网络设备的设备说明符。接口名称更容易找到,但是,例如,如果序列中的早期设备发生故障,则ethN名称在引导时可能会更改。设备说明符(在上面的示例中为bus-pci-0000:06:08.1)指定了物理网络设备,并且除非设备的总线位置发生更改(例如,从一个PCI插槽移动到另一个PCI插槽),否则它们不会更改。上面的示例使用每种类型之一进行演示;大多数配置将为所有从设备选择一个或另一个。

修改或创建所有配置文件后,必须重新启动网络才能使配置更改生效。这可以通过以下方式完成:

  # /etc/init.d/network restart

请注意,网络控制脚本(/ sbin / ifdown)将在网络关闭处理中删除绑定模块,因此,例如,如果模块参数已更改,则无需手动删除模块。

同样,在撰写本文时,YaST / YaST2将不会管理绑定 设备(它们不会在其网络设备列表中显示绑定接口)。必须手动编辑配置文件以更改绑定配置。

在示例ifcfg模板文件中可以找到ifcfg文件格式的其他常规选项和详细信息:

/etc/sysconfig/network/ifcfg.template

请注意,该模板并未记录上述各种BONDING_* 设置,但确实描述了许多其他选项。

3.1.1将DHCP与Sysconfig一起使用

在sysconfig下,使用BOOTPROTO ='dhcp’配置设备将导致其向DHCP查询其IP地址信息。在撰写本文时,这不适用于绑定设备。这些脚本会尝试在添加任何从属设备之前从DHCP获取设备地址。如果没有活动的从属,则DHCP请求不会发送到网络。

3.1.2使用Sysconfig配置多个绑定

sysconfig网络初始化系统能够处理多个绑定设备。每个绑定实例都需要具有一个适当配置的ifcfg-bondX文件(如上所述)。不要为任何绑定实例指定“ max_bonds”参数,因为这会使sysconfig混淆。如果需要具有相同参数的多个绑定设备,请创建多个ifcfg-bondX文件。

因为sysconfig脚本在ifcfg-bondX文件中提供了绑定模块选项,所以没有必要将它们添加到系统/etc/modules.d/*.conf配置文件中。

3.2具有初始化脚本支持的配置

本部分适用于使用具有绑定支持的最新版本的initscript的发行版,例如Red Hat Enterprise Linux版本3或更高版本,Fedora等。在这些系统上,网络初始化脚本具有绑定知识,并且可以配置为控制键合设备。请注意,较早版本的initscripts软件包对绑定的支持较低;这将在适当的地方注明。

除非ethX设备配置了IP地址,否则这些发行版不会自动加载网络适配器驱动程序。由于此限制,用户必须为将成为bondX链接成员的所有物理适配器手动配置网络脚本文件。网络脚本文件位于目录中:

/etc/sysconfig/network-scripts

文件名必须以“ ifcfg-eth”为前缀,并以适配器的物理适配器号作为后缀。例如,eth0的脚本将被命名为/etc/sysconfig/network-scripts/ifcfg-eth0。将以下文本放入文件中:

DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

每个ethX设备的DEVICE =行将有所不同,并且必须与文件名相对应,即ifcfg-eth1的设备行必须为DEVICE = eth1。MASTER =行的设置还将取决于为您的绑定选择的最终绑定接口名称。与其他网络设备一样,这些设备通常从0开始,每个设备上移一个,例如,第一个绑定实例是bond0,第二个绑定实例是bond1,依此类推。

接下来,创建一个绑定网络脚本。该脚本的文件名为/etc/sysconfig/network-scripts/ifcfg-bondX,其中X是绑定的编号。对于bond0,文件名为“ ifcfg-bond0”,对于bond1,文件名为“ ifcfg-bond1”,依此类推。在该文件中,放置以下文本:

DEVICE=bond0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

确保更改网络专用线路(IPADDR,NETMASK,NETWORK和BROADCAST)以匹配您的网络配置。

对于更高版本的初始化脚本,例如在Fedora 7(或更高版本)和Red Hat Enterprise Linux版本5(或更高版本)中发现的初始化脚本,可以并且确实优选在ifcfg-bond0文件中指定绑定选项。 ,例如格式为的一行:

BONDING_OPTS="mode=active-backup arp_interval=60 arp_ip_target=192.168.1.254"

将使用指定的选项配置绑定。在使用版本早于8.57和8.57(Fedora 8)和8.45.19(Red Hat Enterprise Linux 5.2)的初始化脚本版本时,BONDING_OPTS中指定的选项与绑定模块参数相同,但arp_ip_target字段除外。使用旧版本时,每个目标都应作为一个单独的选项包括在内,并应在其前面加上“ +”号,以指示应将其添加到查询的目标列表中,例如:

arp_ip_target=+192.168.1.1 arp_ip_target=+192.168.1.2

是指定多个目标的正确语法。通过BONDING_OPTS指定选项时,无需进行编辑 /etc/modprobe.d/*.conf。

对于甚至不支持BONDING_OPTS的较早版本的初始化脚本,有必要编辑/etc/modprobe.d/ .conf(取决于您的发行版),以便在打开bond0接口时使用所需的选项加载绑定模块。/etc/modprobe.d/ .conf中的以下行将加载绑定模块,并选择其选项:

别名bond0绑定选项bond0模式= balance-alb miimon = 100
将样本参数替换为适合您的配置的一组选项。

最后以根用户身份运行“ /etc/rc.d/init.d/network restart”。这将重新启动网络子系统,并且您的绑定链接现在应该已启动并正在运行。

3.2.1将DHCP与初始化脚本一起使用

初始化脚本的最新版本(据报道Fedora Core 3和Red Hat Enterprise Linux 4随附的版本或更高版本可以正常工作)支持通过DHCP将IP信息分配给绑定设备。

要为DHCP配置绑定,请按上述说明进行配置,除了将行“ BOOTPROTO = none”替换为“ BOOTPROTO = dhcp”并添加由“ TYPE = Bonding”组成的行。请注意,TYPE值区分大小写。

3.2.2使用初始化脚本配置多个绑定
Fedora 7和Red Hat Enterprise Linux 5附带的Initscripts包通过简单地在ifcfg-bondX中指定适当的BONDING_OPTS =来支持多个绑定接口,其中X是绑定的编号。此支持需要内核中的sysfs支持以及3.0.0或更高版本的绑定驱动程序。其他配置可能不支持此用于指定多个绑定接口的方法。对于这些实例,请参见下面的“手动配置多个键”部分。

3.3使用iproute2手动配置绑定

本节适用于其网络初始化脚本(sysconfig或initscripts程序包)不具有绑定知识的发行版。这样的发行版之一就是SuSE Linux Enterprise Server版本8。

这些系统的一般方法是将绑定模块参数放入/etc/modprobe.d/中的配置文件中(适用于已安装的发行版),然后将modprobe和/或 ip link命令添加到系统的全局init脚本中。全局初始化脚本的名称不同。对于sysconfig,它是/etc/init.d/boot.local,对于初始化脚本,它是/etc/rc.d/rc.local。

例如,如果要对两个e100设备(假定为eth0和eth1)进行简单绑定,并使其在重新启动后仍然存在,请编辑适当的文件(/etc/init.d/boot.local或/etc/rc.d/rc.local),然后添加以下内容:

modprobe bonding mode=balance-alb miimon=100
modprobe e100
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up
ip link set eth0 master bond0
ip link set eth1 master bond0

将示例绑定模块参数和bond0网络配置(IP地址,网络掩码等)替换为适合您的配置的值。

不幸的是,此方法将不支持bond设备上的ifup和ifdown脚本。要重新加载绑定配置,必须运行初始化脚本,例如:

# /etc/init.d/boot.local

要么:

# /etc/rc.d/rc.local

在这种情况下,可能需要创建一个单独的脚本,该脚本仅初始化绑定配置,然后从boot.local中调用该单独的脚本。这允许启用绑定而无需重新运行整个全局初始化脚本。

要关闭绑定设备,必须首先将绑定设备本身标记为已关闭,然后删除相应的设备驱动程序模块。对于上面的示例,您可以执行以下操作:

# ifconfig bond0 down
# rmmod bonding
# rmmod e100

同样,为方便起见,可能希望使用这些命令创建脚本。

3.3.1手动配置多个绑定

本节包含有关为网络初始化脚本不支持配置多个绑定的那些系统配置具有不同选项的多个绑定设备的信息。

如果需要多个绑定设备,但所有设备都具有相同的选项,则不妨使用上面记录的“ max_bonds”模块参数。

要创建具有不同选项的多个绑定设备,最好使用sysfs导出的绑定参数,该参数在以下部分中介绍。

对于不支持sysfs的绑定版本,提供具有不同选项的绑定的多个实例的唯一方法是多次加载绑定驱动程序。请注意,当前版本的sysconfig网络初始化脚本会自动处理此问题。如果您的发行版使用这些脚本,则无需采取特殊措施。如果不确定网络初始化脚本,请参阅上面的配置绑定设备一节。

要加载模块的多个实例,必须为每个实例指定一个不同的名称(模块加载系统要求每个加载的模块,即使是同一模块的多个实例,也必须具有唯一的名称)。这是通过在中提供多组绑定选项来完成的/etc/modprobe.d/*.conf,例如:

alias bond0 bonding
options bond0 -o bond0 mode=balance-rr miimon=100
alias bond1 bonding
options bond1 -o bond1 mode=balance-alb miimon=50

将加载绑定模块两次。第一个实例被命名为“ bond0”,并在miermon为100的情况下以balance-rr模式创建bond0设备。第二个实例被命名为“ bond1”,并以miimon为50的情况以balance-alb模式创建bond1设备。

在某些情况下(通常在较旧的发行版中),上述方法不起作用,并且第二个绑定实例永远不会看到其选项。在这种情况下,第二个选项行可以替换为:

install bond1 /sbin/modprobe --ignore-install bonding -o bond1 \
                             mode=balance-alb miimon=50

可以重复多次,可以为每个后续实例指定一个新的唯一名称来代替bond1。

已经观察到,某些Red Hat提供的内核无法在加载时重命名模块(“ -o bond1”部分)。尝试将该选项传递给modprobe将产生“不允许操作”错误。在某些Fedora Core内核上已有报道,并且在RHEL 4上也有发现。在出现此问题的内核上,将不可能用不同的参数配置多个绑定(因为它们是较旧的内核,并且也缺乏sysfs支持)。

3.4通过Sysfs手动配置绑定

从版本3.0.0开始,可以通过sysfs接口配置通道绑定。该接口允许动态配置系统中的所有绑定,而无需卸载模块。它还允许在运行时添加和删除键。尽管仍然需要Ifenslave,但不再需要它。

使用sysfs接口可以使您使用具有不同配置的多个绑定,而不必重新加载模块。当绑定被编译到内核中时,它还允许您使用多个不同配置的绑定。

您必须安装sysfs文件系统才能以这种方式配置绑定。本文档中的示例假定您正在使用sysfs的标准安装点,例如/sys。如果您的sysfs文件系统安装在其他位置,则需要相应地调整示例路径。

创建和销毁bonds
要添加新的bond bond0:

echo +bond0 > /sys/class/net/bonding_masters

删除现有的绑定栏:

echo -bond0 > /sys/class/net/bonding_masters

要显示所有现有bonds:

cat /sys/class/net/bonding_masters

注意

由于sysfs文件的4K大小限制,如果您有几百个以上的绑定,则此列表可能会被截断。在正常操作条件下,这种情况不太可能发生。

添加和删​​除从设备
可以使用文件/sys/class/net/<bond>/bonding/slaves将接口从属于bond。该文件的语义与bonding_masters文件的语义相同。

要将接口eth0从属到bond bond0:

ifconfig bond0 up
ifconfig eth0 down
echo +eth0 > /sys/class/net/bond0/bonding/slaves

要从bond bond0中释放slave eth0:

# echo -eth0 > /sys/class/net/bond0/bonding/slaves

当接口从属于绑定时,将在sysfs文件系统中创建两者之间的符号链接。在这种情况下,您将获得/sys/class/net/bond0/slave_eth0指向/sys/class/net/eth0,和/sys/class/net/eth0/指向/sys/class/net/bond0。

这意味着您可以通过查找主符号链接来快速判断接口是否被奴役。因此:# echo -eth0 > /sys/class/net/eth0/master/bonding/slaves 将从eth0奴役到的任何绑定中释放eth0,而不管绑定接口的名称如何。

更改bond的配置
每个绑定可以通过操作/sys/class/net//bonding中的文件来单独配置

这些文件的名称与该文件其他地方描述的命令行参数直接对应,并且除了arp_ip_target外,它们都接受相同的值。要查看当前设置,只需将适当的文件分类即可。

这里将给出一些例子。有关每个参数的特定用法准则,请参阅本文档的相应部分。

要将bond0配置为balance-alb模式:

# ifconfig bond0 down
# echo 6 > /sys/class/net/bond0/bonding/mode
  • or -
echo balance-alb > /sys/class/net/bond0/bonding/mode

注意

绑定接口必须先关闭,然后才能更改模式。

要以1秒的间隔在bond0上启用MII监视:

echo 1000 > /sys/class/net/bond0/bonding/miimon

注意

如果启用了ARP监视,则在启用MII监视时将禁用ARP监视,反之亦然。

要添加ARP目标:

echo +192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
echo +192.168.0.101 > /sys/class/net/bond0/bonding/arp_ip_target

注意

最多可以指定16个目标地址。

删除ARP目标:

echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target

配置学习报文发送间隔:

echo 12 > /sys/class/net/bond0/bonding/lp_interval

注意

lp_interval是绑定驱动程序将学习数据包发送到每个从属对等交换机的实例之间的秒数。默认间隔为1秒。

配置示例
我们从第3.3节中显示的相同示例开始,该示例使用sysfs执行,并且不使用ifenslave。

要简单绑定两个e100设备(假定为eth0和eth1),并使其在重新启动后仍然存在,请编辑适当的文件(/etc/init.d/boot.local或/etc/rc.d/rc。本地),并添加以下内容:

modprobe bonding
modprobe e100
echo balance-alb > /sys/class/net/bond0/bonding/mode
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up
echo 100 > /sys/class/net/bond0/bonding/miimon
echo +eth0 > /sys/class/net/bond0/bonding/slaves
echo +eth1 > /sys/class/net/bond0/bonding/slaves

要使用ARP监视功能在活动备份模式下使用两个e1000接口添加第二个绑定,请在初始化脚本中添加以下几行:

modprobe e1000
echo +bond1 > /sys/class/net/bonding_masters
echo active-backup > /sys/class/net/bond1/bonding/mode
ifconfig bond1 192.168.2.1 netmask 255.255.255.0 up
echo +192.168.2.100 /sys/class/net/bond1/bonding/arp_ip_target
echo 2000 > /sys/class/net/bond1/bonding/arp_interval
echo +eth2 > /sys/class/net/bond1/bonding/slaves
echo +eth3 > /sys/class/net/bond1/bonding/slaves

3.5具有接口支持的配置

本节适用于使用/etc/network/interfaces文件描述网络接口配置的发行版,其中最著名的是Debian及其衍生版本。

Debian上的ifup和ifdown命令不支持绑定。应该安装ifenslave-2.6软件包以提供绑定支持。安装后,此软件包将提供bond-*用于/ etc / network / interfaces的选项。

请注意,ifenslave-2.6软件包将加载绑定模块,并在适当时使用ifenslave命令。

示例配置
在/etc/network/interfaces中,以下节将在active-backup模式下将bond0配置为eth0和eth1作为从属:

auto bond0
iface bond0 inet dhcp
        bond-slaves eth0 eth1
        bond-mode active-backup
        bond-miimon 100
        bond-primary eth0 eth1

如果以上配置不起作用,则您可能有一个使用upstart进行启动的系统。对于最新的Ubuntu版本尤其如此。/etc/network/interfaces中的以下节将在这些系统上产生相同的结果:

auto bond0
iface bond0 inet dhcp
        bond-slaves none
        bond-mode active-backup
        bond-miimon 100
auto eth0
iface eth0 inet manual
        bond-master bond0
        bond-primary eth0 eth1
auto eth1
iface eth1 inet manual
        bond-master bond0
        bond-primary eth0 eth1

有关bond-*/etc/network/interfaces中支持的选项的完整列表,以及为您的特定发行版量身定制的一些更高级的示例,请参见/usr/share/doc/ifenslave-2.6中的文件。

3.6特殊情况的覆盖配置

使用绑定驱动程序时,传输帧的物理端口通常由绑定驱动程序选择,与用户或系统管理员无关。只需使用所选绑定模式的策略选择输出端口。但是,有时将某些类型的流量定向到输出上的某些物理接口会有所帮助,以实施稍微复杂一些的策略。例如,要通过绑定接口访问Web服务器,其中eth0连接到专用网络,而eth1通过公用网络连接,则可能希望使绑定偏向首先通过eth0发送所述流量,而仅使用eth1作为回退,而所有其他流量都可以通过任一接口安全地发送。可以使用linux固有的流量控制实用程序来实现这种配置。

默认情况下,绑定驱动程序支持多队列,并且在驱动程序初始化时会创建16个队列( 有关详细信息,请参阅HOWTO以获取多队列网络设备支持)。如果需要更多或更少的队列,则可以使用模块参数tx_queues更改此值。由于分配是在模块初始化时完成的,因此没有sysfs参数可用。

文件/proc/net/bonding/bondX的输出已更改,因此现在为每个从属打印输出队列ID:

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:1a:a0:12:8f:cb
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:1a:a0:12:8f:cc
Slave queue ID: 2

可以使用以下命令设置从站的queue_id:

# echo "eth1:2" > /sys/class/net/bond0/bonding/queue_id

任何需要设置queue_id的接口都应像上面的那样设置多个调用,直到为所有接口设置适当的优先级为止。在允许通过初始化脚本进行配置的发行版上,可以将多个“ queue_id”参数添加到BONDING_OPTS来设置所有需要的从属队列。

这些队列ID可以与tc实用程序结合使用,以配置多队列qdisc和过滤器,以使某些流量偏向于在某些从属设备上传输。例如,假设我们想要在上述配置中强制绑定到192.168.1.100的所有流量在绑定中使用eth1作为其输出设备。以下命令将完成此操作:

# tc qdisc add dev bond0 handle 1 root multiq
# tc filter add dev bond0 protocol ip parent 1: prio 1 u32 match ip \
        dst 192.168.1.100 action skbedit queue_mapping 2

这些命令告诉内核将多队列队列规则附加到bond0接口上,并过滤入队的流量,以便dst ip为192.168.1.100的数据包的输出队列映射值被覆盖为2。然后将该值传递到驱动程序,导致普通输出路径选择策略被覆盖,改为选择映射到eth1的qid 2。

请注意,qid值从1开始。保留Qid 0以向驱动程序启动应进行常规输出策略选择的操作。简单地将一个从站的qid保留为0的好处是现在存在的绑定驱动程序中的多队列感知。这种认识允许将tc过滤器放置在从属设备以及绑定设备上,并且绑定驱动程序将仅充当通过通道来选择从属设备上的输出队列,而不是选择输出端口。

此功能首次出现在Bonding驱动程序3.7.0版中,并且对输出从站选择的支持仅限于循环模式和活动备份模式。

3.7以更安全的方式将LACP配置为802.3ad模式

使用802.3ad绑定模式时,Actor(主机)和Partner(交换机)交换LACPDU。这些LACPDU不能嗅探,因为它们注定要链接本地mac地址(不应将其转发给交换机/网桥)。但是,大多数值很容易预测,或者仅仅是机器的MAC地址(同一L2中的所有其他主机都很容易知道)。这意味着L2域中的其他计算机可以欺骗来自其他主机的LACPDU数据包到交换机,并可能通过加入(从交换机的角度)另一台计算机的聚合来引起混乱,从而接收一部分主机传入的流量和/或欺骗来自该计算机本身的流量(甚至可能成功终止了一部分流量)。虽然这种情况不太可能发生,

ad_actor_system:您可以设置一个随机的MAC地址,用于这些LACPDU交换。该值不能为NULL或“多播”。另外,最好设置本地管理员位。以下shell代码如上所述生成随机的mac地址:

# sys_mac_addr=$(printf '%02x:%02x:%02x:%02x:%02x:%02x' \
                         $(( (RANDOM & 0xFE) | 0x02 )) \
                         $(( RANDOM & 0xFF )) \
                         $(( RANDOM & 0xFF )) \
                         $(( RANDOM & 0xFF )) \
                         $(( RANDOM & 0xFF )) \
                         $(( RANDOM & 0xFF )))
# echo $sys_mac_addr > /sys/class/net/bond0/bonding/ad_actor_system

ad_actor_sys_prio:随机化系统优先级。默认值为65535,但是系统可以采用1-65535之间的值。以下shell代码会生成随机优先级并进行设置:

# sys_prio=$(( 1 + RANDOM + RANDOM ))
# echo $sys_prio > /sys/class/net/bond0/bonding/ad_actor_sys_prio

ad_user_port_key:使用端口密钥的用户部分。默认设置为空。这些是port-key的高10位,值的范围是0-1023。以下shell代码生成这10位并进行设置:

# usr_port_key=$(( RANDOM & 0x3FF ))
# echo $usr_port_key > /sys/class/net/bond0/bonding/ad_user_port_key

4查询绑定配置

4.1绑定配置

每个绑定设备在/proc/net/bonding目录中都有一个只读文件。文件内容包括有关绑定配置,每个从站的选项和状态的信息。

例如,在驱动程序加载了mode = 0和miimon = 1000的参数后,/proc/net/bonding/bond0的内容通常如下:

Ethernet Channel Bonding Driver: 2.6.1 (October 29, 2004)
Bonding Mode: load balancing (round-robin)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 1000
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Link Failure Count: 1

Slave Interface: eth0
MII Status: up
Link Failure Count: 1

精确的格式和内容将根据绑定配置,状态和绑定驱动程序的版本而变化。

4.2网络配置

可以使用ifconfig命令检查网络配置。绑定设备将设置MASTER标志;绑定从设备将设置SLAVE标志。ifconfig输出不包含有关哪些从站与哪些主站关联的信息。

在下面的示例中,bond0接口是主设备(MASTER),而eth0和eth1是从设备(SLAVE)。请注意,除了TLB和ALB要求每个从站唯一的MAC地址之外,对于所有模式,bond0的所有从站都具有与bond0相同的MAC地址(HWaddr):

# /sbin/ifconfig
bond0     Link encap:Ethernet  HWaddr 00:C0:F0:1F:37:B4
          inet addr:XXX.XXX.XXX.YYY  Bcast:XXX.XXX.XXX.255  Mask:255.255.252.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:7224794 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3286647 errors:1 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:0

eth0      Link encap:Ethernet  HWaddr 00:C0:F0:1F:37:B4
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1643167 errors:1 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x1080

eth1      Link encap:Ethernet  HWaddr 00:C0:F0:1F:37:B4
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1643480 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:9 Base address:0x1400

5.开关配置

对于本节,“交换机”是指绑定设备直接连接到的任何系统(即电缆另一端插入的系统)。这可能是实际的专用交换设备,也可能是其他常规系统(例如,另一台运行Linux的计算机),

主动备份,balance-tlb和balance-alb模式不需要对交换机进行任何特定配置。

802.3ad模式要求交换机具有配置为802.3ad聚合的适当端口。用于配置此功能的精确方法因交换机而异,例如,Cisco 3550系列交换机要求首先在单个etherchannel实例中将适当的端口分组在一起,然后将该etherchannel设置为“ lacp”模式以启用802.3ad(而不是标准的EtherChannel)。

balance-rr,balance-xor和广播模式通常要求交换机将适当的端口分组在一起。交换机之间,此类组的名称有所不同,它可以称为“ etherchannel”(如上面的Cisco示例),“ trunk group”或其他一些类似的变体。对于这些模式,每个交换机还将具有其自己的配置选项,以用于交换机向绑定的传输策略。典型的选择包括MAC或IP地址的XOR。两个对等体的传输策略不需要匹配。对于这三种模式,绑定模式实际上是为EtherChannel组选择一种传输策略。这三个都将与另一个EtherChannel组互操作。

6. 802.1q VLAN支持

可以使用8021q驱动程序通过绑定接口配置VLAN设备。但是,默认情况下仅标记来自8021q驱动程序并通过绑定的数据包。自行生成的数据包(例如,绑定的学习数据包或由ALB模式或ARP监视机制生成的ARP数据包)通过内部绑定自身来进行标记。结果,绑定必须“学习”在其上方配置的VLAN ID,并使用这些ID标记自己生成的数据包。

为了简单起见,并且为了支持使用可以进行VLAN硬件加速卸载的适配器,绑定接口声明自己具有完全的硬件卸载能力,它获取add_vid / kill_vid通知以收集必要的信息,并将这些动作传播到奴隶。对于混合适配器类型,应该通过绑定驱动程序“加速”应通过不具有卸载功能的适配器的硬件加速标记的数据包,因此VLAN标记位于常规位置。

仅在奴役了至少一个从属设备之后,才能将VLAN接口添加到绑定接口的顶部。绑定接口的硬件地址为00:00:00:00:00:00,直到添加第一个从属设备为止。如果VLAN接口是在第一次奴役之前创建的,它将选择全零硬件地址。一旦第一个从属设备连接到绑定,绑定设备本身将获取从属设备的硬件地址,然后该地址可用于VLAN设备。

另外,请注意,如果所有从属设备都从绑定中释放,而该绑定仍具有一个或多个VLAN接口,则可能会发生类似的问题。添加新的从站后,绑定接口将从第一个从站获取其硬件地址,该地址可能与VLAN接口的硬件地址不匹配(该地址最终从较早的从站复制而来)。

如果从绑定接口中删除了所有从设备,有两种方法可以确保VLAN设备以正确的硬件地址运行:

删除所有VLAN接口,然后重新创建它们
2.设置绑定接口的硬件地址,使其与VLAN接口的硬件地址匹配。

请注意,更改VLAN接口的硬件地址会将底层设备(即绑定接口)设置为混杂模式,这可能不是您想要的。

7.链接监控

目前,绑定驱动程序支持两种用于监视从设备链接状态的方案:ARP监视器和MII监视器。

目前,由于绑定驱动程序本身的实现限制,因此无法同时启用ARP和MII监视。

7.1 ARP Monitor操作

ARP监视器按照其名称所示进行操作:它将ARP查询发送到网络上的一个或多个指定的对等系统,并使用该响应作为链接正在运行的指示。这样可以保证流量实际上是在本地网络上往返一个或多个对等方的流量。

ARP监视器依靠设备驱动程序本身来验证流量是否在流动。特别是,驱动程序必须保持最新的最后接收时间dev-> last_rx。使用NETIF_F_LLTX标志的驱动程序还必须更新netdev_queue-> trans_start。如果不这样做,则ARP监视器将立即使使用该驱动程序的任何从属设备失效,这些从属设备将保持关闭状态。如果网络监视(tcpdump等)显示了ARP请求并在网络上答复,则可能是设备驱动程序未更新last_rx和trans_start。

7.2配置多个ARP目标

虽然仅使用一个目标即可完成ARP监视,但在高可用性设置中要监视多个目标可能很有用。在只有一个目标的情况下,目标本身可能会掉线或出现问题,使其无法响应ARP请求。拥有一个或多个其他目标可以提高ARP监视的可靠性。

多个ARP目标必须用逗号分隔,如下所示:

# example options for ARP monitoring with three targets
alias bond0 bonding
options bond0 arp_interval=60 arp_ip_target=192.168.0.1,192.168.0.3,192.168.0.9

对于仅一个目标,选项将类似于:

# example options for ARP monitoring with one target
alias bond0 bonding
options bond0 arp_interval=60 arp_ip_target=192.168.0.100

7.3 MII显示器操作

MII监视器仅监视本地网络接口的运营商状态。它通过以下三种方式之一来实现此目的:通过依赖设备驱动程序来维持其载波状态,通过查询设备的MII寄存器,或通过对设备进行ethtool查询。

如果use_carrier模块参数为1(默认值),则MII监视器将依靠驱动程序获取载波状态信息(通过netif_carrier子系统)。如上文use_carrier参数信息中所述,如果MII监视器无法检测到设备上的载波丢失(例如,当电缆物理断开时),则可能是驱动程序不支持netif_carrier。

如果use_carrier为0,则MII监视器将首先查询设备的MII寄存器(通过ioctl)并检查链接状态。如果该请求失败(不仅是它使载波下降),那么MII监视器将发出ethtool ETHOOL_GLINK请求以尝试获取相同的信息。如果这两种方法都失败(即驱动程序在处理MII寄存器和ethtool请求时都不支持或有一些错误),则MII监视器将假定链接已建立。

8.潜在的麻烦源

8.1路由冒险

配置绑定后,重要的是从设备不要具有取代主设备路由的路由(或者通常根本没有路由)。例如,假设绑定设备bond0具有两个从设备eth0和eth1,并且路由表如下:

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.0.0 0.0.0.0 255.255.0.0 U 40 0 0 eth0
10.0.0.0 0.0.0.0 255.255.0.0 U 40 0 0 eth1
10.0.0.0 0.0.0.0 255.255.0.0 U 40 0 0 bond0
127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 0 lo
此路由配置可能仍会更新驱动程序中的接收/发送时间(ARP监视器需要),但可能会绕过绑定驱动程序(因为在这种情况下,到网络10上另一主机的传出流量在使用之前会使用eth0或eth1) bond0)。

ARP监视器(和ARP本身)可能会被此配置弄糊涂,因为ARP请求(由ARP监视器生成)将在一个接口(bond0)上发送,但是相应的答复将到达另一个接口(eth0)。该答复将ARP视为未经请求的ARP答复(因为ARP基于接口匹配答复),并被丢弃。MII监视器不受路由表状态的影响。

此处的解决方案只是确保从站没有自己的路由,并且如果由于某种原因而必须,则这些路由不会取代其主服务器的路由。通常应该是这种情况,但是不正常的配置或错误的手动或自动静态路由添加可能会造成麻烦。

8.2以太网设备重命名

在具有网络配置脚本的系统上,这些脚本不会将物理设备直接与网络接口名称关联(以便同一物理设备始终具有相同的“ ethX”名称),可能有必要在/ etc /中向配置文件添加一些特殊逻辑modprobe.d /。

例如,给定一个modules.conf,其中包含以下内容:

alias bond0 bonding
options bond0 mode=some-mode miimon=50
alias eth0 tg3
alias eth1 tg3
alias eth2 e1000
alias eth3 e1000

如果eth0和eth1都不是bond0的从属,那么当bond0接口出现时,设备可能最终会重新排序。发生这种情况是因为首先加载了绑定,然后又加载了其从设备的驱动程序。由于尚未加载其他驱动程序,因此在加载e1000驱动程序时,它将为其设备接收eth0和eth1,但绑定配置将尝试奴役eth2和eth3(以后可能会分配给tg3设备)。

添加以下内容:

add above bonding e1000 tg3

导致绑定加载时,modprobe依次加载e1000和tg3。该命令在modules.conf手册页中有完整说明。

在使用modprobe的系统上,可能会发生等效问题。在这种情况下,可以将以下内容添加为/etc/modprobe.d/中的配置文件:

softdep bonding pre: tg3 e1000

这将在加载绑定模块之前加载tg3和e1000模块。完整的文档可以在modprobe.d和modprobe手册页中找到。

8.3。Miimon缓慢或无故障的链接检测

默认情况下,绑定启用use_carrier选项,该选项指示绑定信任驱动程序以维护载波状态。

如上面的选项部分所述,某些驱动程序不支持netif_carrier_on / _off链接状态跟踪系统。启用use_carrier时,无论它们的实际状态如何,绑定将始终将这些链接视为up。

另外,其他驱动程序确实支持netif_carrier,但不实时维护它,例如,仅以某个固定间隔轮询链接状态。在这种情况下,miimon会检测到故障,但前提是要经过很长一段时间。如果miimon在检测链路故障方面似乎非常慢,请尝试指定use_carrier = 0来查看是否可以缩短故障检测时间。如果是这样,则可能是驱动程序以固定的时间间隔检查了载波状态,但没有缓存MII寄存器值(因此,查询寄存器的use_carrier = 0方法直接起作用)。如果use_carrier = 0不能改善故障转移,则驱动程序可能会缓存寄存器,否则问题可能出在其他地方。

另外,请记住,miimon仅检查设备的载体状态。它无法确定交换机其他端口上或之外的设备的状态,也无法确定交换机在保持运营商开启状态下拒绝通过流量。

9. SNMP代理

如果运行SNMP代理,则应在任何参与绑定的网络驱动程序之前加载绑定驱动程序。此要求是由于接口索引(ipAdEntIfIndex)与找到的具有给定IP地址的第一个接口相关联。也就是说,每个IP地址只有一个ipAdEntIfIndex。例如,如果eth0和eth1是bond0的从属,并且在绑定驱动程序之前加载了eth0的驱动程序,则IP地址的接口将与eth0接口关联。此配置如下所示,IP地址192.168.1.1的接口索引为2,该索引在ifDescr表(ifDescr.2)中指向eth0。

interfaces.ifTable.ifEntry.ifDescr.1 = lo
interfaces.ifTable.ifEntry.ifDescr.2 = eth0
interfaces.ifTable.ifEntry.ifDescr.3 = eth1
interfaces.ifTable.ifEntry.ifDescr.4 = eth2
interfaces.ifTable.ifEntry.ifDescr.5 = eth3
interfaces.ifTable.ifEntry.ifDescr.6 = bond0
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 = 5
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 = 2
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.74.20.94 = 4
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 = 1

通过在参与绑定的任何网络驱动程序之前加载绑定驱动程序可以避免此问题。下面是首先加载绑定驱动程序的示例,IP地址192.168.1.1与ifDescr.2正确关联。

interfaces.ifTable.ifEntry.ifDescr.1 = lo interfaces.ifTable.ifEntry.ifDescr.2 = bond0接口.ifTable.ifEntry.ifDescr.3 = eth0接口.ifTable.ifEntry.ifDescr.4 = eth1接口.ifTable.ifEntry。 ifDescr.5 = eth2接口.ifTable.ifEntry.ifDescr.6 = eth3 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 = 6 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 = 2 ip.ipAddrTable.ipAddrEntry.ipEnt 10.74.20.94 = 5 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 = 1

尽管某些发行版可能不会在ifDescr中报告接口名称,但是IP地址和IfIndex之间的关联仍然存在,SNMP函数(如Interface_Scan_Next)将报告该关联。

10.混杂模式

当运行网络监视工具(例如tcpdump)时,通常在设备上启用混杂模式,以便看到所有流量(而不是仅查看发往本地主机的流量)。绑定驱动程序处理到绑定主设备(例如bond0)的混杂模式更改,并将设置传播到从设备。

对于balance-rr,balance-xor,广播和802.3ad模式,混杂模式设置将传播到所有从属设备。

对于活动备份,balance-tlb和balance-alb模式,混杂模式设置仅传播到活动从属服务器。

对于balance-tlb模式,活动从站是当前正在接收入站流量的从站。

对于平衡Alb模式,活动从站是用作“主要”的从站。此从站用于特定于模式的控制流量,用于发送给未分配的对等方或负载不平衡。

对于活动备份,balance-tlb和balance-alb模式,当活动从站发生更改(例如,由于链接故障)时,混杂设置将传播到新的活动从站。

11.配置绑定以实现高可用性

高可用性是指通过在主机与世界其他地方之间具有冗余或备份设备,链接或交换机来提供最大网络可用性的配置。目标是提供最大的网络连接可用性(即网络始终可用),即使其他配置可以提供更高的吞吐量。

11.1单交换机拓扑中的高可用性

如果两个主机(或一台主机和一个交换机)通过多个物理链路直接连接,则优化最大带宽不会影响可用性。在这种情况下,只有一个交换机(或对等方),因此,如果它发生故障,则没有其他访问权可以进行故障转移。此外,绑定负载平衡模式支持对其成员的链接监视,因此,如果单个链接失败,则将在其余设备之间重新平衡负载。

有关配置与一个对等设备的绑定的信息,请参见第12节“配置绑定以实现最大吞吐量”。

11.2多交换机拓扑中的高可用性

使用多个交换机,绑定和网络的配置会发生巨大变化。在多个交换机拓扑中,需要在网络可用性和可用带宽之间进行权衡。

下面是一个示例网络,配置为最大程度地利用网络:

  |                                     |
  |port3                           port3|

±----±—+ ±----±—+
| |port2 ISL port2| |
| switch A ±-------------------------+ switch B |
| | | |
±----±—+ ±----+±–+
|port1 port1|
| ±------+ |
±------------+ host1 ±--------------+
eth0 ±------+ eth1
在此配置中,两个交换机之间存在一个链接(ISL或交换机之间的链接),并且有多个端口连接到外界(每个交换机上的“端口3”)。没有技术原因不能将此扩展到第三个开关。

11.2.1多交换机拓扑的HA绑定模式选择

在诸如上述示例的拓扑中,在针对可用性进行优化时,活动备份和广播模式是唯一有用的绑定模式。其他模式要求所有链接在同一对等点处终止,以使其行为合理。

主动备份:
通常,这是首选模式,尤其是在交换机具有ISL且配合良好的情况下。如果网络配置使得一个交换机特别是备用交换机(例如,容量较低,成本较高等),则可以使用主要选项来确保在可用时始终使用首选链接。
广播:
此模式实际上是一种特殊用途的模式,仅适用于非常特定的需求。例如,如果两个交换机未连接(没有ISL),并且它们之外的网络完全独立。在这种情况下,如果某些特定的单向流量有必要到达两个独立的网络,则广播模式可能是合适的。

11.2.2多交换机拓扑的HA链路监视选择

链路监视的选择最终取决于您的开关。如果交换机可以可靠地使端口发生故障以响应其他故障,则MII或ARP监视器都应该工作。例如,在上面的示例中,如果“ port3”链接在远程端失败,则MII监视器没有直接的手段来检测到此情况。可以在端口3的远程端为目标配置ARP监视器,从而在没有交换机支持的情况下检测到该故障。

但是,通常,在多交换机拓扑中,ARP监视器可以在检测端到端连接故障(这可能是由于任何单个组件由于任何原因而无法通过通信引起的故障)时提供更高的可靠性。此外,ARP监视器应配置有多个目标(网络中的每个交换机至少应有一个)。这将确保,无论哪个交换机处于活动状态,ARP监视器都具有合适的查询目标。

还要注意,最近许多交换机现在都支持通常称为“中继故障转移”的功能。这是交换器的一项功能,当另一个交换器端口的状态下降(或上升)时,该功能会导致某个交换器端口的链路状态被降低(或上升)。其目的是将链接故障从逻辑“外部”端口传播到绑定可以通过miimon监视的逻辑“内部”端口。中继故障转移的可用性和配置因交换机而异,但是当使用合适的交换机时,这可以替代ARP监视器。

12.配置最大吞吐量的绑定

12.1在单个交换机拓扑中最大化吞吐量

在单个交换机配置中,最大化吞吐量的最佳方法取决于应用程序和网络环境。各种负载平衡模式在不同的环境中各有优缺点,如下所述。

在此讨论中,我们将拓扑分为两类。根据大多数流量的目的地,我们将其分为“网关”配置或“本地”配置。

在网关配置中,“交换机”主要充当路由器,并且大部分流量都通过该路由器传递到其他网络。示例如下:

±---------+ ±---------+
| |eth0 port1| | to other networks
| Host A ±--------------------+ router ±------------------>
| ±--------------------+ | Hosts B and C are out
| |eth1 port2| | here somewhere
±---------+ ±---------+
路由器可以是专用路由器设备,也可以是充当网关的其他主机。对于我们的讨论,重要的一点是,来自主机A的大部分流量将在到达其最终目的地之前通过路由器到达其他网络。

在网关网络配置中,尽管主机A可以与许多其他系统通信,但其所有流量都将通过本地网络上的另一对等端(路由器)发送和接收。

请注意,出于配置绑定的目的,两个系统通过多个物理链路直接连接的情况与网关配置相同。在这种情况下,碰巧所有流量都发往“网关”本身,而不是网关以外的其他网络。

在本地配置中,“交换机”主要充当交换机,并且大部分流量通过此交换机到达同一网络上的其他站点。示例如下:

±---------+ ±---------+ ±-------+
| |eth0 port1| ±------+ Host B |
| Host A ±-----------+ switch |port3 ±-------+
| ±-----------+ | ±-------+
| |eth1 port2| ±-----------------+ Host C |
±---------+ ±---------+port4 ±-------+
同样,该交换机可以是专用交换机设备,也可以是充当网关的其他主机。对于我们的讨论,重要的一点是来自主机A的大部分流量都发往同一本地网络上的其他主机(上例中为主机B和C)。

总而言之,在网关配置中,往返于绑定设备的流量将流向网络上相同的MAC级别对等方(网关本身,即路由器),而不管其最终目的地如何。在本地配置中,流量直接往返于最终目的地,因此,每个目的地(主机B,主机C)将通过其各自的MAC地址直接寻址。

网关配置和本地网络配置之间的区别很重要,因为许多可用的负载均衡模式都使用本地网络源和目标的MAC地址来做出负载均衡决策。每种模式的行为描述如下。

12.1.1单交换机拓扑的MT绑定模式选择

尽管必须确定哪种绑定模式最适合您的需求,但此配置是最容易设置和理解的。每种模式的权衡如下:

balance-rr:
此模式是唯一允许单个TCP / IP连接在多个接口上对流量进行条带化的模式。因此,它是唯一一种允许单个TCP / IP流利用一个以上接口的吞吐量值的模式。但是,这需要付出一定的代价:条带化通常导致对等系统接收到乱序的数据包,从而经常通过重新传输段来使TCP / IP的拥塞控制系统进入。

可以通过更改net.ipv4.tcp_reordering sysctl参数来调整TCP / IP的拥塞限制。通常的默认值为3。但是请记住,TCP堆栈能够在检测到重新排序时自动增加该值。

请注意,将乱序发送的数据包比例是高度可变的,不太可能为零。重新排序的级别取决于多种因素,包括网络接口,交换机和配置的拓扑。笼统地说,较高速度的网卡会产生更多的重新排序(由于数据包合并等因素),“多对多”拓扑将比“许多慢到一个快”配置以更高的速率重新排序。

许多交换机不支持任何条带化流量的模式(而是根据IP或MAC级别地址选择端口)。对于那些设备,通过交换机流向balance-rr绑定的特定连接的流量所使用的带宽不会超过一个接口的带宽。

如果您使用的协议不是TCP / IP,例如UDP,并且您的应用程序可以容忍无序交付,则此模式可以允许单流数据报性能,随着接口添加到绑定中,性能几乎呈线性增长。

此模式要求交换机为“ etherchannel”或“ trunking”配置适当的端口。

主动备份:
对于主动备份模式,此网络拓扑没有太多优势,因为非主动备份设备都连接到与主备份设备相同的对等设备。在这种情况下,负载平衡模式(带有链路监视)将提供相同级别的网络可用性,但具有增加的可用带宽。从积极的方面来说,主动备份模式不需要对交换机进行任何配置,因此,如果可用的硬件不支持任何负载平衡模式,则它可能很有用。
平衡异或:
此模式将限制流量,以使发往特定对等方的数据包始终通过同一接口发送。由于目的地是由所涉及的MAC地址确定的,因此此模式在“本地”网络配置(如上所述)中效果最佳,目的地均位于同一局域网中。如果您的所有流量都通过单个路由器传递(即如上所述的“网关”网络配置),则此模式可能不是最佳选择。

与balance-rr一样,交换机端口需要配置为“ etherchannel”或“ trunking”。

广播:
像活动备份一样,这种模式在这种类型的网络拓扑中没有太多优势。
802.3ad:
对于这种类型的网络拓扑,此模式可能是一个不错的选择。802.3ad模式是IEEE标准,因此实现802.3ad的所有对等方都应能很好地互操作。802.3ad协议包括聚合的自动配置,因此需要最少的手动交换机配置(通常仅用于指定802.3ad可以使用某些设备)。802.3ad标准还要求按顺序(在一定限制内)交付帧,因此通常单个连接不会看到数据包的错误排序。802.3ad模式确实存在一些缺点:该标准要求聚合中的所有设备以相同的速度和双工模式运行。而且,与balance-rr以外的所有绑定负载平衡模式一样,没有任何单个连接能够利用的带宽超过单个接口所具有的带宽。

另外,Linux绑定802.3ad实现按对等方分配流量(使用MAC地址和数据包类型ID的XOR),因此在“网关”配置中,所有传出流量通常将使用同一设备。传入流量也可能最终在单个设备上结束,但这取决于对等方的802.3ad实现的平衡策略。在“本地”配置中,流量将在绑定中的各个设备之间分配。

最后,802.3ad模式要求使用MII监视器,因此ARP监视器在此模式下不可用。

余额-tlb:
balance-tlb模式按对等方平衡传出流量。由于平衡是根据MAC地址完成的,因此在“网关”配置中(如上所述),此模式将跨单个设备发送所有流量。但是,在“本地”网络配置中,此模式以模糊智能的方式(而不是像balance-xor或802.3ad模式中那样简单的XOR)在设备之间平衡多个本地网络对等体,因此在数学上不走运的MAC地址(即, (将XOR设为相同的值)将不会全部“捆绑”在单个接口上。

与802.3ad不同,接口的速度可能不同,并且不需要特殊的开关配置。不利的一面是,在此模式下,所有传入流量都通过单个接口到达,此模式需要从属接口的网络设备驱动程序中具有某些ethtool支持,并且ARP监视器不可用。

余额-白平衡:
该模式是balance-tlb所具有的一切,以及更多。它具有balance-tlb的所有功能(和限制),并且还将平衡来自本地网络对等方的传入流量(如上面的“绑定模块选项”部分所述)。

此模式唯一的缺点是,网络设备驱动程序必须支持在设备打开时更改硬件地址。

12.1.2单链路拓扑的MT链路监控

链接监视的选择可能在很大程度上取决于您选择使用哪种模式。更高级的负载平衡模式不支持使用ARP监视器,因此仅限于使用MII监视器(它不能提供与ARP监视器一样高的端到端保证级别)。

12.2多交换机拓扑中的最大吞吐量

当将多个交换机并行配置为两个或多个系统之间的隔离网络的一部分时,可以利用多个交换机来优化吞吐量,例如:

          +-----------+
          |  Host A   |
          +-+---+---+-+
            |   |   |
   +--------+   |   +---------+
   |            |             |

±-----±–+ ±----±—+ ±----±—+
| Switch A | | Switch B | | Switch C |
±-----±–+ ±----±—+ ±----±—+
| | |
±-------+ | ±--------+
| | |
±±–±--±+
| Host B |
±----------+
在这种配置中,开关彼此隔离。采用这样的拓扑的一个原因是,对于具有许多主机的隔离网络(例如,为高性能配置的群集),使用多个较小的交换机可能比单个较大的交换机更具成本效益,例如,在具有24台主机,3个24端口交换机比单个72端口交换机便宜得多。

如果需要通过网络进行访问,则可以为单个主机配备一个连接到外部网络的附加网络设备。然后,该主机还充当网关。

12.2.1多交换机拓扑的MT绑定模式选择

在实际实践中,这种类型的配置中通常采用的结合模式为balance-rr。从历史上看,在这种网络配置中,通过使用不执行任何类型的数据包合并的网络适配器(通过使用NAPI或由于设备本身不会生成中断,直到一些数据包已到达)。当以这种方式使用时,balance-rr模式允许两个主机之间的各个连接有效地利用大于一个接口的带宽。

12.2.2 MT链接监视多交换机拓扑

同样,在实践中,由于性能优先于可用性,因此MII监视器最常用于此配置。ARP监视器将在此拓扑中起作用,但是随着所涉及的系统数量的增加(所需记住的网络中的每个主机都配置有绑定),所需的探针数量会削弱其在MII监视器上的优势。

13.开关行为问题

13.1链路建立和故障转移延迟

对于交换机进行的链路向上和向下报告的时间安排,某些交换机表现出不良行为。

首先,当链路建立时,某些交换机可能指示链路已建立(载波可用),但在一段时间内未通过接口传递流量。该延迟通常是由于某种类型的自动协商或路由协议引起的,但也可能在交换机初始化期间(例如,在交换机故障后的恢复期间)发生。如果发现这是一个问题,请为updelay bonding模块选项指定一个适当的值,以延迟使用相关接口。

其次,在链路改变状态时,某些开关可能会“反弹”链路状态一次或多次。这在开关初始化时最常见。同样,适当的上延迟值可能会有所帮助。

请注意,当绑定接口没有活动的链接时,即使已指定updelay参数(在这种情况下,updelay将被忽略),驱动程序也会立即重用上升的第一个链接。如果有从接口等待上延时超时,则首先进入该状态的接口将立即重用。如果已经高估了上延迟的值,这会减少网络的停机时间,并且由于这种情况仅在没有连接的情况下才会发生,因此没有额外的代价来忽略上延迟。

除了担心交换机的时间安排之外,如果您的交换机花费很长时间进入备份模式,则可能希望在链路断开后不立即激活备份接口。可以通过downdelay绑定模块选项延迟故障转移。

13.2重复的传入数据包

注意:从版本3.0.2开始,绑定驱动程序具有抑制重复数据包的逻辑,这将在很大程度上消除此问题。保留以下描述以供参考。

第一次使用绑定设备时或空闲一段时间后,通常会出现短暂的重复流量突发现象。通过向网络上的其他主机发出“ ping”,并注意到ping标志的输出重复(通常每个从属一个),可以很容易地观察到这一点。

例如,在活动备份模式下的绑定上,其中五个从机都连接到一个交换机,其输出可能如下所示:

# ping -n 10.0.4.2
PING 10.0.4.2 (10.0.4.2) from 10.0.3.10 : 56(84) bytes of data.
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.7 ms
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=2 ttl=64 time=0.216 ms
64 bytes from 10.0.4.2: icmp_seq=3 ttl=64 time=0.267 ms
64 bytes from 10.0.4.2: icmp_seq=4 ttl=64 time=0.222 ms

这不是由于绑定驱动程序中的错误,而是由于有许多交换机更新其MAC转发表的副作用。最初,交换机不会将数据包中的MAC地址与特定的交换机端口相关联,因此它可以将流量发送到所有端口,直到更新其MAC转发表为止。由于连接到绑定的接口可能会占用单个交换机上的多个端口,因此当交换机(临时)将流量泛洪到所有端口时,绑定设备将接收同一数据包的多个副本(每个从属设备一个)。

重复的数据包行为取决于交换机,某些交换机表现出这种情况,有些则没有。在显示此行为的交换机上,可以通过清除MAC转发表来诱发这种情况(在大多数Cisco交换机上,特权命令“ clear mac address-table dynamic”将完成此操作)。

14.硬件特定注意事项

本节包含用于在特定硬件平台上配置绑定或与特定交换机或其他设备接口绑定的其他信息。

14.1 IBM BladeCenter

这适用于JS20和类似系统。

在JS20刀片服务器上,绑定驱动程序仅支持balance-rr,active-backup,balance-tlb和balance-alb模式。这主要是由于BladeCenter内的网络拓扑结构,如下所述。

JS20网络适配器信息
所有JS20都在平面上集成了两个Broadcom千兆以太网端口(IBM所说的“主板”)。在BladeCenter机箱中,所有JS20刀片服务器的eth0端口都硬连接到I / O模块#1;同样,所有eth1端口都连接到I / O模块2。可以在JS20上安装附加的Broadcom子卡,以提供另外两个千兆以太网端口。这些端口eth2和eth3分别连接到I / O模块3和4。

每个I / O模块都可以包含一个交换机或一个直通模块(允许端口直接连接到外部交换机)。某些绑定模式需要特定的BladeCenter内部网络拓扑才能起作用。这些在下面详细说明。

可以在以下两个IBM红皮书(www.ibm.com/redbooks)中找到特定于BladeCenter的其他网络信息:

“ IBM eServer BladeCenter网络选项”
“ IBM eServer BladeCenter 2-7层网络交换”
BladeCenter网络配置
由于BladeCenter可以通过多种方式进行配置,因此本讨论将仅限于描述基本配置。

通常,在I / O模块1和2中使用以太网交换机模块(ESM)。在这种配置中,JS20的eth0和eth1端口将连接到不同的内部交换机(在相应的I / O模块中)。

直通模块(OPM或CPM,光纤或铜缆直通模块)将I / O模块直接连接到外部交换机。通过在I / O模块#1和#2中使用PM,可以将JS20的eth0和eth1接口重定向到外部环境并连接到公共外部交换机。

根据ESM和PM的混合情况,网络似乎将作为单个交换机拓扑(所有PM)或作为多个交换机拓扑(一个或多个ESM,零个或多个PM)进行绑定。也可以将ESM连接在一起,从而得到与上面“多交换机拓扑中的高可用性”示例类似的配置。

特定模式的要求
balance-rr模式要求为绑定中的设备使用直通模块,所有模块均连接到公共外部开关。该交换机必须在适当的端口上配置为“ etherchannel”或“ trunking”,与balance-rr一样。

balance-alb和balance-tlb模式将与交换模块或直通模块(或混合模块)一起使用。这些模式的唯一特定要求是,所有网络接口必须能够到达通过绑定设备发送的流量的所有目的地(即,网络必须在BladeCenter外部的某个位置汇聚)。

主动备份模式没有其他要求。

链接监控问题
当安装了以太网交换机模块时,只有ARP监视器才能可靠地检测到外部交换机的链路丢失。这没什么异常,但是检查BladeCenter机柜会发现,当这些“外部”端口与JS20系统本身的设备之间存在切换时,“外部”网络端口就是系统的以太网端口。MII监视器仅能够检测ESM和JS20系统之间的链接故障。

当直通模块安装到位时,MII监视器会检测到“外部”端口的故障,该端口随后直接连接到JS20系统。

其他问题
LAN上串行(SoL)链接仅通过主以太网(eth0)建立,因此,到eth0的任何链接丢失都将导致您的SoL连接丢失。它不会随其他网络流量进行故障转移,因为SoL系统不受绑定驱动程序的控制。

可能需要禁用交换机(内部以太网交换机模块或外部交换机)上的生成树,以避免使用绑定时出现故障转移延迟问题。

15.常见问题

  1. SMP安全吗?
    是。旧的2.0.xx通道绑定修补程序不是SMP安全的。新驱动程序从一开始就被设计为SMP安全的。

2.哪种类型的卡可以使用?
任何以太网类型的卡(例如,您甚至可以混合使用卡-例如Intel EtherExpress PRO / 100和3com 3c905b)。对于大多数模式,设备的速度不必相同。

从3.2.1版开始,绑定还支持活动备份模式下的Infiniband从站。

3.我可以有多少台粘合设备?
没有限制。

4.绑定设备可以有多少个从设备?
这仅受Linux支持的网络接口数量和/或您可以在系统中放置的网卡数量的限制。

5.从站链路死亡时会发生什么?
如果启用了链接监视,则将禁用发生故障的设备。活动备份模式将故障转移到备份链接,其他模式将忽略发生故障的链接。链接将继续受到监视,并且如果链接恢复,它将重新加入绑定(以适合该模式的任何方式)。有关其他信息,请参见高可用性部分和每种模式的文档。

可以通过miimon或arp_interval参数(在上面的模块参数部分中介绍)来启用链接监视。通常,miimon监视底层网络设备检测到的载波状态,而arp监视器(arp_interval)监视与本地网络上另一主机的连接。

如果未配置任何链接监视,则绑定驱动程序将无法检测到链接故障,并将假定所有链接始终可用。这可能会导致丢包,并导致性能下降。精确的性能损失取决于绑定模式和网络配置。

6.绑定可以用于高可用性吗?
是。有关详细信息,请参见“高可用性”部分。

7.它与哪些交换机/系统一起使用?
对此的完整答案取决于所需的模式。

在基本的平衡模式(balance-rr和balance-xor)下,它可与任何支持以太通道(也称为中继)的系统一起使用。当前可用的大多数管理型交换机都具有这种支持,并且也有许多非管理型交换机。

高级的平衡模式(balance-tlb和balance-alb)没有特殊的开关要求,但是需要支持特定功能的设备驱动程序(在上面的模块参数下的相应部分中进行了介绍)。

在802.3ad模式下,它可与支持IEEE 802.3ad动态链接聚合的系统一起使用。当前可用的大多数托管和许多非托管交换机都支持802.3ad。

主动备份模式应适用于任何第二层交换机。

8.绑定设备从哪里获得其MAC地址?
当使用具有固定MAC地址的从设备时,或者启用了fail_over_mac选项时,绑定设备的MAC地址就是活动从设备的MAC地址。

对于其他配置,如果未显式配置(使用ifconfig或ip链接),则从其第一个从属设备获取绑定设备的MAC地址。然后,此MAC地址将传递到所有随后的从站,并保持不变(即使删除了第一个从站),直到将绑定设备关闭或重新配置为止。

如果要更改MAC地址,可以使用ifconfig或ip link进行设置:

# ifconfig bond0 hw ether 00:11:22:33:44:55
# ip link set bond0 address 66:77:88:99:aa:bb

也可以通过关闭/打开设备,然后更改其从设备(或它们的顺序)来更改MAC地址:

# ifconfig bond0 down ; modprobe -r bonding
# ifconfig bond0 .... up
# ifenslave bond0 eth...

该方法将自动从添加的下一个从站获取地址。

要恢复从站的MAC地址,您需要将其与绑定()分离。然后,绑定驱动程序将还原从站被奴役之前拥有的MAC地址。ifenslave -d bond0 eth0

16.资源和链接

绑定驱动程序的最新版本可在http://kernel.org上的最新Linux内核版本中找到。

可以在最新的内核源代码(名为Linux Ethernet Bonding Driver HOWTO)中找到该文档的最新版本。

关于绑定驱动程序开发的讨论在主要的Linux网络邮件列表中进行,该列表位于vger.kernel.org。列表地址为:

netdev @ vger 。内核。组织

管理界面(订阅或退订)可以在以下位置找到:

http://vger.kernel.org/vger-lists.html#netdev

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

华为AR路由器路由策略的简单应用-爱代码爱编程

路由策略和策略路由是路由业务中经常用到的术语,它们有什么区别呢? 路由策略: 主体是路由,是对符合条件的路由通过修改路由属性来执行相应的策略动作(如允许通过/拒绝通过/接收/引入),使通过这些路由的数据报文按照规定的策略转发; 策略路由: 主体是数据报文,对符合条件的数据报文(如,源地址和报文长度)按照策略规定的动作转发,如设置出接口,下一跳,设置

渗透测试之信息收集-爱代码爱编程

信息收集 在安全测试中,信息收集是非常重要的一个环节,此环节的信息将影响到后续的成功几率,掌握信息的多少将决定发现漏洞机会大小和攻击面的多少,换言之信息收集决定着你是否能完成目标的测试任务。也可以很直接的说:渗透测试的思路就是从信息收集这里开始,你与大牛的差距也是从这里开始的! 我把信息收集大致分为两种情况,有CDN和没有CDN,初学者大都还不明白CD

华为端口隔离原理和实验-爱代码爱编程

模拟器:eNSP 端口隔离的概念: 是交换机端口之间的一种访问控制安全控制机制,主要是为了进行二层隔离,也可以实现二,三层隔离,在没有这个技术之前,需要将二,三层隔离都是划分入不同的VLAN,这样浪费了很多vlan的资源,端口隔离是在接口上配置,配置了隔离的端口,每个接口可以配置多个安全隔离组,每一组不能进行二层,或二,三层通信,不同组之间可以进行正常

过端口 1433 连接到主机XXX.XX.XX.XX 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端-爱代码爱编程

每一次写点东西都会遇到问题,今天本来想要用jdbc连接我的服务器上的数据库然后没有任何意外的出错“通过端口 1433 连接到主机XXX.XX.XX.XX 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口

软件实施人员具备的技能和素养-爱代码爱编程

导读:软件实施可以说是软件产品服务主线的一个决定性环节,软件的成功离不开实施。那什么才是成功的实施呢?要让用户真正使用起来,让用户满意,用户的成功也是软件公司的成功。只不过,软件要能真正使用起来,其实也不象想象中那么容易。有时我们的客户端软件运行的速度实在令人尴尬,有时用户登陆就要花费很长时间,造成客户对软件的第一印象就是慢。要成为一名优秀软件实施人员有哪

疫情下的IT运维-爱代码爱编程

度过了“最好的”2019,却迎来了“史无前例”的2020。疫情犹如绞肉机,将本不景气的传统行业绞的更加支离破碎。时代进入到了拐点,他甩下了一批人,也成就了一批人。纵观过去的IT行业,每一次技术的迭代更新,总会经历一个循序渐进的过程。但是今年,在新冠疫情的推动下,云计算以势如破竹之势,席卷了各个行业。由于大量的员工还在处于在家办公室的状态,各个公司发现他们前

Linux:文件相关命令(cp、move、rm)、文本处理(wc、cut、sort、uniq)、文本文件查看命令(cat、less、tail)、文件时间戳命令(touch)-爱代码爱编程

  目录 一、文件相关操作(cp、move、rm)、文本编辑器:nano 二、文本处理命令(wc、cut、sort、uniq) ​​​​​​​​​​​​​​​​​​​​​三、文本文件查看命令(cat、more、less、tail) ​​​​​​​​​​​​​​四、文件时间戳管理工具(stat、touch)   一、文件相关操作(cp、move

运维老手常用的linux命令操作-爱代码爱编程

运维离不开linux,linux离不开命令操作,熟悉一些好用的linux命令会极大的提升你的工作效率,命令之间灵活的搭配更是会爆发无穷的生产力 本文介绍一些好用命令的使用场景,不会详细介绍命令的参数 1·find命令 一般刚刚接触linux的人可能仅仅只是把find命令当成了查找文件的命令,但是它的强大远远不止查找文件,举例如下,批次见可以自由结合使用

linux搭建Minio并配置-爱代码爱编程

官方网址: https://min.io 官方中文文档网址:https://docs.min.io/cn/ 官方网址: [https://min.io](https://min.io)官方中文文档网址:[https://docs.min.io/cn/](https://docs.min.io/cn/)下载安装运行赋予 写 权限运行这里是挂后

Linux扩展分区和文件系统-爱代码爱编程

磁盘分区 linux也与windows一样,为了使用全部的磁盘空间,需要先对磁盘分区;如果所有分区的总容量小于磁盘容量,说明磁盘还有未分配空间,这个时候会对磁盘造成浪费。需要增加一个新的分区来将全部空间利用上。 fdisk 此命令是磁盘的管理命令。fdisk -l可查看目前磁盘总容量和各分区情况。 fdisk /dev/sda可查看sda磁盘的相关情况,

使用nohup命令远程连接服务器断连后继续运行程序-爱代码爱编程

linux可以使用nohup命令,让服务器在ssh远程连接断掉后依旧可以运行程序,并且将程序的输出打印到nohup.out文件中。 命令使用: 1.nohup 用途:不挂断地运行命令。 语法:nohup Command [ Arg … ] [ & ]   无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out

设置ubuntu终端光标开启自动显示-爱代码爱编程

目录 终端光标消失的原因回显和隐藏光标的方法开机自动回显光标总结 终端光标消失的原因   在使用ubuntu子系统终端时,光标经常会被我一顿操作后就消失不见。现在我突然发现是中英文输入切换的原因,在刚进入终端时,由于此时是中文输入,没注意打了几个字,随手就用shift切换为英文,此时光标就消失了。这时如果想要找回光标,再按shift切换输入法