我有两个接口以 LACP 模式 (mode=4 <=> 802.3ad) 绑定在一起bond0
:
bond0
重启前的mac地址:
$ cat /sys/class/net/bond0/address
xx:xx:xx:xx:xx:bf
bond0
重启后的mac地址:
$ cat /sys/class/net/bond0/address
xx:xx:xx:xx:xx:bd
以下是有关网络配置的一些信息:
$ ip -o l | grep state.UP
2: em1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000\ link/ether xx:xx:xx:xx:xx:bd brd ff:ff:ff:ff:ff:ff
3: em2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000\ link/ether xx:xx:xx:xx:xx:bd brd ff:ff:ff:ff:ff:ff
7: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000\ link/ether xx:xx:xx:xx:xx:bd brd ff:ff:ff:ff:ff:ff
$ grep BONDING_OPTS= /etc/sysconfig/network-scripts/ifcfg-bond0
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
$ egrep "(MASTER|SLAVE)=" /etc/sysconfig/network-scripts/ifcfg-em?
/etc/sysconfig/network-scripts/ifcfg-em1:MASTER=bond0
/etc/sysconfig/network-scripts/ifcfg-em1:SLAVE=yes
/etc/sysconfig/network-scripts/ifcfg-em2:MASTER=bond0
/etc/sysconfig/network-scripts/ifcfg-em2:SLAVE=yes
$ egrep -v "^$|^#" /etc/NetworkManager/NetworkManager.conf
[main]
[logging]
为什么mac地址bond0
变了?
答案1
考虑到最后一个八位位组只有几个,很可能两个 NICem1
和em2
位于同一张卡上,并且绑定已从另一个 NIC 获取 MAC。
绑定将从加入绑定的第一个 NIC 获取 MAC 地址。
然而,NIC 枚举的顺序不确定。
一次启动,em1
具有 MAC 结尾的NICbd
可能会首先加入绑定,因此绑定会选择 MAC 结尾bd
。
再次启动时,em2
具有 MAC 结尾的NICbf
可能会首先加入绑定,因此绑定会选择 MAC 结尾bf
。
这就是硬件枚举的工作原理。
最近的 NetworkManager 有一个功能,它可以按特定顺序将子设备连接到父设备来解决这个确切的问题,因此请迁移到 RHEL9(您可以获取免费)或 Rocky/Alma 9(如果您喜欢的话)。
另一种可能的选择是,您强制 NIC 使用这些名称em1
,em2
尽管这些名称是 systemd 期望能够使用的保留名称。如果您正在这样做,请不要这样做。这不起作用。
让 systemd 按照自己的意愿命名设备,或者使用内核和 systemd 不希望使用的手动名称。您可能会使用netX
或类似的。