1. NFS服务介绍

1.1什么是NFS服务

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样,也就是说客户端PC可以挂载NFS服务器所提供的目录并且挂载之后这个目录看起来如同本地的磁盘分区一样,可以使用cp、cd、mv、rm及df等与磁盘相关的命令。

1.2 NFS服务的优缺点

 1.2.1优点

a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问

b.简单容易上手

c.方便部署非常快速,维护十分简单

 1.2.2缺点

a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问

b.在高并发下NFS效率/性能有限

c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)

d.NFS的数据是明文的,对数据完整性不做验证

e.多台机器挂载NFS服务器时,连接管理维护麻烦

 

2. NFS服务工作原理

          下面给大家看一幅图

       

2.1 NFS原理简单介绍

NFS Server服务器上设定/data目录被分享,而客户端可以通过internet将/data目录挂载到本地的挂载点(常用mnt)后,客户端就可以进入挂载点目录进行文件的读写。NFS客户端所开放的端口是随机的我们不知道,那该怎么办呢?那是不是就不能进行数据传输了呢?答案当然是NO了那就需要另外一种服务帮他分配port了,服务是什么呢?那就是RPC服务了!想知道什么是RPC服务那就往下看啦~~~

2.2 RPC简单介绍

2.2.1什么是rpc服务

                RPC(Remote Procedure Call)即远程过程调用。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去。

 2.2.2 RPC服务原理

a.执行顺序:1(注册端口)--à2(达成协议)-à3(直接建立联系)--à4(达成协议)--à5(建立连接)

b.那为啥rpc能够找到对应的port呢?这是因为当服务器在启动NFS时会随机取用数个port,并且主动的向RPC注册,因此RPC可以知道每个NFS的port对应的NFS功能,然后RPC又是固定使用port111来监听客户端的需求并汇报客户端的正确的port。

 2.2.3 portmap

功能:主要是把RPC程序号转化为Internet的端口号。

特点:只在第一次建立连接时候帮助网络应用程序找到正确的port,当当双方正确连接时,端 口就和应用绑定,portmap就无用。相当于媒婆。

2.3NFS Server配置安装

2.3.1 yum安装nfs服务rpc服务

1
[root@nfsserver~]# yum -y install nfs*   #nfs*有nfs-utils、nfs-utils-lib、nfs-utils-lib-devel和nfs4-acl-tools

2.3.2 检查rpc服务和nfs服务是否安装并且安装成功

1
2
3
4
5
6
[root@nfsserver~]# rpm -qa rpc* nfs* 
nfs-utils-lib-1.1.5-11.el6.x86_64 
nfs-utils-lib-devel-1.1.5-11.el6.x86_64 
rpcbind-0.2.0-11.el6.x86_64
nfs-utils-1.2.3-64.el6.x86_64
nfs4-acl-tools-0.3.3-7.el6.x86_64

2.3.3 启动rpc服务和NFS服务(先启rpc服务,后启NFS服务)

1
2
3
4
5
6
7
[root@nfsserver/]# /etc/init.d/rpcbind start
Startingrpcbind:                             [ OK ]
[root@nfsserver/]# /etc/init.d/nfs start
Starting NFSservices:                                    [  OK  ]
Starting NFSmountd:                                      [  OK  ] 
Starting NFSdaemon:                                       [ OK  ]
Starting RPCidmapd:                                      [  OK  ]

2.3.4 设置开机自启

1
2
3
4
5
6
[root@nfsserver/]# chkconfig nfs on 
[root@nfsserver/]# chkconfig rpcbind on  
[root@nfsserver/]# chkconfig --list |grep -E "nfs|rpcbind" 
nfs         0:off  1:off   2:on    3:on   4:on   5:on    6:off         
nfslock     0:off  1:off   2:off   3:on   4:on    5:on   6:off         
rpcbind     0:off  1:off   2:on    3:on   4:on    5:on   6:off

2.3.5配置共享目录/data(nfs配置文件时/etc/exports 默认是空的)

1
2
3
[root@nfsserver~]# vim /etc/exports                                             
#share /datafor nfsclient  
 /data192.168.137.2/10(rw,sync, no_all_squash)

2.3.6 建立共享目录

1
[root@nfsserver ~]# mkdir /data

2.3.7 平滑加载NFS服务并检查服务(shoumount -e localhost)

1
2
3
4
[root@nfsserver~]# /etc/init.d/nfs reload
[root@nfsserver~]# showmount -e localhost                              
Export list forlocalhost:               
/data192.168.137.2/10

     2.4 NFS Client 配置

2.4.1安装rpc服务

1
[root@nfsclient01 ~]# yum -y installrpcbind

2.4.2 启动rpc服务并检查

1
2
3
4
5
[root@nfsclient01~]# /etc/init.d/rpcbind start
Startingrpcbind:                                         [  OK  ]
[root@nfsclient01~]# ps -ef| grep "rpc"  
rpc        1208      1 0 13:38 ?        00:00:00 rpcbind 
root       1212  1135  0 13:39 pts/0    00:00:00 grep rpc

2.4.3 设置开启自启并检查

1
2
3
[root@nfsclient01~]# chkconfig rpcbind on
[root@nfsclient01~]# chkconfig --list rpcbind
rpcbind         0:off  1:off   2:on    3:on   4:on    5:on    6:off

2.4.4 挂载并测试

挂载/data到/mnt目录下

1
[root@nfsclient01/]# mount -t nfs 192.168.137.7:/data /mnt

大家注意了,如果是新的机子的话在这里可能会出现这样的一个error

1
2
mount: wrong fstype, bad option, bad superblock on 192.168.137.7:/data,missing 
codepage or helper program, orother error(for several filesystems (e.g. nfs, cifs)you might need a /sbin/mount.<type> helperprogram) In some cases useful info is found insyslog - try dmesg | tail  or so

解决方法是安装一个nfs-utils之后再挂载一次就ok

1
2
[root@nfsclient01 /]# yum -y installnfs-utils
root@nfsclient01 /]# mount -t nfs 192.168.137.7:/data/mnt

最后,将挂载命令写进rc.local

3. NFS配置知识介绍

3.1 NFS 配置文件格式

3.1.1 NFS配置文件:/etc/exports(默认为空)

3.1.2/etc/exports格式

            3.1.3 权限参数

权限参数类型      功能
rw 可读写的权限
ro 只读的权限
sync(同步) 资料同步写入到内存与硬盘中(慢,不容易丢数据)
async(异步) 资料会暂存于内存当中,而不是写入硬盘(快,容易丢数据)
no_root_squash 客户端用root用户访问该共享文件夹时, root用户不会映射成匿名用户(极不安全,不建议使用)
root_squash 客户端用root用户访问该共享文件夹是,将root用户映射为匿名用户
all_squash 不论登入NFS的使用者身份是谁,他的身份都会被压缩成匿名用户(nfsnobody)
anonuid=xxx 指定NFS服务器的匿名用户UID
anongid=xxx 指定NFS服务器的匿名用户GID
insecure NFS通过1024以上的端口发送
secure NFS通过1024以下的安全TCP/IP端口发送
hide 在NFS共享目录中共享其子目录
no_hide 在NFS共享目录中共享其子目录
wdelay 如果多个用户写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户写入NFS目录,则立即写入,当使用async时,无需此设置
subtree_check 在共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限

3.2 NFS常用命令

命令 参数 含义
exportfs -a 递增式更新,对/etc/export增加或修改的部分进行挂载和卸载
-i<文件> 指定配置文件
-r 更新配置重新读取/etc/exports
-u 卸载指定的目录
-o 使用指定的参数
-v 显示共享详细情况
showmount -a或--all 以host:dir 这样的格式来显示客户主机名和挂载点目录
-d或--directories 仅显示客户端挂载的目录名
-e或--exports 显示NFS服务器输出清单
-h或--help 显示帮助信息
-v或--version 显示版本信息
--no-headers 禁止输出描述头部信息
rpcinfo语法:rpcinfo –p [host];rpcinfo [-n port] –u |-t host program[version]
rpcinfo

-p(probe,探测) 列出所有在host用portmap注册的RPC程序,如果没有指定的host,就查找本地上的RPC程序
-n(port number,端口号) 根据-t或者-u,使用编号为port的端口,而不是由portmap指定的端口号
-u(UDP) UDP RPC调用host上程序program的version版本,并报告是否接収到响应
-t(TCP) TCP RPC调用host上程序program的version版本(如果指定的话),并报告是否接收到响应
-b(broadcast,广播) 向程序program的version版本进行RPC广播,并列出响应的主机
-d(delete,删除) 将程序program的version版本从本机的RPC注册表中删除。只有root特权用户才可以使用这个选项
mount(nfs) -t 指定设备的文件系统类型
-r 以只读方式加载设备
umount -t 仅卸除选项中所指定的文件系统
-r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统

3.3 NFS出问题解决方法及生产应用场景:

大中小型网站(2000wpv以下)线上应用,当web服务器少的时候,弃用nfS,同步数据到web服务器上(上传数据太快的话,同步延迟较大)

看配置是否有问题à看服务是否开启à挂载没反应à挂载没反应(看ping通?然后看telnet通不通)

NFS详细分析的更多相关文章

  1. Ubuntu搭建NFS服务器,NFS协议详细分析

    目录 1. Ubuntu搭建NFS服务器 2. NFS协议分析 2.1 实验拓扑: 2.2 在kali抓包分析 1. Ubuntu搭建NFS服务器 ​ NFS(Network FileSystem,网 ...

  2. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  3. 1125MySQL Sending data导致查询很慢的问题详细分析

    -- 问题1 tablename使用主键索引反而比idx_ref_id慢的原因EXPLAIN SELECT SQL_NO_CACHE COUNT(id) FROM dbname.tbname FORC ...

  4. LinkedList详细分析

    一.源码解析1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据remove()7.数据获取get()8.数据复制clo ...

  5. android ListView 九大重要属性详细分析、

    android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...

  6. C语言中的static 详细分析

    转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...

  7. Linux内核OOM机制的详细分析(转)

    Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...

  8. Android-Native-Server 启动和注册详细分析

    Android-Native-Server 启动和注册详细分析     以mediaService为实例来讲解: mediaService的启动入口 是一个 传统的  main()函数 源码位置E:\ ...

  9. px,dp,dip,sp,in,mm,pt详细分析

    px,dp,dip,sp,in,mm,pt详细分析 px   :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. dip  :(devi ...

随机推荐

  1. CF985A Chess Placing【思维】

    [链接]:CF985A [题意]:给你n和n/2个数ai,每个ai和奇数.偶数比较距离(注意选了奇数,偶数的距离就不要算了,反之同理),求最小的答案. [代码]: #include <iostr ...

  2. HttpWebRequest 请求 Api 及 异常处理

    HttpWebRequest request = WebRequest.CreateHttp(url); request.Method = "post"; request.Head ...

  3. log4j - 1

    具体内容: 1.       如何在项目中配置log4j使得该系统可以输出web test的日志文件(自定义格式)到工程dist目录下的junitLog/WebTestLog.log目录下,输出508 ...

  4. 1.13抽象类及接口(附简述final关键字)

    一.final final的中文意思就是不可更改的,最终的. 1.final修饰变量,那么该变量无法更改.一旦该变量赋了初值,就不能重新赋值. final MAX = 1100; //final修饰后 ...

  5. Stage3D 中的PerspectiveMatrix3D

    PerspectiveMatrix3D继承自Matrix3D.表示投影矩阵的功能类. 公式:用4X4矩阵向z=d的平面投影 public function perspectiveFieldOfView ...

  6. 数据库系统入门 | Not Exisits 结构的灵活应用

    教材 /<数据库系统概念>第六版第三章内容 机械工程出版社:实验软件/Qracle 11g 写在前面 用下面的样例1引出我们讨论的这一类方法. 样例1:使用大学模式,用SQL写出以下查询, ...

  7. LINUX 下mysql导出数据、表结构

    1.首先要确认mysqldump命令所在路径 例如,我的在:/usr/bin/ 下 [root@sf105113 bin]# which mysqldump /usr/bin/mysqldump 2. ...

  8. XCode下的iOS单元测试

    XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit.通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能.本文将演示如何在 ...

  9. 手把手教你AndroidStudio多渠道打包

    最近不断有朋友向我咨询AndroidStudio多渠道的打包方法,今天整理一下之前积累的打包套路,写一篇文章,手把手的教给大家.        说到多渠道,这里不得不提一下友盟统计,友盟统计是大家日常 ...

  10. Winform 遍历 ListBox中的所有项

    foreach(DataRowView row in listBox.Items ) { MessageBox.Show(row["displayMember"].ToString ...