NFS介绍
NFS是Network File System的缩写。是Linux下实现文件共享的方式之一。该协议采用C/S模型,可提供对共享文件的远程访问,通过RPC(远程过程调用)协议实现运行在一台计算机上的程序来调用另一台远程计算机上运行的子程序。该协议可在TCP或UDP协议上运行。
NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本(2010年)。
NFS原理
转自:https://blog.csdn.net/frankarmstrong/article/details/78774679
NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输。
PS:哦,原来是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。
rpc(portmap。在centos7中,portmap被rpcbind取代,以下改为rpcbind.)就是用来统一管理NFS端口的服务,并且统一对外的端口是111。NFS服务端需要先启动rpc,再启动NFS,这样NFS才能够到RPC去注册端口信息。客户端的RPC可以通过向服务端的RPC请求获取服务端的NFS端口信息。当获取到了NFS端口信息后,就会以实际端口进行数据的传输。(由于NFS端口为随机的。)
《客户端NFS和服务端NFS通讯过程》
1)首先服务器端启动RPC服务,并开启111端口
2)启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(rpcbind服务),向服务端的RPC(rpcbind)服务请求服务端的NFS端口
4)服务端的RPC(rpcbind)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

NFS配置
服务端要下载部署,客户端要挂载。
我们在服务端创建一个共享目录 /share,并配置成所有用户可匿名访问,然后在客户端挂载访问试试。
服务端操作:
1、查看是否安装nfs和rpcbind,

如果没有:

2、因为NFS及其辅助程序都是基于RPC协议(使用RPC的111端口来进行请求的监听)所以首先要确保系统中运行了rpcbind服务。客户端和服务端都要启动rpcbind服务,客户端不用启动nfs服务,而服务端需要启动nfs服务。
启动rpcbind

启动nfs

3、创建共享目录

4、配置/etc/exports(NFS配置文件)
#/etc/exports 默认这个里面的内容是空的,这个就是nfs的配置文件。
格式:NFS共享目录 客户端地址1(参1,参2只读还是可写) 客户端地址2(参1,参2)
参数选项说明:
共享目录:存在于我们本机上的目录,我们想共享给网络上的其他主机使用。如我要共享/tmp/data目录,那么此选项可以就直接写/tmp/data目录。
客户端地址1(参数1,参数2):客户端地址能够设置一个网络,也可以设置单个主机。参数:如读写权限rw,同步更新sync,压缩来访账号all_squash,压缩后的匿名账号anonuid=uid,anongid=gid等等
客户端地址选项说明:

生产环境常见配置实例:

NFS配置权限设置,即/etc/exports文件配置格式中小括号()里的参数集。

当我们nfs配置好之后,我们可以通过cat
/var/lib/nfs/etab来查看,nfs配置的参数。并且这个目录很重要。/var/lib/nfs/rmtab从这个文件中我们可以看到,有哪些客户端挂载了nfs共享目录。这个两个文件是比较重要的。
我们编辑/etc/exports内容如下:

这表示/root/share目录允许所有远程用户以root特权访问
5、重启nfs服务

客户端操作:
创建挂载目录,查看rpcbind是否启动,如果没有请启动它。

挂载服务端共享目录到本地

存取实验:
本地在share目录下创建文档

服务器端也有了

客户端删除

服务器端也没有了

ps:挂载时老是被拒绝 后来发现是因为我的共享目录在/root下, 这个目录只有root用户有权限 ,所以chmod 777 /root 后 可以挂载了。不过这样做并不好 ,以后共享目录要创建在一个合适的地方。
网友评论