语境 :
- 截至 2016 年 10 月的 RHEL 7.2
- 物理系统
- 网络管理器已禁用
- 通过将 2x10G NIC(eth0 和 eth1)组合为 lacp0 配置的网络
- (不相关)在 VLAN 子接口 lacp0.XXX 和 lacp0.YYY 上配置 IP 地址
- (也无关紧要)这些系统注定是Oracle 12c节点
网络连接 100% OK,基准测试确认 LACP 功能齐全,接近 20 GBps 的理论最大值。
问题 :
systemd 不会检测到网络堆栈在关机期间停止,并一直等到为时已晚才卸载 NFS 共享,因此无法卸载它们,这导致它无限期地挂起以等待 NFS 服务器响应。
症状) :
运行“systemctl stop network.service”后,network.target 和 network-online.target 仍然被认为是活动的。
到目前为止我所做的:
通过文件添加的 NFS 挂载/etc/fstab
被转换为*.mount
systemd 单元。这些单元自动取决于remote-fs.target
哪个取决于 `network-online.target。
从文档来看,network*.target 似乎依赖于网络管理工具来检测网络是否正常等。这可以是NetworkManager
,systemd-nerworkd
或其他任何东西(但什么?)。我认为我的问题可能在这里,因为我们的 jumpstart 模板似乎依赖于旧的 init 脚本来管理接口。而且我怀疑 systemd 是否可以与它交互以获知网络正在启动或关闭(尽管被用来停止网络堆栈systemctl stop network
)
我的第二个假设是即使通过 ifcfg-* 文件使用 libteam/teamd 的网络组合不在 systemd network.target 范围内。teamd systemd 单元(包括 [email protected])和网络单元之间似乎没有依赖关系。这可以解释为什么显示此问题的唯一系统是那些启用了 LACP 的系统,而我们之前在使用典型绑定时没有遇到此问题。
所以我的问题是:在我的网络堆栈被关闭之前,通常在重新启动系统时,我必须确保我的 NFS 共享被卸载?
PS:如果上述解决方案不是来自创建 NFS 挂载的方式会更好,这样必须向该服务器添加共享的人不必被告知要采取的特殊步骤。考虑到我们的生产过程,这似乎几乎是不可能的。
不幸的是,这个问题的唯一“正确”答案似乎是使用网络管理工具,目前是
NetworkManager
(红帽最佳实践)或systemd-networkd
.为了避免使用 NetworkManager,我们使用的解决方法是:
编辑
/etc/systemd/system/[email protected]/override.conf
此文件将连接到任何系统模板,
teamd@<teamname>.service
因为/etc/systemd/system/*
文件优先于/usr/lib/systemd/system/
停止时,systemd 将首先启动 NFS 卸载,但默认情况下不等待它们完成。然后,我们强制负责网络连接的 [email protected] 最多等待 30 秒以卸载 NFS 共享,然后再杀死 teamd 守护程序并继续关闭过程。
参考 :