共计 8037 个字符,预计需要花费 21 分钟才能阅读完成。
什么是NFS
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。
在企业集群架构的工作场景中,NFS网络文件系统一般被用来共享存储视频、图片、附件等静态资源文件,通常网站用户上的文件都会存放到 NFS 共享里。例如 bbs 产品的图片、附件头像等。然后前段所有的节点访问这些静态资源时都会读取 NFS 存储上的资源。
企业生成集群中为什么要部署 NFS 存储服务
1)在没有 NFS 文件共享存储时的原理解释:
当 A 用户上传图片到 web1 服务器时,然后 B 用户访问这张图片,结果 B 用户访问图片的请求到了负载均衡器的时候,被分发到 web2 服务器上,因为 web2 没有 A 用户上传的图片,所以 B 用户就无法看到 A 用户上传的图片。
实例:淘宝卖家将新出的产品资料上传到淘宝服务器。如果没有存储服务器,那么当大量的用户访问到这个淘宝卖家店里的时候,分发器将用户的请求都分发给淘宝的其他服务器,那么用户就无法看到卖家新出的产品了,这就导致了降低了用户体验。这样对一个户门网站来说是一个很大的错误。
2)在有 NFS 文件共享存储时的原理解释:
当 A 用户上传一张图片到 web 服务器中,分发器不论是转发到那一台 web 服务器,其内容最后都会被存放到 NFS 共享文件存储中。而当 B 用户访问 A 用户上传的图片时,无论请求被分发器分发 web1 还是 web2 上,最终都会到共享存储上找,都可以找到 A 用户上传的图片。
NFS的工作原理
服务端设置一个专门用来共享的目录(/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的挂载基本使用过程
请求数据的流程:
1)首先用户访问网站程序,由程序在 NFS 客户端上发出存取 NFS 文件的请求,这是 NFS 客户端的 RPC 服务就不通过网络向 NFS 服务器端的 RPC 服务的 111 端口发出 NFS 文件存取功能的查询请求,包括要实现的什么功能。
2)NFS服务器端的 RPC 服务找到对饮的已注册的 NFS 端口,通知 NFS 客户端的 RPC 服务。
3)此时 NFS 客户端获取到正确的端口,并与 NFS 联机存取数据。
4)NFS客户端把数据存取成功后,返回给客户端程序,告知用户存取结果。
注意:
因为 NFS 的各项功能都需要向 RPC 服务注册端口,所以只有 RPC 服务才能获取到 NFS 服务的各项功能对应的端口号,PID、NFS在主机监听的 Ip 等信息,而客户端也只能通过向 RPC 服务询问才能找到正确 的端口,因此,无论是 NFS 服务端还是 NFS 客户端都需要 RPC 服务的协助才能完成对外服务及请求。
一:实验目标
1、完成 NFS 的文件共享
二:实验环境
服务器系统 | 主机名 | IP | 作用 | 软件 |
Rhel6.5 | yu61 | 192.168.1.61 | Nfs-server | nfs-utils、rpcbind |
Rhel6.5 | yu62 | 192.168.1.62 | Nfs-client1 | nfs-utils、rpcbind |
Rhel6.5 | yu63 | 192.168.1.63 | Nfs-client2 | nfs-utils、rpcbind |
三:实验步骤
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
(1)Nfs服务启动的进程说明
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 | 共享文件的 UID 和GID映射匿名用户anonymous,适合公用目录。 |
no_all_squash | 保留共享文件的 UID 和GID(默认) |
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 的信息列表 |
CentOS 7 下 NFS 实例笔记 http://www.linuxidc.com/Linux/2016-12/138708.htm
Linux 下 NFS 搭建步骤 http://www.linuxidc.com/Linux/2016-08/134022.htm
NFS 文件系统详解 http://www.linuxidc.com/Linux/2016-06/131940.htm
基于 LAMP 平台利用 NFS 远程共享资源实现站点构建 http://www.linuxidc.com/Linux/2016-07/133510.htm
Linux NFS 服务器的安装与配置详解 http://www.linuxidc.com/Linux/2017-01/139886.htm
CentOS 7.2 中 NFS1.3 安装 http://www.linuxidc.com/Linux/2016-10/135970.htm
Ubuntu 14.04 安装配置 NFS 服务器 http://www.linuxidc.com/Linux/2016-04/129848.htm
Linux 的 NFS 配置 http://www.linuxidc.com/Linux/2017-04/143135.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/145030.htm