NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

NFS 功能:可以通过网络,让不同的机器、不同的操作系统课可以共享彼此的文件

NFS服务器可以使PC将服务器共享的文件挂载在本地,且PC相当于远程控制、使用这个挂载的文件。

挂载点和设备的对应情况:

1、同一个挂载点可以连接多个设备

2、不同的设备可以挂载多个挂载点       生效为最近挂载的

 

NFS体系组成至少有两个主要部分:

一台NFS服务器和若干台客户机,如右图所示。

客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据。

在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。

 

RPC服务:远程过程调用    

功能:在指定每个NFS功能所对应的端口号,并且将结果回报给客户端,让客户端可以连接到正确的端口。

NFS工作原理

RPC与NFS如何通讯

        因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。

那么RPC又是如何知道每个NFS功能的端口呢?

       首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。

NFS客户端和NFS服务端通讯过程

harbor nfs挂载 nfs挂载配置_客户端

NFS客户端和服务端的通讯过程:

服务端启动RPC服务,并开启111端口

服务端启动NFS服务,并向RPC注册端口信息

客户端启动RPC服务,向服务端请求NFS端口信息

服务端的RPC将NFS端口信息反馈给客户端

客户端获得服务端的NFS端口信息,并与服务端建立数据连接

注:当客户端和服务端建立连接后,服务端的RPC将不再进行活动,RPC相当于介绍人,相识之后不再起作用。

 

NFS的优缺点:

优点:

1、节省本地存储空间

2、简单、易上手、使用率高

3、方便部署、维护简单

缺点:

1、容易发生单点故障、以及当server宕机时,所有客户端都不能访问。

2、NFS效率、性能有限

3、安全性低,对数据完整性不做验证

4、多台机器挂载NFS服务器时,连接维护麻烦。

 

预配:

关闭防火墙和SELinux

harbor nfs挂载 nfs挂载配置_客户端_02

服务端:

安装nfs:

harbor nfs挂载 nfs挂载配置_RPC_03


创建需要分享的文件

harbor nfs挂载 nfs挂载配置_harbor nfs挂载_04

harbor nfs挂载 nfs挂载配置_RPC_05

配置文件

harbor nfs挂载 nfs挂载配置_服务端_06

格式:输出目录    客户端    选项

输出目录:需要共享的文件目录路径

客户端:指定ip、指定域名、指定域中所有主机、指定子网内所有主机

选项:共享的权限,紧跟客户端列

选项1:访问权限选项:

ro        只读

rw        读写

选项2:用户映射选项:

all_squash                将所有普通用户和组映射为匿名用户和组,即都为nfsnobody

no_all_squash                      对普通用户不映射(默认设置)

root_squash                将root用户和组映射为匿名用户和组(默认设置)

no_root_squash        对root用户和组不映射,即显示为root

anonuid=xxx                将root用户映射为服务器上的指定UID

anongid=xxx                将root用户组映射为服务器上的指定GID

其他选项:

secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);

insecure:允许客户端从大于1024的tcp/ip端口连接服务器;

sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);

no_wdelay:若有写操作则立即执行,应与sync配合使用;

subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);

no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

关闭防火墙和SELinux:

harbor nfs挂载 nfs挂载配置_客户端_07

重新挂载:

harbor nfs挂载 nfs挂载配置_服务端_08

               

重启nfs服务:

harbor nfs挂载 nfs挂载配置_客户端_09

 

客户端:

查看共享的nfs:

harbor nfs挂载 nfs挂载配置_RPC_10

挂载:

harbor nfs挂载 nfs挂载配置_NFS_11

客户端检查:

harbor nfs挂载 nfs挂载配置_harbor nfs挂载_12

无权限时添加文件,不能添加成功

harbor nfs挂载 nfs挂载配置_NFS_13

服务端修改权限:

harbor nfs挂载 nfs挂载配置_客户端_14

服务端修改文件权限:

harbor nfs挂载 nfs挂载配置_服务端_15

客户端创建文件:

harbor nfs挂载 nfs挂载配置_客户端_16