我正在尝试在我的 4.4 proxmox 服务器上建立一个绑定。
我选择了主动备份,因为该结合将链接到不使用生成树协议的 Linux 桥。
Bond(bond1) 将有 2 个从属设备:Bond0 是 3 个链路(eth0、eth1、eth2) 的 LACP,连接到 1 个交换机,eth3 连接到另一个交换机。
我的问题是,当我拔下 Bond0(Bond1 的主接口)时,我会拔下(eth0 eth1 eth2)上的所有电缆
Bond1 保持 bond0 作为活动链路,效果为:服务器无法从本地网络访问。
我认为这是因为即使 3 个从属设备关闭,Bond0 仍保持 UP。
因为当我执行 ifconfig bond0 down 时。
Bond1 使用另一条链路(eth3)进行连接。服务器回到本地网络。
这就是它应该工作的方式。
因此,我尝试了 bond0 中的多个参数,以强制它在 eth0 eth1 和 eth2 处于 DOWN 状态时处于 DOWN 状态。
我没能找到答案。
我甚至在 /etc/network/interface 中的 eth0 eth1 和 eth2 上使用了 post-down、post-up、.... 参数,以触发一个脚本,当这些端口处于 DOWN 状态时执行 ifdown bond0,当其中一个端口恢复工作时执行 ifup bond0。
但这不起作用,我尝试拔掉 bond0。bond1 仍使用 bond0 作为活动链接。脚本未运行。
这时候我真想拔掉我的头发……
该脚本未被触发,因为仅当我执行 ifdown eth0 ifdown eth1 或 ifdown eth2 时才会执行它们...
(post-down,post-up):现在我知道这些参数仅在我们运行 ifdown 或 ifup 时才会发出命令,而不会在我们拔掉插头时发出命令。(说真的,这个功能的意义何在)。
我想在接口关闭时执行一项操作,但当我拔下以太网电缆时它不起作用.....
这根本不是我想要的。
我在更改之间重新启动。
我现在有点绝望,我花了 9 个小时在这上面。
所以我请求你的帮助。
我找到了一个 debian 软件包“ifplugd”,当接口被拔出时,它会执行一些操作。我明天会试试
我真的不知道这里的最佳做法是什么。
我正在听取任何建议。谢谢。
更新
这是 /etc/network/interface:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
post-down do_i_bring_bond0_down.sh
post-up do_i_bring_bond0_up.sh
auto eth1
iface eth1 inet manual
post-down do_i_bring_bond0_down.sh
post-up do_i_bring_bond0_up.sh
auto eth2
iface eth2 inet manual
post-down do_i_bring_bond0_down.sh
post-up do_i_bring_bond0_up.sh
iface eth3 inet manual
auto bond0
iface bond0 inet manual
slaves eth0 eth1 eth2
bond_miimon 100
bond_mode 802.3ad
bond_xmit_hash_policy layer3+4
bond_min_links 1
auto bond1
iface bond1 inet manual
slaves bond0 eth3
bond_miimon 100
bond_mode active-backup
bond_primary bond0
bond_updelay 100
bond_downdelay 100
auto vmbr0
iface vmbr0 inet static
address 10.4.2.4
netmask 255.255.255.192
gateway 10.4.2.1
bridge_ports bond1.20
bridge_stp off
bridge_fd 0
auto vmbr1
iface vmbr1 inet manual
bridge_ports bond1
bridge_stp off
bridge_fd 0
bridge_vlan_aware yes
/proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: bond0 (primary_reselect always)
Currently Active Slave: bond0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 100
Down Delay (ms): 100
Slave Interface: bond0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: c8:1f:66:c2:dc:3b
Slave queue ID: 0
Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:15:17:3a:a9:bf
Slave queue ID: 0
/proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: c8:1f:66:c2:dc:3b
Active Aggregator Info:
Aggregator ID: 2
Number of ports: 3
Actor Key: 9
Partner Key: 67
Partner Mac Address: 80:2a:a8:df:42:b1
Slave Interface: eth0
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: c8:1f:66:c2:dc:3b
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 1
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: c8:1f:66:c2:dc:3b
port key: 0
port priority: 255
port number: 1
port state: 61
details partner lacp pdu:
system priority: 32768
system mac address: 80:2a:a8:df:42:b1
oper key: 67
port priority: 128
port number: 8
port state: 61
Slave Interface: eth1
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: c8:1f:66:c2:dc:3c
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: c8:1f:66:c2:dc:3b
port key: 0
port priority: 255
port number: 2
port state: 61
details partner lacp pdu:
system priority: 32768
system mac address: 80:2a:a8:df:42:b1
oper key: 67
port priority: 128
port number: 7
port state: 61
Slave Interface: eth2
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 00:15:17:3a:a9:be
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 1
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: c8:1f:66:c2:dc:3b
port key: 0
port priority: 255
port number: 3
port state: 61
details partner lacp pdu:
system priority: 32768
system mac address: 80:2a:a8:df:42:b1
oper key: 67
port priority: 128
port number: 9
port state: 61
答案1
您无法绑定债券,此配置错误。
请参阅我的其他答案,了解仅使用 LACP 实现“绑定之间的故障转移”的方法,这是正确的配置:https://unix.stackexchange.com/questions/82569/bonds-vs-aggregators/172232#172232
答案2
问题似乎是这样的:“最小链接数:0”。从min_links 参数的绑定文档
最小链接数
这允许设置在将绑定设备标记为启动(载波开启)之前必须启动(链路启动状态)的最小成员端口数
默认值为 0。只要有活动的聚合器,这将导致载波被断言(对于 802.3ad 模式),而不管该聚合器中可用链路的数量。
然而,这部分有点令人困惑:
请注意,由于聚合器在没有至少一个可用链接的情况下无法处于活动状态,因此将此选项设置为 0 或 1 具有完全相同的效果。
在您的 bond0 示例中,所有三个 eth 接口的 MII 状态(链路状态)均为关闭,但它们所在的聚合器 (2) 处于活动状态,这似乎与文档相矛盾。让我们看看源代码。
bond_3ad_set_carrier() 的代码调用 __agg_active_ports(),它只是检查每个设备的“is_enabled”标志的值,似乎与链接状态无关。
此补丁似乎表明情况确实如此:
目前,补丁使用活动从属设备的数量与 min_links 进行比较,以了解何时开启/关闭 Bond Carrier。建议将 min_links 设置为 1,而不是默认的零。使用 min_links=1 表示 Bond 内必须至少有 1 个从属设备处于活动状态,Bond 才能开启。
据我所知,该补丁尚未集成到主线中,或者可能以我无法辨别的修改形式集成到主线中。
尝试将 min_links 设置为 1 或 2,看看会发生什么。如果不起作用,您可以从 miimon 切换到 arp 监控(设置 arp_interval apr_ip_target 等)。
PS 如果您最终使用 LACP,我会将 lacp_rate 从默认值(每 30 秒传输一次慢速 LACPDU - 即检测故障的时间为 30 秒)更改为快速或 1(请求合作伙伴每 1 秒传输一次 LACPDU)。
编辑:进一步研究代码让我开始质疑我的答案。当链接状态发生变化时,bond_3ad_handle_link_change() 函数应该禁用设备。也许你没有等待 30 多秒让 LACP 状态机工作?尽管如此,我还是会留下答案,因为我花了太多时间。:)