networking连接是100%OK,基准testing证实LACPfunction完全正常,接近20 GBps理论最大值。
systemd在关机期间没有检测到networking堆栈已经停止,并且等到为时已经太晚才能卸载NFS共享,从而无法卸载它们,从而导致NFS服务器无限期地挂起以供NFS服务器响应。
运行“systemctl stop network.service”之后,network.target和network-online.target仍被视为活动的 。
通过/etc/fstab文件添加的NFS挂载被转换为*.mount systemd单元。 这些单元自动依赖于依赖于network-online.target的remote-fs.target 。
从文档看来,networking* .target依赖于networkingpipe理工具来检测networking是否启动等。 这可以是NetworkManager , systemd-nerworkd ,或其他任何东西(但什么?)。 我想我的问题可能在这里,因为看起来我们的jumpstart模板依赖于旧的init脚本来pipe理接口。 我怀疑systemd可以与它交互,以获知networking正在启动或closures(尽pipe用于停止与systemctl stop network的networking堆栈)
我的第二个假设是,即使通过ifcfg- *文件使用libteam / teamd的networking组合也超出了systemd的network.target范围。 团队系统单元(包括[email protected])和networking单元似乎没有依赖关系。 这就解释了为什么唯一显示这个问题的系统是那些LACP支持的系统,而我们在使用典型的绑定之前没有这个问题。
所以我的问题:我有什么解决scheme,以确保我的NFS共享被卸载之前,我的networking堆栈被closures,通常是在重新启动系统?
PS:如果上述解决scheme不是来自创buildNFS挂载的方式,那么会更好,因此必须向此服务器添加共享的人员不必知道要采取的特殊步骤。 考虑到我们的生产stream程,这似乎几乎不可能
不幸的是,对这个问题唯一的“正确的”答案似乎是使用networkingpipe理工具,现在是NetworkManager (红帽最佳实践)或systemd-networkd 。
我们使用的解决方法,为了避免使用NetworkManager是这样的:
编辑/etc/systemd/system/[email protected]/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
此文件将被连接到任何teamd@<teamname>.service的系统模板,如/etc/systemd/system/*文件优先于/usr/lib/systemd/system/
在停止时,systemd将首先启动NFS卸载,但默认情况下不会等待它们完成。 然后,我们强制teamd @ .service(负责networking连接)等待最多30秒,以便卸载NFS共享,然后杀死teamd守护进程并继续closures进程。
参考文献