操作指南:无需重启即可释放卡住的 NFS 挂载
计算环境可能围绕大量使用 NFS 基础设施。网络区域由存储文件服务器托管和提供,计算服务器将导出的区域挂载到其目录树中。通常,挂载在不使用时过期,并从本地机器上的目录树中移除。
如果文件服务器和计算服务器之间的 NFS 流量中断,则持有活动挂载的机器将无法释放它们。这可能在几种情况下发生。问题的一个潜在根本原因可能是网络中断;但是,一旦网络流量恢复,此问题将得到解决。更严重的情况是,当文件服务器由于故障或协调维护(包括 EOL(生命周期结束))周期而停止其服务时。任何持有不再可访问的文件服务器导出的区域的活动挂载的主机都不会释放它们。
这种情况导致所谓的卡住挂载。在受影响的计算机服务器上运行的任何等待 NFS 活动的进程都将保持在不可中断的睡眠状态,而无法终止它。到目前为止,唯一明智的解决方案是重启受影响的主机。然而,关键的计算机服务器,包括基础设施和交互式使用机器,不能在没有事先协调的情况下重启。这留下了一个时间窗口,直到下次重启,在此期间,受影响的主机将继续在不稳定的状态下运行。
我们通过引入一个伪造的文件服务器来提供无需重启的解决方案,该专用主机被分配与不可访问的文件服务器相同的 IP,然后拒绝来自计算服务器的 NFS 请求,从而释放它们。专用主机使用其自身的网络架构,允许将其移动到文件服务器使用的任何 VLAN(虚拟 LAN)。IP 更改是通过 Web 界面完成的。(VLAN 是一组具有共同需求的主机,它们像连接到同一广播域一样进行通信,而不管其物理位置如何。VLAN 具有与物理 LAN 相同的属性,但它允许将终端站分组在一起,即使它们不在同一网络交换机上。网络重新配置可以通过软件完成,而不是物理地重新定位设备。)
卡住的 NFS 挂载解决方案包括几个关键组件
-
一个用于伪造 IP 地址的专用主机——我们使用具有最低硬件要求的虚拟机。虚拟机在虚拟化服务器中分配了一个单独的 NIC。此主机称为管理服务器。
-
一种网络基础设施,支持将“伪造的”文件服务器(管理服务器)即时分配给文件服务器 VLAN。管理服务器使用单个标准 NFS 连接直接连接到 NFS 路由器,主端口具有 3Gb 通道,备用端口具有 1Gb 通道(图 1)。
-
用于将管理服务器分配给文件服务器 VLAN 的 Web 界面。
-
一种更改管理服务器上的 IP 地址的机制,可以是自动化的(脚本化的)或手动的。

图 1. 连接到 NFS 路由器
在我们的站点中,管理服务器是托管在虚拟化服务器上的虚拟机。主机运行标准的 Enterprise Linux 镜像;但是,它仅用于 IP 更改,不用于其他目的,并且配置了最小的磁盘空间和内存。虚拟机在虚拟服务器网络配置中分配了自己的 NIC。
NFS 卡住挂载 VLAN 更改是使用 Web 界面执行的。GUI 允许没有网络知识或访问权限的系统管理员更改专用服务器连接到所需 VLAN 的特定路由器端口的 VLAN 分配。GUI 具有静态配置文件,其中包含服务器名称、路由器名称和专用端口。通过 Web 界面调用后,它使用 SNMP 从路由器收集数据,并在中间显示表格、当前状态和 VLAN 下拉菜单。图 2 显示了 Web 界面的模型。

图 2. VLAN 更改的 Web 界面的一部分
单击“更改 VLAN”按钮后,脚本使用 SNMP 更改特定端口的 VLAN 分配。图 3 显示了网络流程。

图 3. VLAN 更改图
卡住的挂载通常通过受影响主机表现出的间接症状来识别,例如由于大量进程处于不可中断的睡眠状态而导致的负载增加,或者 lsof 无法完成其运行。第一步是打开 Web 界面并将 VLAN 更改为与不可访问的文件服务器匹配的 VLAN。完成此操作后,指示数据中心操作技术人员将管理服务器上的 IP 地址和默认网关更改为与不可访问的文件服务器的 IP 地址和默认网关匹配。或者,可以通过登录到虚拟化控制台上的机器并执行更改来手动配置 IP 地址和默认网关。主机 IP 地址可以在 /etc/sysconfig/network/ifcfg-ethx 或 ifcfg-eth-idxxx 下更改;默认网关在 /etc/sysconfig/network/routes 下配置。
一旦完成这两个步骤,就需要使用 /etc/init.d/network restart
重启管理服务器上的网络服务。“伪造的”文件服务器将启动并开始拒绝来自受影响主机的 NFS 请求,从而释放卡住的进程。在此阶段,系统管理员也可以尝试卸载卡住的挂载。
我们在设置此解决方案时遇到了一些挑战。在网络方面,文件服务器连接到路由器;而计算服务器连接到交换机。这需要网络运营团队采取创新方法,从而实现了到 NFS 路由器的专用连接。
此外,此解决方案需要分配站点资产,但很少使用。我们选择虚拟机是因为与使用物理机相比,它可以降低成本并在设置中具有更高的灵活性。最后,IP/VLAN 更改过程需要系统管理员的纪律和一些技能才能有效地使用它。
一年多以前,我们首次尝试将卡住的 NFS 解决方案作为一种 hack,通过手动更改与不可访问的文件服务器位于同一网段的标准计算机服务器的 IP 地址。该尝试被证明是成功的,我们能够拯救许多重要的基础设施机器免受卡住的挂载,从而防止停机和重启。
在早期成功的基础上,我们实施了完整的解决方案,并在许多场合使用过它。2010 年 7 月,我们阻止了许多 Samba 服务器以及另外 21 台计算服务器被重启。
卡住的 NFS 挂载解决方案对我们从意外的文件服务器中断中恢复的能力具有直接影响。我们还能够在无需重启的情况下缓解计划的文件服务器 EOL 遗留问题。事实上,有人可能会争辩说,该解决方案创造了宽容性,这可能会导致在使用严格的文件服务器 EOL 程序时纪律性降低,这要求在关闭文件服务器之前移除所有挂载。我们认为,卡住的 NFS 挂载解决方案不能取代辛勤工作和遵守程序,而应仅在紧急情况下使用。
卡住的 NFS 挂载解决方案是一项宝贵的资产,并且在大型和动态环境中是必需品。它使我们能够保持重要机器的高正常运行时间,而不会因错误或文件服务器流量中断而导致不必要的重启。
我们的解决方案简单有效,并且在现实生活中的几种情况下证明了其价值。该实现对用户是透明的,并允许没有网络运营或 NFS 权限或广泛知识的系统管理员快速轻松地恢复系统。我们建议在依赖 NFS 基础设施的计算环境中将其用作标准。