一、什么是NFS?

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

      它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。其就相当于windows里面共享文件,然后其他主机把这个共享文件映射成了本地盘使用一样。

       NFS一般用来存储共享视频,图片等静态数据。

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

  1. 首先服务器端启动RPC服务,并开启111端口;启动NFS服务,并向RPC注册端口信息
  2. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口(由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。)
  3. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
  4. 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。(客户端获取正确的端口,并与NFS daemon联机存取数据。)
  5. 存取数据成功后,返回前端访问程序,完成一次存取操作。

         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就是网络共享目录,就是共享文件.服务端共享,客户端挂载使用。挂载流程原理,就是上面提到的5个流程。NFS要向RPC去注册端口信息。NFS的端口也是随机获取的。

nfs动态存储 可以超出pvc大小吗 nfs文件存储_服务器

NFS优点:

  1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
  2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
  3. 一些存储设备CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
  4. 简单容易上手,维护非常快捷简单

NFS缺点:

  1. 局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
  2. 在高并发下NFS效率/性能有限
  3. 客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
  4. NFS的数据是明文的,对数据完整性不做验证
  5. 多台机器挂载NFS服务器时,连接管理维护麻烦

二、安装部署

NFS共享存储服务

       NFS是一种基于TCP/IP传输的网络文件系统协议,最初由SUN公司开发。通过使用NFS协议客户机可以向访问本地目录一样访问远程服务器中的共享资源。对大多数负载均衡群集来说,使用NFS协议来共享数据存储比较适用。

       NFS服务的实现依赖于RPC(remote process call,远端过程调用)机制,以完成远程到本地的映射过程,在centos6中,需要安装nfs-utils,rpcbind软件包来提供NFS共享服务,前者用于NFS共享发布和访问,后者用于RPC支持。

  • 安装部署:
  • 安装nfs-utils,rpcbind,提供NFS共享的服务为nfs,完成安装以后建议调整两个服务的自启动状态,以便每次开机后自动启动。手动加载NFS共享服务时,应该先启动rpcbind,然后在启动nfs。(因为NFS要向RPC注册端口信息)

[root@localhost ~]# yum -y install nfs-utils rpcbind

[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind

  • 设置共享目录

NFS的配置文件为/etc/exports,文件内容默认为空(无任何共享),在exports文件中设置共享资源时,记录格式为:”目录位置  客户机地址(权限选项)”。例如要将文件夹    /backup共享给192.168.253.0网段使用,允许读写操作。

[root@localhost ~]# mkdir /backup
[root@localhost ~]# vim /etc/exports
/backup/ 192.168.253.0/24(rw,sync,no_root_squash)

解释一下:

其中客户机地址可以是主机名、ip地址、允许使用“*”等通配符,多个时空格隔开即可;权限选项中的rw表示允许读写;ro为只读;sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是root_squash,将作为nfsnobody用户降权对待)

  • 启动NFS服务

[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# netstat -antp | grep rpcbind

查看本机NFS共享目录

[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/backup 192.168.253.0/24

  • 在客户机中访问NFS共享资源:

      NFS协议的目标是提供一种网络文件系统,因此对NFS共享的访问也使用mount命令来进行挂载,对应的文件系统类型为nfs。

      若要正常访问NFS共享资源,客户机中也需要安装rpcbind软件包,并启动rpcbind服务,另外为了使用showmount查询工具,最好将nfs-utils软件包也装上。

安装部署客户机:

[root@localhost ~]# yum -y install nfs-utils rpcbind

[root@localhost ~]# systemctl  enable rpcbind
[root@localhost ~]# systemctl  start rpcbind

查看NFS服务器共享目录:

[root@localhost ~]# showmount -e 192.168.253.110
Export list for 192.168.253.110:
/backup 192.168.253.0/24

手动挂载NFS共享目录

以root用户身份执行mount操作,将NFS服务器共享的/backup目录挂载到本地目录的//var/www/html。与挂载不同的是,设备位置应该指出服务器地址。

[root@localhost ~]# mount 192.168.253.110:/backup /var/www/html/

查看挂载结果

[root@localhost ~]# tail -1 /etc/mtab 
192.168.253.110:/backup /var/www/html nfs4 rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.253.120,local_lock=none,addr=192.168.253.110 0 0

完成挂载以后,访问客户机的/var/www/html文件夹,实际上就相当于访问NFS服务器中的/backup文件夹。其中的网络映射过程对于用户来说是透明的