重启后绑定网络接口不可用

wol*_*tle 6 networking scientific-linux

我有一些带有多个网络接口的服务器,设置了绑定和一些 VLAN。每当我重新启动服务器时,其他服务器都无法访问其中一个绑定的网络接口,任何流量也无法离开该接口。但是,该接口上的 ifconfig 状态确实表明链接已启动。此时只需重新启动网络即可恢复一切正常。

在我重新启动网络后一切都按预期工作这一事实让我认为我的配置是正确的,但它在启动顺序中的某些内容在重新启动时无法正常工作,但在重新启动网络时会得到纠正。

我有 7 个具有相同设置的相同服务器(除了 IP 地址不同),并且每次重新启动时都会发生这种情况。

有关设置的更多详细信息:

  • 服务器:HP ProLiant DL380
  • 6 个网络接口,设置为 3 个绑定接口,命名为:bondm、bondr、bondt。
  • 内置4个接口,其余2个在附加PCI卡中
  • bondm 配置了 2 个 VLAN
  • bondm 用作默认路由
  • bondm 设置为使用 eth0 和 eth2
  • bondm 是重启失败的接口

更新: 我已经使用完全相同的配置和 kickstart 文件重新测试了这一点,但使用的是 SL 6.2 与 6.3。6.2 一切正常,但我在 6.3 中得到了这种行为。是因为内核不同吗?

以下是 /etc/sysconfig/network-scripts 中的一些相关配置文件:

$ cat ifcfg-eth0 ifcfg-eth2 ifcfg-bondm ifcfg-bondm.132 ifcfg-bondm.832 
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
HWADDR=44:1E:A1:03:71:C4
SLAVE=yes
MASTER=bondm
ETHTOOL_OPTS="-s eth0 speed 1000 duplex full"

DEVICE=eth2
HWADDR=44:1E:A1:03:71:C8
NM_CONTROLLED=no
ONBOOT=yes
SLAVE=yes
MASTER=bondm
ETHTOOL_OPTS="-s eth2 speed 1000 duplex full"

DEVICE=bondm
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
BONDING_OPTS="mode=active-backup miimon=100"

DEVICE=bondm.132
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.13.19
PREFIX=28
GATEWAY=192.168.13.17
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
BONDING_OPTS="mode=active-backup miimon=100"
VLAN=yes

DEVICE=bondm.832
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.123.94.69
PREFIX=28
DEFROUTE=no
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
BONDING_OPTS="mode=active-backup miimon=100"
VLAN=yes
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 3

modprobe.d

您是否按照此RHEL6 站点上的说明创建了该文件/etc/modprobe.d/bonding.conf并将您的bondm设备添加到该文件中?

alias bondm bonding
Run Code Online (Sandbox Code Playgroud)

缺少第二个网卡的类型

另外,如果这很重要,但你的eth2设备缺少这一行,我也不是:

TYPE=Ethernet
Run Code Online (Sandbox Code Playgroud)

禁用网络管理器?

您是否尝试过禁用 NetworkManager 服务?尝试一下,看看问题是否仍然存在,重新启动以确认。

% chkconfig off NetworkManager
Run Code Online (Sandbox Code Playgroud)

UDEV

您在这些机器上使用 udev 吗?我遇到了 udev 在这里填充文件/etc/udev/rules.d/70-persistent-net.rules. 该文件在机器上有 NIC 的冗余条目,我必须手动编辑该文件。我的看起来像这样:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# net device () (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="54:52:00:ff:ff:f5", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
Run Code Online (Sandbox Code Playgroud)

UDEV 根据 MA​​C 地址分配设备,您可以强制它根据 NIC 在 PCI 总线中占据的位置进行分配。

您可以使用此命令来确定 NIC 的 PCI 信息:

% for i in /sys/class/net/*;do printf "device: %6s - %s\n" `basename $i` `readlink -f $i`;done
device:    br0 - /sys/devices/virtual/net/br0
device:   eth0 - /sys/devices/pci0000:00/0000:00:1c.5/0000:09:00.0/net/eth0
device:   eth1 - /sys/devices/pci0000:00/0000:00:2d.5/0000:03:00.0/net/eth1
device:     lo - /sys/devices/virtual/net/lo
Run Code Online (Sandbox Code Playgroud)

根据此输出,您需要填充自己的 udev 规则文件:

% cat > /etc/udev/rules.d/70-persistent-net.rules << EOF
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", KERNELS=="0000:00:1c.5", \
    NAME="eth0"
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", KERNELS=="0000:00:2d.5", \
    NAME="eth1"
EOF
Run Code Online (Sandbox Code Playgroud)

注意:还要确保删除/禁用任何可能已尝试设置 NIC 的现有 udev 规则文件。

CentOS 6.3 的错误

我在 CentOS 问题跟踪器上发现了这个错误。6.3 的发行说明也列出了它。

摘自Centos 6.3 发行说明:

在绑定 (802.3ad) 接口和某些 NIC 上使用 802.1q VLANing 时似乎存在问题。有关详细信息,请参阅此上游 bugzilla 条目和此 CentOS bugzilla 条目。随 6.3 一起发布的 CentOS-Plus 内核包含修复此问题的补丁。从内核 2.6.32-279.2.1 开始,此问题已得到修复。

这个问题听起来很像您一直在处理的问题。你运行什么内核?( uname -a)。

  • @slm 不错的 udev 信息并追踪潜在的相关错误!!1 (2认同)