加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux_ftp访问nfs挂载目录问题

(2014-06-12 16:58:50)
标签:

linux

ftp

nfs

it

  
  问题:   ftp客户端下载目录数据很慢,而此目录是挂载了NFS共享目录


 
  现象:   使用ftp客户端访问nfs目录,下载上传速度 0.7kb/s, 而且对于零散的小文件(总共几百K),
       每次传输新文件,     都会有30-40s的等待时间,400k文件要5分钟。



  ftp配置如下:


[root@IDC-D-144 vsftpd]# cat vsftpd.conf|grep -v '#'
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ls_recurse_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
listen=YES
tcp_wrappers=YES

chroot_list_enable=YES                                       >>>>> 启用改变用户登录默认目录
chroot_list_file=/etc/vsftpd/chroot_list              >>>>> 允许登录更改目录的用户列表
user_config_dir=/etc/vsftpd/vsftpd_user_conf  >>>>>> 目录下记录着每个用户的默认登录地址


[root@IDC-D-144 vsftpd]# cat chroot_list 
suns
hanzhijun
[root@IDC-D-144 vsftpd]# 

[root@IDC-D-144 vsftpd]# cd vsftpd_user_conf/
[root@IDC-D-144 vsftpd_user_conf]# ls
hanzhijun  suns
[root@IDC-D-144 vsftpd_user_conf]# cat hanzhijun 
local_root=/usr/local/apache2059/htdocs/hipiao/
[root@IDC-D-144 vsftpd_user_conf]# 



这样用户hanzhijun登录就会直接进入目录 /usr/local/apache2059/htdocs/hipiao/



vsftpd 的部分就是这样。


下载上传速度慢也是想了很多办法,是不是内外网问题? 是不是路由设置问题?  。。。

最后查到可能与NFS有关。 出现几个服务名:nfslock 、 portmap 、rpc

讲一下NFS的端口连接知识:


因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,没启动一个功能就会启用一些
端口来传输资料,因此,NFS的功能所随影的端口没有固定住,而是随机取用一些未被使用的小于1024的
端口来作为传输之用。但如此一来又造成用户端想要连上服务器时的困扰,因为用户端得要知道服务器端的
相应端口才能够连接吧。

 此时我们就得需要远端程序呼叫(RPC)的服务啦! RPC最主要的功能就是制定每隔NFS功能所对应的port number,并且回报给用户端,让用户端可以连接到正确的端口上去。那RPC又是如何知道每个NFS的端口呢?
这是因为当服务器在启动NFS时会随机取用几个端口,并主动的向RPC注册,因此RPC可以知道每隔端口对应的
NFS功能,然后RPC又是固定使用port 111来监听用户端得需求并回报用户端正确的端口。所以RPC要不NFS先启动。


几个RPC的DAEMON。

  rpc.nfsd
      管理客户端目录挂载。

  rpc.mountd
             权限认证。
  rpc.lockd 
     锁定文件确保文件的一致性,服务器端和客户端都要启用。 并且带着rpc.statd使用。

  rpc.statd

      可以用来检测文件的一致性。服务器端和客户端都要启用




  
启用nfslock会启动rpc.lockd和rpc.statd
/etc/init.d/nfslock

start() {
    if [ ! -f /var/lock/subsys/nfslock ]; then
  #      echo "nfslock normal file.."
        # Start daemons.
        if [ "$USERLAND_LOCKD" ]; then
          echo -n $"Starting NFS locking: "
          daemon rpc.lockd
          echo
        else 
        # See if the kernel lockd should start up 
        # listening on a particular port
        #
                LOCKDARG=""
                [ -n "$LOCKD_TCPPORT" ] && LOCKDARG="nlm_tcpport=$LOCKD_TCPPORT"
                [ -n "$LOCKD_UDPPORT" ] && \
                        LOCKDARG="$LOCKDARG nlm_udpport=$LOCKD_UDPPORT"
                [ -n "$LOCKDARG" ]  && \
                        modprobe lockd $LOCKDARG
        fi  
        echo -n $"Starting NFS statd: "
        # See if a statd's ports has been defined
        [ -n "$STATD_PORT" ] && STATDARG="$STATDARG -p $STATD_PORT"
        [ -n "$STATD_OUTGOING_PORT" ] \
                && STATDARG="$STATDARG -o $STATD_OUTGOING_PORT"
        daemon rpc.statd "$STATDARG"
         echo "rpc.statd start...."
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nfslock
    fi
    return $RETVAL
}



问题解决原理:
     开始,当ftp客户端连接列出目录,会尝试连接各种端口,来获取准确端口连接。
      扫描文件并下载的时候,会获取文件的一致性,需要遍历字典,来得知文件是否一致。
      开启下面服务,就可以直接得知文件信息,故速度会提升。
    恢复正常下载速度。400K。 瞬间。完成。
     





问题通过启动客户端nfslock和portmap解决。






0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有