网络文件系统( NFS )锁定恢复和网络状态监视器的详细信息是什么?
适用场景
Data ONTAP 7 及更早版本
问题解答
网络状态监控器(NSM)问题会阻止NFS服务在重新启动或集群故障转移后启动。
Error message: [sm_recover]: no address for host [nfs_client1]
Error message: [sm_recover]: get RPC port for [host=unix1,prog=100024,ver=1,prot=17] failed
NFS锁定恢复和网络状态监控器
NFS版本2和3依赖于网络锁定管理器(Network Lock Manager、NLM)协议进行文件锁定。另一个RPC协议称为网络状态监视器(Network Status Monitor、NSM)、用于通知客户端由于服务器重新启动而丢失锁定状态。当NFS服务器向客户端授予锁定时、它必须保留拥有该锁定的客户端的记录。此信息保留在磁盘上。单个锁定状态本身是非持久的。如果服务器重新启动、锁定将丢失。需要通知客户端、以便它可以在NFS服务器再次可用时重新建立锁定。 存储系统NSM将其信息作为 /etc/sm
以下文件进行维护:
state
monitor
当前受监控主机的NSM列表的状态notify
重新启动后通知的主机的列表
重新启动或接管集群后、文件管理器会读取 /etc/sm/monitor
文件、以确定哪些客户端在重新启动或接管集群之前持有NLM文件锁定。然后、将要通知的客户端复制到 /etc/sm/notify
文件中、从而用于通知客户端。存储系统通过NSM通知客户端、它已重新启动并丢失所有锁定。运行NSM守护进程rpc.statd/statd
()的客户端将收到问题描述锁定回收请求,以重建在 存储系统 重新启动期间丢失的锁定状态。 存储系统 重新启动时、NLM有45秒的宽限期、在此期间、 存储系统 不会处理任何新的锁定请求、而只会处理回收请求。在此宽限期内、所有持有锁定的NFS客户端都有机会回收其锁定。
客户端或网络问题可能会阻止 存储系统 NSM通知所有受监控的客户端。重新启动后、无法访问的每个客户端都将延迟NFS文件服务的启动。 在NFS服务完全启动之前、存储系统将尝试联系通知列表中的所有客户端。每个客户端的最大超时值为10秒。
以下问题可能会阻止 存储系统 通知客户端:
- 客户端已关闭或在网络上不再可用。
- 客户端未运行NSM守护进程;Linux上为rpc.statd、Solaris上为statd。
- 出现网络连接或网络设备中断。
- 存储系统 无法解析客户端主机名、因为它无法联系DNS或NIS服务。
错误消息
Error message: [sm_recover]: no address for host [nfs_client1]
Error message: [sm_recover]: get RPC port for [host=unix1,prog=100024,ver=1,prot=17] failed
正在检查 /etc/sm/monitor
文件中是否存在不可用的主机
read_monitor.pl
以下Perl脚本可用于在监控器文件中列出客户端。#!/usr/bin/perl
binmode (STDIN);$file=join "",<stdin>;
while ($file =~ /(..)(..)(.*?)\000/gs) {
$status=unpack("S", $1);
$namelen=unpack("S", $2);
print "$3\n" if $status==1;
}- 要使用该脚本、请将监视器文件从STDIN发送到此脚本:
cat etc/sm/monitor | ./read_monitor.pl
它将显示
in_use
设置为1的所有客户端的列表。 - 检查客户端列表是否存在以下情况:
- ping the host from the filer
- the client portmapper is functioning(rpcinfo -p hostname)
- the client rpc.statd/statd is running (rpcinfo -p hostname)如果客户端未通过上述检查、则应更正此问题。如果客户端永久不可用、则可以使用
sm_mon
命令将其从监控器文件中删除。 -
sm_mon
可以使用storage system advanc高级 模式命令从监控列表中删除主机:
Enter priv set advanced
Enter sm_mon -u [client_name]
Enter priv set admin
vFiler
vfiler的配置可能会影响网络状态监控器客户端通知过程。每个vfiler都会在vfiler /etc/sm
目录下维护自己的一组信息文件。重新启动 存储系统后、NFS服务将在每个vfiler上重新启动。每个vfiler都必须在其 /etc/sm/notify
文件中通知NFS客户端、以便可以回收这些锁定。如果在vfiler之间共享无响应的客户端、则每个vfiler都会发生10秒超时。每个vfiler都必须通过NSM通知锁定多个vfiler的客户端。这可能会影响在所有NFS文件服务完全运行之前的整体启动时间。
存储系统 集群
在 存储系统 集群配置中、配对节点接管或返回操作与重新启动集群配对节点相同。 必须通过网络状态监控器(Network Status Monitor、NSM)通知在受影响存储系统上保持锁定的NFS客户端、如上一节所述。
由于在集群故障转移/接管过程中启动每个服务的时间上限为5分钟、因此、联系NLM客户端的延迟可能会使故障文件管理器的启动进一步复杂化、并可能影响集群的整体可用性
注意: 运行 sm_mon
命令时、可以验证是否确实释放了锁定、这一点很有用。检查 lock
命令、该命令显示所有协议(如NLM、通用Internet文件系统协议(Common Internet File System Protocol、CIFS)、NFSv4、FIO)所保持的锁定。根据Data ONTAP版本,有一个名为 lock status的命令。在旧版本的Data ONTAP中 lock
,以的形式提供 lock_dump
。
追加信息
不适用