mve*_*one 5 redhat nfs linux-networking lacp systemd
网络连接 100% 正常,基准测试确认 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
或其他任何内容(但是什么?)。我认为我的问题可能就在这里,因为我们的快速启动模板似乎依赖于旧的初始化脚本来管理接口。我怀疑 systemd 是否可以与它交互以获知网络正在启动或关闭(尽管被用来停止网络堆栈systemctl stop network
)
我的第二个假设是,即使通过 ifcfg-* 文件使用 libteam/teamd 进行网络分组也超出了 systemd network.target 范围。teamd systemd 单元(包括 teamd@lacp0.service)和网络单元之间似乎没有依赖性。这可以解释为什么显示此问题的唯一系统是那些启用 LACP 的系统,而我们之前在使用典型绑定时没有遇到此问题。
所以我的问题是:我必须采取什么解决方案来确保在网络堆栈关闭之前(通常是在重新启动系统时)卸载我的 NFS 共享?
PS:如果上述解决方案不是来自创建 NFS 挂载的方式,那就更好了,这样必须向该服务器添加共享的人就不必被告知要采取的特殊步骤。考虑到我们的生产过程,这似乎几乎是不可能的。
不幸的是,这个问题的唯一“正确”答案似乎是使用网络管理工具,目前它是NetworkManager
(红帽最佳实践)或systemd-networkd
。
为了避免使用 NetworkManager,我们使用的解决方法是:
编辑/etc/systemd/system/teamd@.service.d/override.conf
[Unit]
Before=remote-fs.target
[Install]
WantedBy=network-online.target
[Service]
ExecStop=/bin/bash -c "while grep ' nfs ' /proc/mounts; do sleep 5; done"
TimeoutStopSec=30
Run Code Online (Sandbox Code Playgroud)
该文件将连接到任何文件的系统模板,teamd@<teamname>.service
因为/etc/systemd/system/*
文件优先于/usr/lib/systemd/system/
停止时,systemd 将首先启动 NFS 卸载,但默认情况下不会等待它们完成。然后,我们强制负责网络连接的 teamd@.service 在终止 teamd 守护进程并继续关闭过程之前等待最多 30 秒以卸载 NFS 共享。
参考 :
归档时间: |
|
查看次数: |
3493 次 |
最近记录: |