NFS网络文件共享存储服务器

 

什么是NFS

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

在企业集群架构的工作场景中,NFS网络文件系统一般被用来共享存储视频、图片、附件等静态资源文件,通常网站用户上的文件都会存放到NFS共享里。例如bbs产品的图片、附件头像等。然后前段所有的节点访问这些静态资源时都会读取NFS存储上的资源。

企业生成集群中为什么要部署NFS存储服务

NFS网络文件共享存储服务器_第1张图片 

1)在没有NFS文件共享存储时的原理解释:

A用户上传图片到web1服务器时,然后B用户访问这张图片,结果B用户访问图片的请求到了负载均衡器的时候,被分发到web2服务器上,因为web2没有A用户上传的图片,所以B用户就无法看到A用户上传的图片。

实例:淘宝卖家将新出的产品资料上传到淘宝服务器。如果没有存储服务器,那么当大量的用户访问到这个淘宝卖家店里的时候,分发器将用户的请求都分发给淘宝的其他服务器,那么用户就无法看到卖家新出的产品了,这就导致了降低了用户体验。这样对一个户门网站来说是一个很大的错误。

 

NFS网络文件共享存储服务器_第2张图片 

2)在有NFS文件共享存储时的原理解释:

A用户上传一张图片到web服务器中,分发器不论是转发到那一台web服务器,其内容最后都会被存放到NFS共享文件存储中。而当B用户访问A用户上传的图片时,无论请求被分发器分发web1还是web2上,最终都会到共享存储上找,都可以找到A用户上传的图片。

NFS的工作原理

NFS网络文件共享存储服务器_第3张图片 

服务端设置一个专门用来共享的目录(/test)。设置好共享目录的权限,IP等内容。然后具有权限的客户端访问NFS服务器端,将这个共享目录挂载到客户端的某个目录下。客户端在正确挂载完之后,就可以通过NFS客户端的挂载点所在的目录中查看到NFS服务端共享目录/test下的所有数据。客户端查看时,NFS服务端的/test目录就相当于客户端本地的磁盘分区或目录。

什么RPC服务

RPC指远程过程调用。

因为NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,为启动一个功能就会启用一些未被使用的端口来作为传输只用,因为端口的不固定,这样一来就会造成NFS客户端与NFS服务器端的通信障碍没因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,才能交互数据。

为了解决上述的问题,就需要RPC服务,NFS服务的RPC服务最主要的功能就是记录每个NFS功能所对饮的端口号,并且NFS客户端请求时将该端口和功能对应的信息传输给请求数据的NFS客户端,从而保证客户端可以连接到正确的NFS端口上去,达到实现数据交互的目的。

服务端的RPC服务如何知道每个NFS的端口的:

NFS读取端启动服务时会随机取用若干端口,并主动向RPC服务注册相关端口的对应的功能,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端。

NFS的挂载基本使用过程

NFS网络文件共享存储服务器_第4张图片 

请求数据的流程:

1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这是NFS客户端的RPC服务就不通过网络向NFS服务器端的RPC服务的111端口发出NFS文件存取功能的查询请求,包括要实现的什么功能。

2)NFS服务器端的RPC服务找到对饮的已注册的NFS端口,通知NFS客户端的RPC服务。

3)此时NFS客户端获取到正确的端口,并与NFS联机存取数据。

4)NFS客户端把数据存取成功后,返回给客户端程序,告知用户存取结果。

注意:

因为NFS的各项功能都需要向RPC服务注册端口,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号,PIDNFS在主机监听的Ip等信息,而客户端也只能通过向RPC服务询问才能找到正确 的端口,因此,无论是NFS服务端还是NFS客户端都需要RPC服务的协助才能完成对外服务及请求。

 

一:实验目标

1、完成NFS的文件共享

 

二:实验环境

服务器系统

主机名

IP

作用

软件

Rhel6.5

yu61

192.168.1.61

Nfs-server

nfs-utilsrpcbind

Rhel6.5

yu62

192.168.1.62

Nfs-client1

nfs-utilsrpcbind

Rhel6.5

yu63

192.168.1.63

Nfs-client2

nfs-utilsrpcbind

三:实验步骤

1、安装NFS服务端

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

[root@yu61 ~]#

[root@yu61 ~]# /etc/init.d/rpcbind status

rpcbind (pid  1615) is running...

[root@yu61 ~]# lsof -i :111

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rpcbind 1615  rpc    6u  IPv4  11330      0t0  UDP *:sunrpc

rpcbind 1615  rpc    8u  IPv4  11333      0t0  TCP *:sunrpc (LISTEN)

rpcbind 1615  rpc    9u  IPv6  11335      0t0  UDP *:sunrpc

rpcbind 1615  rpc   11u  IPv6  11338      0t0  TCP *:sunrpc (LISTEN)

 

2、查看NFS服务向RPC服务注册的端口信息

因为NFS服务还没有启动,一次没有太多注册端口映射信息。

[root@yu61 ~]# 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  43521  status

100024    1   tcp  60423  status

3、启动NFS服务

[root@yu61 ~]# /etc/init.d/nfs start

rpc.rquotad (pid 49232) is running...

[root@yu61 ~]# 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  43521  status

    100024    1   tcp  60423  status

    100011    1   udp    875  rquotad

    100011    2   udp    875  rquotad

    100011    1   tcp    875  rquotad

    100011    2   tcp    875  rquotad

    100005    1   udp  38917  mountd

    100005    1   tcp  44150  mountd

    100005    2   udp  42858  mountd

    100005    2   tcp  52228  mountd

    100005    3   udp  41216  mountd

100005    3   tcp  60796  mountd

4、NFS服务常见的进程详解

[root@yu61 ~]# ps -ef | egrep "rpc|nfs"

rpc        1615      1  0 11:00 ?        00:00:00 rpcbind

rpcuser    1755      1  0 11:00 ?        00:00:00 rpc.statd

root      49221      2  0 18:35 ?        00:00:00 [rpciod/0]

root      49222      2  0 18:35 ?        00:00:00 [rpciod/1]

root      49223      2  0 18:35 ?        00:00:00 [rpciod/2]

root      49224      2  0 18:35 ?        00:00:00 [rpciod/3]

root      49232      1  0 18:35 ?        00:00:00 rpc.rquotad

root      49236      1  0 18:35 ?        00:00:00 rpc.mountd

root      49242      2  0 18:35 ?        00:00:00 [nfsd4]

root      49243      2  0 18:35 ?        00:00:00 [nfsd4_callbacks]

root      49249      2  0 18:35 ?        00:00:00 [nfsd]

root      49250      2  0 18:35 ?        00:00:00 [nfsd]

root      49251      2  0 18:35 ?        00:00:00 [nfsd]

root      49274      1  0 18:35 ?        00:00:00 rpc.idmapd

root      49318   2821  0 18:36 pts/0    00:00:00 egrep rpc|nfs

1Nfs服务启动的进程说明

NFS服务的主要任务是共享文件刺痛的数据,而文件系统数据的共享离不开权限问题。所以NFS服务器启动后时掷筛需要两个不同的进程,一个是管理NFS客户端是否能够登入rpxc.nfsd主进程,另一个用于管理NFS客户端是否能够取得对应权限的rpc.mountd进程,如果还需要管理磁盘配额,则NFS还需要再加载rpc.rpuotad进程。

服务或进程

用途说明

nfsd (rpc.nfsd)

Rpc.nfsd的主要功能是管理NFS服务器端主机

Mountd (rpc.mountd)

rpc.mountd的主要功能则是管理NFS文件系统,当NFS客户端顺利通过rpc.nfsd登入NFS服务器端的主机时,在使用NFS服务器提供数据之前,他会去读NFS的配置文件/etc/exports来对比NFS客户端的权限,通过这一关之后,还要经过NFS服务器端本地文件系统使用权限的认证程序,

rpc.locke

可以用来锁定文件,用于多客户端同时写入

rpc.statd

检查文件的一致性

rpc.idmapd

名字映射后台进程

5、配置NFS服务器端的服务开机自启动

[root@yu61 ~]# chkconfig rpcbind on

[root@yu61 ~]# chkconfig nfs on

[root@yu61 ~]# chkconfig --list | egrep "nfs\b|rpcbind"

nfs            0:off1:off2:on3:on4:on5:on6:off

rpcbind        0:off1:off2:on3:on4:on5:on6:off

[root@yu61 ~]# tail -3 /etc/rc.local

tail: inotify cannot be used, reverting to polling

#start uo nfs

/etc/init.d/rpcbind start

/etc/init.d/nfs start

 

6、Nfs服务器端共享文件的配置文件路径

[root@yu61 ~]# cat /etc/exports

格式:

Nfs共享目录 nfs客户端1地址(权限) nfs客户端2地址(权限)

例如:可以编辑/etc/exports为: 

/tmp*(rw,no_root_squash)

/home/public192.168.0.*(rw)*(ro)

/home/test192.168.0.100(rw)

/home/linux*.the9.com(rw,all_squash,anonuid=40,anongid=40)

 

7、NFS配置权限设置常用参数说明

参数名称

参数用途

ro

只读访问

rw

读写访问

sync

所有数据在请求时写入共享

async

NFS在写入数据前可以相应请求

secure

NFS通过1024以下的安全TCP/IP端口发送

insecure

NFS通过1024以上的端口发送

wdelay

如果多个用户要写入NFS目录,则归组写入(默认)

no_wdelay

如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

hide

NFS共享目录中不共享其子目录

no_hide

共享NFS目录的子目录

subtree_check

如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check

不检查父目录权限

all_squash

共享文件的UIDGID映射匿名用户anonymous,适合公用目录。

no_all_squash

保留共享文件的UIDGID(默认)

root_squash

root用户的所有请求映射成如anonymous用户一样的权限(默认)

anonuid=xxx

指定NFS服务器/etc/passwd文件中匿名用户的UID

 

 

实战:NFS服务案例配置

1、创建需要共享的目录并授权

[root@yu61 ~]# mkdir -p /data

[root@yu61 ~]# touch /data/a.txt

[root@yu61 ~]# cp /etc/shadow /data/

[root@yu61 ~]# chown -R nfsnobody.nfsnobody /data

[root@yu61 ~]# chmod 777 /data/

[root@yu61 ~]# ls -ld /data/

drwxrwxrwx 3 nfsnobody nfsnobody 4096 May 20 19:16 /data/

[root@yu61 ~]# grep nfsnobody /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

2、配置NFS服务的配置文件,并在本地查看挂在信息

[root@yu61 ~]# vim /etc/exports

[root@yu61 ~]# cat /etc/exports

/data 192.168.1.0/24 (rw,sync)

[root@yu61 ~]# exportfs -rv

exporting 192.168.1.0/24:/data

exporting *:/data

[root@yu61 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sr0        3.6G  3.6G     0 100% /mnt

[root@yu61 ~]# mount -t nfs 192.168.1.61:/data/ /mnt/

[root@yu61 ~]# df -h

Filesystem           Size  Used Avail Use% Mounted on

/dev/sr0              20G  4.6G   14G  26% /mnt

192.168.1.61:/data/   20G  4.6G   14G  26% /mnt

3、客户端安装rpcbind

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

[root@yu63 ~]# /etc/init.d/rpcbind status

rpcbind (pid  1695) 正在运行...

[root@yu63 ~]# echo "/etc/init.d/rpcbind start" >> /etc/rc.local

[root@yu63 ~]# echo "/bin/mount -t nfs 192.168.1.61:/data /mnt " >> /etc/rc.local

[root@yu63 ~]# tail -2 /etc/rc.local

tail: inotify cannot be used, reverting to polling

/etc/init.d/rpcbind start

/bin/mount -t nfs 192.168.1.61:/data /mnt

[root@yu63 ~]# showmount -e 192.168.1.61

Export list for 192.168.1.61:

/data (everyone)

4、挂在服务端的共享文件

[root@yu63 ~]# mount -t nfs 192.168.1.61:/data /mnt

[root@yu63 ~]# df -h

Filesystem          Size  Used Avail Use% Mounted on

hm

/dev/sda1           4.9G  162M  4.5G   4% /boot

/dev/sr0             20G  4.6G   14G  26% /mnt

192.168.1.61:/data   20G  4.6G   14G  26% /mnt

[root@yu63 ~]# mount

.........

192.168.1.61:/data on /mnt type nfs (rw,vers=4,addr=192.168.1.61,clientaddr=192.168.1.63)

5、测试读写数据

[root@yu63 ~]# ls /mnt

a.txt   shoadow

[root@yu63 ~]# mkdir /mnt/test

[root@yu63 ~]# ls /mnt

a.txt shoadow test

[root@yu61 ~]# ls /mnt

a.txt   shoadow   test

 

附件:

NFS常用路径

说明

/etc/exports

NFS服务的主配置文件。

/usr/sbin/exports

NFS的管理命令,可以加载NFS配置生效等

/usr/sbin/showmount

用来客户端查看NFS配置及挂在结果命令

/var/lib/nfs/etab

NFS配置文件的完整参数设定文件

/pro/mounts

客户端挂在参数

/vae/lib/nfs/rmtab

客户端访问服务器exports的信息列表