NFS原理及配置

  • NFS原理及配置
  • NFC定义
  • NFC工作原理
  • 在Linux中NFS配置
  • NFS服务端搭建
  • NFS客户端配置


NFS原理及配置

NFC定义

NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。

NFC工作原理

NFS(Network File System,网络文件系统)是当前主流异构平台共享文件系统之一。主要应用在UNIX环境下。最早是由Sun Microsystems开发,现在能够支持在不同类型的系统之间通过网络进行文件共享,广泛应用在FreeBSD、SCO、Solaris等异构操作系统平台,允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,使得每个计算机的节点能够像使用本地资源一样方便地使用网上资源。换言之,NFS可用于不同类型计算机、操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享。

NFS的工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。服务器程序向其他计算机提供对文件系统的访问,其过程称为输出。NFS客户端程序对共享文件系统进行访问时,把它们从NFS服务器中“输送”出来。文件通常以块为单位进行传输。其大小是8KB(虽然它可能会将操作分成更小尺寸的分片)。NFS传输协议用于服务器和客户机之间文件访问和共享的通信,从而使客户机远程地访问保存在存储设备上的数据。

nfs协议优缺点 nfs基于什么协议_nfs

在Linux中NFS配置

NFS 服务所需的安装包
安装 NFS 和 RPC 「服务端、客户端都安装」

[root@backup ~]# rpm -qa nfs-utils rpcbind
[root@backup ~]# yum install nfs-utils rpcbind -y    #nfs需要的安装包
[root@backup ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.2.3-64.el6.x86_64
rpcbind-0.2.0-11.el6_7.x86_64

NFS 版本查看

nfsstat -s #服务端版本查看
nfsstat -c #客户端版本查看

NFS服务端搭建

配置exports

[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x. 3 root root 4096 Apr 11 09:49 /data/
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/    
[root@nfs01 ~]# ll -d /data/                       
drwxr-xr-x. 3 nfsnobody nfsnobody 4096 Apr 11 09:49 /data/
[root@nfs01 ~]# cat /etc/exports    
# share /data for web created by zhangliang at 2016-05-21
/data   172.16.1.0/24(rw,sync)
#172.16.1.0/24(rw,sync) 没有空格
#/data  172.16.1.0/24(rw,sync,root_squash,all_squash,anonuid=XXXX,anongid=XXXX) # 推荐配置

启动rpcbind服务

[root@nginx_cdn ~]# systemctl start rpcbind.service  
[root@nginx_cdn ~]# netstat -anp | grep 'rpc' 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1930/rpcbind        
tcp6       0      0 :::111                  :::*                    LISTEN      1930/rpcbind        
udp        0      0 0.0.0.0:832             0.0.0.0:*                           1930/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1930/rpcbind        
udp6       0      0 :::832                  :::*                                1930/rpcbind        
udp6       0      0 :::111                  :::*                                1930/rpcbind        
unix  2      [ ACC ]     STREAM     LISTENING     17999    1/systemd            /var/run/rpcbind.sock
[root@nginx_cdn ~]# rpcinfo -p localhost    
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

启动NFS

[root@nginx_cdn ~]# systemctl start nfs.service 
[root@nginx_cdn ~]# rpcinfo -p localhost 
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  44741  status
    100024    1   tcp  23203  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  48638  nlockmgr
    100021    3   udp  48638  nlockmgr
    100021    4   udp  48638  nlockmgr
    100021    1   tcp  16146  nlockmgr
    100021    3   tcp  16146  nlockmgr
    100021    4   tcp  16146  nlockmgr

加入开始自启动

[root@nginx_cdn ~]# systemctl enable rpcbind.service 
[root@nginx_cdn ~]# systemctl enable nfs.service

查看具体状态情况

[root@nginx_cdn ~]# systemctl status rpcbind.service 
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
………………
[root@nginx_cdn ~]# systemctl status nfs.service 
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
………………

查看有哪些参数生效

[root@nfs01 ~]# cat /var/lib/nfs/etab 
/data   172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)

检查是否成功

[root@nfs01 ~]# showmount -e 172.16.1.31  # 其中 172.16.1.31 为 NFS 服务端IP 
Export list for 172.16.1.31:
/data 172.16.1.0/24

NFS客户端配置

启动rpcbind服务

[root@nginx_proxy01 ~]# systemctl start rpcbind.service

检查共享信息

[root@web01 ~]# showmount -e 172.16.1.31    
Export list for 172.16.1.31:
/data 172.16.1.0/24

NFS挂载
在2台机器都挂载 NFS,好用于后面的测试。

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt

查看挂载信息

[root@web01 ~]# df -h        #有时可能会被卡主
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3          8.8G  1.5G  6.9G  18% /
tmpfs              495M     0  495M   0% /dev/shm
/dev/sda1          190M   40M  141M  23% /boot
172.16.1.31:/data  8.8G  1.5G  6.9G  18% /mnt

测试
在客户端和服务端之间测试「2个客户端,1个服务端」

1、任意客户端创建文件夹或创建文件并且输入数据,在服务端是否可以查看;

2、服务端创建文件夹或创建文件并且输入数据,在任意客户端是否可以查看;

3、在客户端A 删除客户端B 创建的文件

4、在客户端B 删除客户端A 创建的文件
加入开机自启动
如果是 CentOS 7 环境,那么必须保证 /etc/rc.d/rc.local 文件具有可执行权限,否则该脚本不会执行也不会生效。

[root@web01 mnt]$ ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Nov 14  2018 /etc/rc.local -> rc.d/rc.local
[root@web01 mnt]# tail -3 /etc/rc.local    

# mount nfs
mount -t nfs 172.16.1.31:/data /mnt