linux集群NFS网络文件共享系统搭建

一、简介

  NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。

  NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利。

二、挂

目录

一、简介

二、挂载原理

三、RPC与NFS的通讯

四、操练

1、安装和检查NFS、RPC服务(注意:客户端和服务端都要安装)

2、服务端配置过程

3、客户端配置

4、测试

5、排错


载原理

 

  先在NFS服务器设置好一个共享目录/home/public。其他的有权访问NFS服务器的NFS客户端,就可以将这个目录挂载到自己文件系统上,挂载点是客户机自己定义。如下图客户端A的挂载点是/home/A,客户端B挂载的目录是/home/B,而客户端C的挂载目录是/data/ysm。挂载好后通过本地的挂载目录,可以看到到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。在使用体验上,就和本地磁盘几乎没有区别,但是数据时存放在服务器上的,不会占用本地磁盘空间。

linux集群NFS网络文件共享系统搭建_第1张图片 NFS挂载原理图

   NFS是通过网络来进行服务器端和客户端之间的数据传输,两者之间要传输数据就要有想对应的网络端口,基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,小于1024的端口;既然是随机的,那么客户端又需要知道NFS服务器端到底使用的是哪个端口。这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现

 

三、RPC与NFS的通讯

  因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。

  那么RPC又是如何知道每个NFS功能的端口呢?

  当NFS启动后,会随机的使用一些端口,这时NFS就会向RPC去注册这些端口,而RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。

 

访问程序通过NFS客户端向NFS服务端存取数据的流程大致如下

linux集群NFS网络文件共享系统搭建_第2张图片 NFS工作流程图

1)首先服务器端启动RPC服务,并开启111端口

2)服务器端启动NFS服务,并向RPC注册端口信息

3)客户端启动RPCportmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

 

以下几点需要注意:

1)在启动NFS SERVER之前,首先要启动RPC服务,否则NFS SERVER就无法向RPC服务区注册。

2)如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。

3)特别注意:一般修改NFS配置文档后,不需要重启NFS,直接在命令执行/etc/init.d/nfs  reloadexportfs –rv即可使修改的/etc/exports生效

四、操练

1、安装和检查NFS、RPC服务(注意:客户端和服务端都要安装)

安装命令 yum install nfs-utils rpcbind -y  (或者:yum groupinstall "NFS file server" -y)

若有rpm包,安装命令:rpm -ivh  包名    (-ivh:在安装过程中显示正在安装的文件信息及安装进度)

由于先前已经安装,这里提示不用安装,那么久检查一下安装的版本

在安装前可以像笔者一样,检查一下主机系统版本

[root@nfs01 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@nfs01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@nfs01 ~]# yum install nfs-utils rpcbind -y
已加载插件:fastestmirror, security
设置安装进程
Loading mirror speeds from cached hostfile
  (。。。省略N多行。。。)
包 1:nfs-utils-1.2.3-78.el6_10.1.x86_64 已安装并且是最新版本
包 rpcbind-0.2.0-16.el6.x86_64 已安装并且是最新版本
无须任何处理
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-16.el6.x86_64
nfs-utils-1.2.3-78.el6_10.1.x86_64

2、服务端配置过程

1、先启动rpcbind,不怕啰嗦,必须先启动rpcbind,原因上文已经解释了

启动过后可以检查一下是否启动成功,以及查询一下其主端口111是否已在监听

[root@nfs01 ~]# /etc/init.d/rpcbind start
正在启动 rpcbind:                                         [确定]
[root@nfs01 ~]# /etc/init.d/rpcbind status  
rpcbind (pid  2712) is running...
[root@nfs01 ~]# netstat -lntup|grep rpcbind
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1374/rpcbind        
tcp        0      0 :::111                      :::*                        LISTEN      1374/rpcbind        
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1374/rpcbind        
udp        0      0 0.0.0.0:701                 0.0.0.0:*                               1374/rpcbind        
udp        0      0 :::111                      :::*                                    1374/rpcbind        
udp        0      0 :::701                      :::*                                    1374/rpcbind 

2、rpc服务启动完成后,再启动nfs,nfs主端口为2049,启动完成也要检查是否启动成功

[root@nfs01 ~]# /etc/init.d/nfs start          
[root@nfs01 ~]# /etc/init.d/nfs status     
rpc.svcgssd 已停
rpc.mountd (pid 2801) is running...
nfsd (pid 2817 2816 2815 2814 2813 2812 2811 2810) is running...
rpc.rquotad (pid 2796) is running...

3、查看localhost 有注册的端口,这里我们可以看到端口2049的nfs服务 

[root@nfs01 ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
      (。。。。省略N多行。。。。)
    100005    3   tcp  49427  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
      (。。。。省略N多行。。。。)
    100021    3   tcp  45448  nlockmgr
    100021    4   tcp  45448  nlockmgr

4、写入nfs的配置文件

格式:NFS共享目录  NFS客户端地址1(参数1,参数2,...) NFS客户端地址2(参数1,参数2,...) 

可以使用完整的主机IP,也可使用网络号

[root@nfs01 ~]# vim /etc/exports   
#share /data by 45AC for NFS at 20190412
/data 172.16.1.0/24(rw,sync)

括号里的参数,常见的如下所示(可通过man exports 看到更详细说明)

参数参数    说明
ro    该共享目录的权限是只读(read-only)
rw    该共享目录的权限是可读写(read-write)
hide    隐藏文件系统。
noaccess    阻止访问这个目录及其子目录
wdelay    为合并多次更新而延迟写入磁盘
no_wdelay    尽可能快地把数据写入磁盘
sync    将数据同步写入内存缓冲区与磁盘中(同步模式)
async    将数据线暂存在内存缓冲区中,而非直接写入磁盘(非同步模式)
subtree_check    验证每个被请求的文件都在导出的目录树中
no_subtree_check   只验证涉及被导出的文件系统的文件请求
all_squash    将所有本地和远程账户映射到匿名用户
root_squash    将根用户及所属组都映射为匿名用户或用户组(nfsnobody),为默认设置
no_root_squash    将远程根用户当成本地根用户,即不压制root
anonuid    为匿名用户账户指定组ID
anongid    为匿名用户账户指定用户ID

5、设置开机自启动,并检查

[root@nfs01 ~]# chkconfig nfs on 
[root@nfs01 ~]# chkconfig rpcbind on 
[root@nfs01 ~]# chkconfig --list |egrep "nfs|rpc"
nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
nfs-rdma        0:off   1:off   2:off   3:off   4:off   5:off   6:off
nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off
rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off
rpcgssd         0:off   1:off   2:off   3:on    4:on    5:on    6:off
rpcsvcgssd      0:off   1:off   2:off   3:off   4:off   5:off   6:off

6、创建共享目录,修改目录所有者和组

[root@nfs01 ~]# mkdir -p /data          
[root@nfs01 ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data    
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Apr 12 10:18 /data

7、平滑重启nfs,命令:/etc/init.d/nfs reload 等价于 exports -rv

启动后用  showmount -e 服务端IP  测试挂载 

[root@nfs01 ~]# /etc/init.d/nfs reload   
[root@nfs01 ~]# showmount -e 172.16.1.31  #若出现以下提示,表示服务端已经配置完成
Export list for 172.16.1.31:
/data 172.16.1.0/24

3、客户端配置

1、首先检查rpc和nfs安装情况

[root@web01 ~]# rpm -qa nfs-utils rpcbind  
nfs-utils-1.2.3-78.el6_10.1.x86_64
rpcbind-0.2.0-16.el6.x86_64

2、启动rpc,并检查运行情况。注意:客户机不用启动nfs

[root@web01 ~]# /etc/init.d/rpcbind start
正在启动 rpcbind:                                         [确定]
[root@web01 ~]# /etc/init.d/rpcbind status
rpcbind (pid  2142) 正在运行...

3、设置开机自启动

[root@web01 ~]# chkconfig rpcbind on 
[root@web01 ~]# chkconfig --list rpcbind
rpcbind         0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

4、检查网络和nfs服务器端口是否通畅

[root@web01 ~]# telnet 172.16.1.31 111    #以下提示为通畅
Trying 172.16.1.31...
Connected to 172.16.1.31.
Escape character is '^]'.
^ZConnection closed by foreign host.

5、挂载服务端的共享目录

命令:mount -t nfs 172.16.1.31:/data /mnt  , /data  是服务端的共享目录,/mnt 是我们本地的挂载目录

挂载前,可用showmount -e 172.16.1.31先测试一下

fd -h 查看挂载情况,172.16.1.31:/data   19G  1.6G   16G  10% /mnt         就是我们挂载的NFS

[root@web01 ~]# showmount -e 172.16.1.31  
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt  
[root@web01 ~]# df -h      
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3           19G  1.5G   17G   9% /
tmpfs              491M     0  491M   0% /dev/shm
/dev/sda1          190M   35M  146M  19% /boot
172.16.1.31:/data   19G  1.6G   16G  10% /mnt         

6、设置开机自动挂载

[root@web01 mnt]# echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local 
[root@web01 mnt]# tail -1 /etc/rc.local 
mount -t nfs 172.16.1.31:/data /mnt

4、测试

客户机上,我们在/mnt目录创建一个文件,再到服务机的/data目录查看刚刚创建的文件

客户机创建过程

[root@web01 ~]# cd /mnt  
[root@web01 mnt]# touch ysm.txt
[root@web01 mnt]# echo 'you are angel!' >> ysm.txt
[root@web01 mnt]# cat ysm.txt  
you are angel!

服务机查看

[root@nfs01 ~]# cd /data
[root@nfs01 data]# ls 
nfs-blog  ysm.txt
[root@nfs01 data]# cat ysm.txt 
you are angel!

5、排错

对NFS原理以及部署步骤熟练

客户端排查

         ping server_ip

         telnet server_ip 111

         showmount -e server_ip

         mount -t nfs server_ip:/服务端共享目录 /客户端挂载点

centos6.6以后版本,如果挂载的时候报如下错,需在客户机安装nfs,只安装,不启动。

安装命令:yum install nfs-utils -y

linux集群NFS网络文件共享系统搭建_第3张图片

  1. selinux、iptables未关闭
  2. 命令是否正确
  3. 检查配置文件 注意括号是英文,没有空格,地址和网段是否真确
  4. 共享目录是否授权
  5. 网络不通 
  6. rpc和nfs的启动顺序不对

 

你可能感兴趣的:(linux集群NFS网络文件共享系统搭建)