「vsftpd」- 当使用NFS挂载时,上传/下载特别慢

  FROM JENKINS AUTOMATION

更新日期:2019年09月18日

内容简介

解决问题:当使用NFS挂载点作为FTP目录时,上传/下载特别慢。

问题描述

在系统中,运行vsftpd服务,并使用NFS挂载点作为vsftpd文件上传目录。

出现的问题是上传/下载超时。并且,在上传时,文件可以创建成功,但是大小为零。

系统环境

操作系统: CentOS release 6.9 (Final)
vsftpd: version 2.2.2 (vsftpd -v)
NFS: vers=3 (nfsstat -m)

问题原因

# 问题诊断

在执行动作(比如上传)时:

(1)首先VSFTPD请求NFS客户端,要求上传之前锁定文件。
(2)然后NFS客户端发出lock调用。
(3)但是服务端NFS v3并不支持文件锁定,而产生失败。
(4)客户端进行重试,最后超时。

可以观察NFS的日志(/var/log/messages)发现这一点。

# 附加说明

由于NFS v2、NFS v3协议不支持文件锁定,所与文件锁有关的调用可能都会失败。但是NFS v2、NFS v3支持NLM(Network Lock Manager)协议,它为通过NFS共享的文件提供「Unix记录锁定」,使客户端能够与其他客户端同步它们的I/O请求,以确保数据的完整性。(这里有一些技术细节我并没有弄清楚,可能正常启动rpc.lockd与rpc.statd就可以正常使用文件锁了,所以我遇到的问题可能是服务没有正常运行。)

但是NFS v4支持文件锁,但是不支持NLM协议。

解决办法

最好的做法当然是使用NFS v4协议挂载。总要有个“但是”:情况复杂,很多服务器都是NFS v3挂载,双协议混合使用又未经过测试,弄不好NFS服务还要升级。

为了解决问题,在挂载时使用nolockmount -onolock)选项进行重新挂载。

相关链接

Linux NFS Overview, FAQ and HOWTO Documents
flock(2) versus fcntl(2) over a NFS
On the Brokenness of File Locking

参考文献



Backlinks:
00.INDEX


文章摘要:Networks_and_Protocols:Layer_7_-_Application_Layer:FTP_-_FILE_TRACSFER_PROTOCOL:vsftpd:z.Error_List:vsftpd_is_slow_on_mapr_nfs_mount_point

原文链接:「vsftpd」- 当使用NFS挂载时,上传/下载特别慢