NFS删除远程目录后的故障处理

一、删除 NFS 远程文件夹

不小心删除了spark的目录,但是hadoop集群是使用 NFS 来同步spark的整个目录。

showmount 命令用于查询NFS服务器的相关信息,在所有slave上执行 showmount -e,提示:

mount clntudp_create: RPC: Program not registered

rpc.mountd 命令全名叫 NFS mount daemon,执行后部分机器恢复正常,但仍有部分slave提示:

clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)

根据以上的错误提示,可以大概知道是RPC的问题。


二、NFS 与 RPC 的关系

NFS(Network FileSystem)服务启动时会绑定一个随机的端口(至于为何要绑定随机端口而不是指定固定端口可能是为了防止冲突),

并会通知到RPC服务(RPC服务的进程由一个叫rpcbind的程序来完成,它会绑定一个固定的端口如111),NFS借助这个随机端口来实现与客户端的文件传输与状态共享,

因此客户端一开始需要向RPC服务端询问NFS具体绑定的端口信息。整个NFS集群包含NFS和RPC两部分,并且NFS的工作依赖于RPC。

以上图片来源于:鸟哥的 Linux 私房菜 -- NFS 伺服器

说完原理,再来解释报错的含义:

  • 第一个报错说明位于slave上的RPC进程,也就是RPC客户端未启动导致slave无法查找NFS服务。
  • 第二关报错指RPC客户端访问RPC服务端时出错,可能是master上的RPC服务未正常运行导致。


三、开始常规修复

先卸载目录挂载:umount /spark,出错:umount.nfs: /spark: device is busy

查找使用该目录的进程:fuser -m -v /spark/,仍旧报错:Cannot stat : Stale file handle

于是强制卸载:umount -l /spark,执行成功但是showmount 继续报错。

于是只好重启NFS了:service rpcbind restartservice nfs restart

这里必须先重启RPC然后再启动NFS,否则会报错:

Starting NFS mountd: [FAILED]

Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)

rpc.nfsd: unable to set any sockets for nfsd

原因前面已经讲过,恢复整个集群的脚本如下:

ssh='ssh -p2222'
all_slave={1..10}
eval eval \"$ssh slave\"$all_slave\" \'rpc.mountd\'\;\"
eval eval \"$ssh slave\"$all_slave\" \'umount -l /spark\'\;\"
eval eval \"$ssh slave\"$all_slave\" \'service rpcbind restart \&\& service nfs restart\'\;\"
eval eval \"$ssh slave\"$all_slave\" \'mount -t nfs master:/spark/ /spark/\'\;\"

集群已经配置好host和SSH免密登录,最后执行mount即可查看到已经加载的NFS文件系统:

master:/root/.ssh/ on /root/.ssh type nfs (rw,vers=4,addr=master,clientaddr=slave1)
master:/usr/local/java/ on /usr/local/java type nfs (rw,vers=4,addr=master,clientaddr=slave1)
master:/tmp/logs/ on /tmp/logs/ type nfs (rw,vers=4,addr=master,clientaddr=slave1)
nfsd on /proc/fs/nfsd type nfsd (rw)
master:/spark/ on /spark type nfs (rw,vers=4,addr=master,clientaddr=slave1)


参考: 使用 NFS 时当远程文件夹被删除后的问题处理:Stale NFS file handle

转载于:https://my.oschina.net/cwalet/blog/386601

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值