我有一些具有多个网络接口的服务器,设置了绑定和一些 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
答案1
modprobe.d
根据此说明RHEL6站点您是否创建了该文件/etc/modprobe.d/bonding.conf
并将您的bondm
设备添加到该文件中?
alias bondm bonding
缺少第二个网卡的类型
另外,我不是重要的,而是你的以太坊2设备缺少此行:
TYPE=Ethernet
禁用网络管理器?
您是否尝试过禁用 NetworkManager 服务?尝试一下,看看问题是否仍然存在,重新启动以确认。
% chkconfig off NetworkManager
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"
UDEV 根据 MAC 地址分配设备,您可以强制它根据 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
根据此输出,您需要填充自己的 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
笔记:另请确保删除/禁用任何可能已尝试设置 NIC 的现有 udev 规则文件。
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
)。