NFS 网络文件系统

1.2 NFS系统原理介绍

1.2.1 NFS系统挂载结构图解与介绍

下图是企业工作中的NFS服务器与客户端挂载情况结构图

屏幕快照 2017-03-08 下午4.54.39.png-543kB

  • 可以看到NFS服务器端/video共享目录挂载到了两台NFS客户端上。在客户端查看时,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NFS客户端操作挂载/v/video或者/video的目录,就可以将数据轻松地存取到NFS服务器端上的/video目录中了。

客户端挂载NFS后,本地挂载基本信息显示如下:

[root@nfs01 ~]# df -h
Filesystem      Size    Used    Use%    Mounted on
/dev/sda1       1.1T    467G    544G    47% /
tmpfs           7.9G    0       7.9G    0%  /dev/shm
10.0.0.7:/video 1002G   59G     892G    7%  /video   #<==10.0.0.7为nfsserver的ip地址

提示:  mount 源 目标
        mount 10.0.0.7:/video   /video
  • 从挂载信息来看,和本地磁盘分区几乎没什么差别,只是文件系统对应列的开头是以IP滴噢址开头的形式了。

  • 经过前面的介绍,我们知道NFS系统是通过网络来进行数据传输的(所以叫做网络文件系统)因此,NFS会使用一些端口来传输数据,那么,NFS到底使用哪些端口来进行数据传输呢?

  • NFS在传输数据时使用的端口会随机选择。可能有同学会纳闷,既然这样,NFS客户端是怎么知道NFS服务端使用的哪个端口呢?
  • 答案就是通过RPC(中文意思远程过程调用,英文Remote Procedure Call简称RPC)协议/服务来实现,这个RPC服务的应用在门户级的网站有很多,例如:百度等。

1.2.2 什么是RPC(Remote Procedure Call)

  • 因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输之用,其中CentOS5.x的随机端口都小于1024,而CentOS6.x的随机端口都是较大的。
  • 因为端口不固定,这样一来就会造成NFS客户端与NFS服务端的通信障碍,因为NFS客户端必须要知道NFS服务端的数据传输端口才能进行通信,才能交互数据。
  • 要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙了,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。这个RPC服务类似NFS服务端和NFS客户端之间的一个中介。

屏幕快照 2017-03-08 下午5.44.53.png-681.7kB

  • 就拿房屋中介打个比喻吧:假设我们要找房子,这里的我们就相当于NFS客户端,中介介绍房子,中介就相当于RPC服务,房子所有者房东就相当于NFS服务,租房的人找房子,就要找中介,中介要预先存有房子主人房东的信息,才能将房源信息告诉租房的人。
  • 那么RPC服务又是如何知道每个NFS的端口呢?
  • 这是因为,当NFS服务端启动服务时会随机取用若干端口,并主动向RPC服务注册取用的相关端口及功能信息,如此一来,RPC服务就知道NFS每个端口对应的NFS功能了,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端,这样一来,NFS客户端就可以与NFS服务端进行数据传输了。
  • 在启动NFS SERVER之前,首先要启动RPC服务(CentOS5.x下为portmap服务,CentOS6.x下为rpcbind服务,下同),否则NFS SERVER就无法向RPC服务注册了。另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。要特别注意的是,一般修改NFS配置文件后,是不需要重启NFS的,直接在命令行执行/etc/init.d/nfs reload或exportfs -rv即可使修改的/etc/exports生效。

1.2.3 NFS的工作流程原理

屏幕快照 2017-03-08 下午5.57.43.png-448.3kB

屏幕快照 2017-03-08 下午6.00.27.png-807.6kB

当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程大致如下:

1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。

2)NFS服务端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)

3)此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据

4)NFS客户端把数据存取成功后,返回给前端访问程序,告知给用户存取结果,作为网站用户,就完成了一次存取操作。

因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务(rpcbind服务)才能获取到NFS服务的各项功能对应的端口号(port number),PID,NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务(rpcbind服务)询问才能找到正确的端口。也就是说,NFS需要有RPC服务(rpcbind服务)的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务(rpcbind服务),NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。

NFS服务器搭建

yum install -y nfs-utils rpcbind


rpm -ql nfs-utils
/etc/rc.d/init.d/nfs <-- nfs服务启动脚本文件
/usr/sbin/showmount <-- 检查nfs服务共享目录信息

rpm -ql rpcbind
/etc/rc.d/init.d/rpcbind <-- rpcbind服务启动脚本文件
/usr/sbin/rpcbind <-- 检查nfs服务向rpc服务注册信息

[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync)
说明:配置文件信息 指定共享目录 指定共享目录访问控制网段或主机信息(共享目录参数信息)

mkdir /data
chown -R nfsnobody.nfsnobody /data

启动nfs和rpc服务
/etc/init.d/rpcbind start <- 首先启动rpcbind服务
/etc/init.d/nfs start <- 其次启动nfs服务

进行服务配置检查
先检查房源信息是否注册
rpcbind -p 172.16.1.31
检查是否存在可用的共享目录
[root@nfs01 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 172.16.1.0/24

NFS客户端部署流程:
第二个里程:进行软件服务安装
yum install -y nfs-utils rpcbind

第三个里程:进行共享目录挂载
[root@web02 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web02 ~]# df -h

NFS配置权限设置常用参数说明

rwRead-write,表示可读写权限
ro Read-only,表示只读权限
sync (同步,实时)请求或吸入数据时,数据同步写入到NFS Server的硬盘后才返回
async (异步)写入时数据会先写到内存缓冲区,只到硬盘有空档才会写入磁盘,这样可以提升写入速率!风险为若服务器挂掉或不正常关机,会损失缓冲区中未写入磁盘的数据
no_root_squash 访问NFS Server共享目录的用户如果是root,它对该共享目录具有root权限。
root_squash 如果访问目录的是root,则它的权限将被压缩成匿名用户。
all_squash 不管访问共享目录的用户身份如何,它的权限都被压缩成匿名用户。
anonuid 指定共享文件夹里文件所有者的uid号:例如:(rw,squash,anonuid=12306,anongid=12306)
anongid 指定共享文件夹里文件所有者的gid号:例如:(rw,squash,anonuid=12306,anongid=12306)

原文地址:https://www.cnblogs.com/zpzp7878/p/10466810.html