首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux网络文件系统NFS(2)

Linux网络文件系统NFS(2)

与NFS有关的一些命令介绍
    nfsstat:查看NFS的运行状态,对于调整NFS的运行有很大帮助,在主机和客户端都可以使用。
    Rpcinfo:查看rpc执行信息,可以用于检测rpc运行情况的工具。

    NFS调优
    调优的步骤包括:
    1、测量当前网络、服务器和每个客户端的执行效率。
    2、分析收集来的数据并画出图表。查找出特殊情况,例如很高的磁盘和CPU占用、已经高的磁盘使用时间
    3、调整服务器
    4、重复第一到第三步直到达到你渴望的性能
    与NFS性能有关的问题有很多,通常可以要考虑的有以下这些选择:
    1、WSIZE,RSIZE参数来优化NFS的执行效能。
    WSIZE、RSIZE对于NFS的效能有很大的影响。wsize和rsize设定了SERVER和CLIENT之间往来数据块的大小,这两个参数的合理设定与很多方面有关,不仅是软件方面也有硬件方面的因素会影响这两个参数的设定(例如LINUX KERNEL、网卡,交换机等等)。
    下面这个命令可以测试NFS的执行效能,读和写的效能可以分别测试,分别找到合适的参数。对于要测试分散的大量的数据的读写可以通过编写脚本来进行测试。在每次测试的时候最好能重复的执行一次MOUNT和unmount。
    time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384
    用于测试的WSIZE,RSIZE最好是1024的倍数,对于NFS V2来说8192是RSIZE和WSIZE的最大数值,如果使用的是NFS V3则可以尝试的最大数值是32768。如果设置的值比较大的时候,应该最好在CLIENT上进入mount上的目录中,进行一些常规操作(LS,VI等等),看看有没有错误信息出现。有可能出现的典型问题有ls的时候文件不能完整的列出或者是出现错误信息,不同的操作系统有不同的最佳数值,所以对于不同的操作系统都要进行测试。
    2、设定最佳的NFSD的COPY数目。
    linux中的NFSD的COPY数目是在/etc/rc.d/init.d/nfs这个启动文件中设置的,默认是8个NFSD,对于这个参数的设置一般是要根据可能的CLIENT数目来进行设定的,和WSIZE、RSIZE一样也是要通过测试来找到最近的数值。
    3、UDP and TCP
    可以手动进行设置,也可以自动进行选择
    mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR
    UDP 有着传输速度快,非连接传输的便捷特性,但是UDP在传输上没有TCP来的稳定,当网络不稳定或者黑客入侵的时候很容易使NFS的 Performance 大幅降低甚至使网络瘫痪,所以对于不同情况的网络要有针对的选择传输协议。
    nfs over tcp比较稳定, nfs over udp速度较快。在机器较少网络状况较好的情况下使用UDP协议能带来较好的性能,当机器较多,网络情况复杂时推荐使用TCP协议(V2只支持UDP协议)。在局域网中使用UDP协议较好,因为局域网有比较稳定的网络保证,使用UDP可以带来更好的性能,在广域网中推荐使用TCP协议,TCP协议能让NFS在复杂的网络环境中保持最好的传输稳定性。
    4、版本的选择
    V3作为默认的选择(RED HAT 8默认使用V2,SOLARIS 8以上默认使用V3),可以通过vers= mount option来进行选择。LINUX通过mount option的nfsvers=n进行选择。

    NFS安全性
    NFS的不安全性主要体现于以下4个方面:
    1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现
    2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制
    3、较早的NFS可以使未授权用户获得有效的文件句柄
    4、在RPC远程调用中,一个SUID的程序就具有超级用户权限
    加强NFS安全的方法:
    1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用no_root_squash。
    2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围

iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT

iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT

iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT

iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT

    3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目
    4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
    /etc/hosts.allow
    portmap: 192.168.0.0/255.255.255.0 : allow
    portmap: 140.116.44.125 : allow
    /etc/hosts.deny
    portmap: ALL : deny
    5、改变默认的NFS 端口
    NFS默认使用的是111端口,但同时你也可以使用port参数来改变这个端口,这样就可以在一定程度上增强安全性。使用Kerberos V5作为登陆验证系统

    NFS故障解决
    1、NFSD没有启动起来
    首先要确认NFS输出列表存在,否则nfsd不会启动。可用exportfs命令来检查,如果exportfs命令没有结果返回或返回不正确,则需要检查/etc/exports文件。
    2、mountd 进程没有启动
    mountd进程是一个远程过程调用(RPC),其作用是对客户端要求安装(mount)文件系统的申请作出响应。
    mountd进程通过查找/etc/fstab文件来获知哪些文件系统可以被远程客户端使用;另外,通过mountd进程,用户可以知道目前有哪些文件系统已被远程文件系统装配,并得知远程客户端的列表。
    查看mountd是否正常启动起来可以使用命令rpcinfo进行查看,在正常情况下在输出的列表中应该象这样的行:
    100005 1 udp 1039 mountd
    100005 1 tcp 1113 mountd
    100005 2 udp 1039 mountd
    100005 2 tcp 1113 mountd
    100005 3 udp 1039 mountd
    100005 3 tcp 1113 mountd
    如果没有起来的话可以检查是否安装了PORTMAP组件:rpm -qa|grep portmap
    3、fs type nfs no supported by kernel:kernel不支持nfs文件系统,重新编译一下KERNEL就可以解决。
    4、can't contact portmapper: RPC: Remote system error - Connection refused:出现这个错误信息是由于SEVER端的PORTMAP没有启动。
    5、mount clntudp_create: RPC: Program not registered:NFS没有启动起来,可以用showmout -e host命令来检查NFS SERVER是否正常启动起来。
    6、mount: localhost:/home/test failed, reason given by server: Permission denied:这个提示是当client要mount nfs server时可能出现的提示,意思是说本机没有权限去mount nfs server上的目录。解决方法当然是去修改NFS SERVER咯。
    7、限的设定不符合
    8、被防火墙搞掉
    这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口,所以我们先要检测是否打开了这个端口,另外也要检查TCP_Wrappers的设定。
    重新设置防火墙,包括iptables与TCP_Wrappers,因为激活了portmap,所以端口111必须提供出去.因此在iptables rules中,要增加:
    iptables -A INPUT -p TCP --dport 111 -j ACCEPT
    iptables -A INPUT -p UDP --dport 111 -j ACCEPT
    如果还不行,那就是TCP_Wrappers的问题,检查/etc/hosts.deny,如果有一行是:
    ALL: ALL: deny
    那就必须在/etc/hosts.allow中增加:
    portmap: ALL: allow
9、另外,需要注意的下面这个问题:
    由于NFS使用的这个RPC在client端连上主机时,那么你的主机想要关机,那可就会成为『不可能的任务』。即如果你的Server上面还有Client在联机,那么你要关机,可能得要等到数个钟头才能够正常的关机成功!所以,建议在NFS Server要关机之前,要先『关掉portmap与nfs』这两个东西。如果无法正确的将这两个daemons关掉,那么先以netstat -utlp找出PID,然后kill掉。
继承事业,薪火相传
返回列表