##一、NFS服务简介
NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
##二、挂载结构图 ##三、NFS挂载原理介绍 如上图,当我们在nfs服务器设置好一个共享目录/data后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到本地。并且能够看到服务端/data的所有数据。因为挂载在本地的/data目录,其实就是服务器端的/data目录。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输。 PS:哦,原来是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。 ##四、客户端NFS和服务端NFS通讯过程
- 首先服务器端启动RPC服务,并开启111端口
- 启动NFS服务,并向RPC注册端口信息
- 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
- 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
- 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
NFS的原理结构其实还是挺简单啊哦,NFS就是网络共享目录,就是共享文件.服务端共享,客户端挂载使用。挂载流程原理,就是上面提到的5个流程。并且为什么是这个流程也讲了。因为NFS要向RPC去注册端口信息。因为NFS的端口是随机获取的。
##五丶安装 ###服务端 ####安装NFS工具:
[root@localhost ~]# yum install -y nfs-utils rpcbind
####编辑配置文件
vim /etc/exports
#加入以下内容
/home/nfstestdir 192.168.205.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
- rw 允许读写
- ro 只允许读
- sync 同步模式,内存数据实时写入磁盘,影响性能
- async 非同步模式,数据有丢失风险
- no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大。(相当于该共享目录已经是客户端的了)
- root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
- all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
- anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
####创建共享目录
mkdir /home/nfstestdir
chmod 777 /home/nfstestdir
/var/lib/nfs/rmtab记录共享目录被挂载情况
/var/lib/nfs/etab记录设置了那些目录共享以及配置参数
####启动服务
#先启动rpcbind,再启动nfs
# rpcinfo -p可以查看rpcbind启动信息
systemctl start rpcbind
systemctl start nfs
####设置服务开启不启动
systemctl enable rpcbind
systemctl enable nfs
###客户端 ####安装nfs-utils
yum install -y nfs-utils
####查看服务端是否共享成功
showmount -e 192.168.205.137
####无法连接到服务端机器
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
解决办法:
检查服务端NFS服务是否开启(监听111端口) 如果确认服务端NFS服务已经开启,那么检查防火墙状态,关闭服务端和客户端firewalld和SELinux防火墙 ####挂载
mount -t nfs 192.168.205.137:/home/nfstestdir /mnt
###测试
在客户机挂载目录创建文件:
[root@localhost ~]# cd /mnt/
[root@localhost ~]# ll
总用量 0
-rw-r--r-- 1 mysql mysql 0 8月 23 19:50 test123
查看服务端共享目录:
[root@localhost ~]# ll /home/nfstestdir/
总用量 0
-rw-r--r--. 1 mysql mysql 0 8月 23 19:50 test123