NFS
NFS
是江山 发表于4个月前
NFS
  • 发表于 4个月前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

##一、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通讯过程

  1. 首先服务器端启动RPC服务,并开启111端口
  2. 启动NFS服务,并向RPC注册端口信息
  3. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
  4. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
  5. 客户端通过获取的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

共有 人打赏支持
粉丝 5
博文 44
码字总数 24060
×
是江山
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: