你的位置:首页 > 软件开发 > 操作系统 > NFS服务

NFS服务

发布时间:2017-11-17 21:00:09
第1章 NFS介绍1.1 NFS的概念NFS是Network File System的缩写,即网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器如web)可以通过mount挂载的方式将NFS服务器端共享的数据 ...

第1章 NFS介绍

1.1 NFS的概念

NFS是Network File System的缩写,即网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器如web)可以通过mount挂载的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)

1.2 NFS在企业中的应用场景

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

1.2.1 NFS文件系统存在的作用

01. 实现数据信息的共享

02. 实现数据信息的一致

1.2.2 共享存储的实现方式

1.硬件实现共享存储

IBM(服务器 小型机 大型机 存储 DS V7000 V5000) Oracle EMC ==>去IOE

2.软件实现共享存储

本地文件系统NFS 分布式文件系统mfs FTP samba

说明:互联网领域发展过程详细了解(浪潮之巅)

1.3 NFS共享系统原理

01. 在NFS服务器端创建一个共享目录/video

02. 通过mount网络挂载,将这个共享目录/video挂载到客户端本地挂载点(不同客户端的挂载点可以不相同)

03. 客户端挂载完毕后,进入NFS客户端挂载点所在的目录就可以看到NFS服务器端/video共享出来的目录下的所有数据。在客户端的挂载目录上进行创建/删除/查看数据操作时,就相当于在服务器进行的创建/删除/查看操作

显示本地共享服务器挂载的基本信息

 1 [root@nfs01 ~]# df -h 2  3 Filesystem   Size Used Avail Use% Mounted on 4  5 /dev/sda3   6.9G 1.6G 5.0G 24% / 6  7 tmpfs    491M 0 491M 0% /dev/shm 8  9 /dev/sda1   190M 33M 147M 19% /boot10 11 172.16.1.31:/data 6.9G 1.6G 5.0G 24% /mnt #使用率到达99%时扩容对端NFS

说明:mount -t 指定挂载类型   源           目标

mount -t     nfs    172.16.1.31:/data    /mnt

1.4 RPC远程过程调用

1.4.2 NFS工作流程原理

1.4.2.1  服务端三部曲

01.启动RPC服务/etc/init.d/rpcbind start

02.启动NFS服务/etc/init.d/nfs start

03.NFS服务会向RPC服务注册启动的端口信息(只能注册一次,要想注册第二次要重启NFS服务)

1.4.2.2  客户端三部曲

01.启动RPC服务/etc/init.d/rpcbind start,通过TCP/IP和服务端的RPC服务建立连接

02.通过mount进行挂载,将远程磁盘目录挂载到本地

03.通过客户端RPC服务向服务端RPC服务请求NFS服务端口信息,根据不同的进程和端口进行应用NFS服务

1.5 NFS服务网络文件共享RPC服务

由于NFS支持的功能很多,当NFS启动时会出现多个进程,网络服务又会自动生成一些随机的端口信息。NFS的随机端口造成了客户端与服务端的通信障碍,因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,这时就生成了RPC远程调用服务

当RPC启动时会记录每个NFS功能所对应的端口信息,由RPC服务提供用户访问,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口,达到实现数据传输交互数据目的

 

第2章 NFS服务器端部署环境准备

2.1 NFS服务端部署

服务器系统

角色

IP

Centos6.9x86_64

NFS客户端(web-client)

10.0.0.7

Centos6.9x86_64

NFS服务器端(nfs-server)

10.0.0.8

Centos6.9x86_64

NFS客户端(web-client)

10.0.0.9

2.1.1 centos6.x x86_64模拟环境信息

NFS服务器端操作系统信息及内核版本信息

 1 [root@nfs01 ~]# cat /etc/redhat-release 2  3 CentOS release 6.9 (Final) 4  5 [root@nfs01 ~]# uname -r 6  7 2.6.32-696.el6.x86_64 8  9 [root@nfs01 ~]# uname -m10 11 x86_64

NFS客户端操作系统信息及内核版本信息如下:

 1 [root@web01 ~]# cat /etc/redhat-release 2  3 CentOS release 6.9 (Final) 4  5 [root@web01 ~]# uname -r 6  7 2.6.32-696.el6.x86_64 8  9 [root@web01 ~]# uname -m10 11 x86_64

2.1.2 检查NFS RPC服务软件是否安装

 1 rpm -qa |grep nfs 2 3 rpm -qa |grep rpc 

说明:当不知道软件名字时候,可以用rpm -qa|grep -E "nfs-|rpcbind"来过滤包含在引号内的字符串;默认centos6.x系统没有安装nfs和rpc软件包(centos5默认会安装)

2.1.3 进行yum安装nfs与rpc服务软件

注意:这里安装的rpc软件是rpcbind,centos5.x安装portmap

 1 yum install -y nfs-utils rpcbind 

查看已安装的软件包里的内容

 1 [root@nfs01 ~]# rpm -ql nfs-utils 2  3 /etc/rc.d/init.d/nfs  #启动脚本命令 4  5 /usr/sbin/exportfs #NFS共享服务的管理命令 6  7 /usr/sbin/showmount #查看NFS共享列表信息 8  9 [root@nfs01 ~]# rpm -ql rpcbind10 11 /etc/rc.d/init.d/rpcbind #启动脚本命令12 13 /usr/sbin/rpcinfo  #查看NFS注册信息

查看某个命令/文件属于哪个大礼包

 1 rpm -qf `which ssh` 

2.1.4 进行NFS配置文件/etc/exports编写

NFS服务的默认配置文件路径为/etc/exports且默认为空

说明:NFS默认配置文件是存在的,但是没有内容,需要用户自行配置

1 vim /etc/exports2 3 #share /data by shine for share at 201710134 5 /data 172.16.1.0/24(rw,sync)

第一部分:/data  <=指定共享目录信息

第二部分:172.16.1.0/24  <=指定目标网段,表示允许指定网段主机挂载到本地的共享目录上

第二部分:(rw,sync)  <=定义共享服务相关参数信息

rw表示读写,对共享目录设置的权限;

sync同步,数据先写入NFS服务器内存,立刻同步到磁盘中==>即直接写入到磁盘中

说明:修改/etc/exports后,需执行/etc/init.d/nfs reload平滑重启或exportfs -rv重新加载NFS配置,不进行重启NFS

2.1.5 创建共享目录并更改权限

 1 mkdir -p /data 2 3 chown -R nfsnobody.nfsnobody /data 4 5 ll -d /data 

在NFS服务器端把要共享的NFS目录赋予NFS默认用户nfsnobody用户和用户组权限,如果不设置则会导致NFS客户端无法通过NFS本地共享目录权限写入;当然也可以给NFS服务器端本地共享目录777的权限,但工作中最好不要用,因为777的权限太大

说明:NFS共享目录管理用户这里为nfsnobody,服务端(个人)没有创建nfsnobody用户但仍可以赋予用户权限,是由于nfsnobody用户是在进行nfs软件的yum安装时自动创建的

2.1.6 启动NFS服务

1.首先启动rpc服务(检查状态/etc/init.d/rpcbind status)

 1 /etc/init.d/rpcbind start 

2.查看NFS向rpc服务注册的本地端口信息

 1 ps -ef |grep rpcbind 2 3 netstat rpcbind 4 5 rpcinfo -p 10.0.0.31 #这时由于NFS还未启动,所以没有过多注册的端口映射信息 

3.其次启动NFS服务

 1 /etc/init.d/nfs start 2 3 rpcinfo -p 10.0.0.31 #NFS服务启动会有很多端口和功能的对应,每次启动时除了873和2049其他端口均随机 

说明:如果rpcbind服务未启动,执行命令rpcinfo -p localhost检查时,会报如下错误

rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused

解决办法:执行/etc/init.d/rpcbind start启动rpcbind服务即可

2.1.7 检查NFS服务配置及本地测试挂载

测试挂载结果

1 mount -t nfs 172.16.1.31:/data /mnt #mount -t 挂载类型 要挂载的服务器:共享目录 客户端的挂载点2 3 df -h #查看挂载后的结果4 5 #172.16.1.31:/data 8.8G 1.7G 6.7G 20% /mnt6 7 mount

2.2 NFS客户端部署(以下步骤均在backup和web01服务器中执行)

2.2.1 检查NFS RPC服务软件是否安装

 1 rpm -qa |grep nfs 2 3 rpm -qa |grep rpcbind 

2.2.2 进行yum安装nfs与rpc服务软件

 1 yum install -y nfs-utils rpcbind 

说明:进行同时安装的操作:在命令行界面右键→"发送键输入到所有会话"

nfs-utils和rpcbind软件安装后,均不是必须要启动的,也可以不启动。但是,软件必须要安装

  如果nfs/rpc软件不安装会造成的问题:

a 客户端无法使用showmount/rpcinfo命令

b 挂载时客户端无法识别nfs/rpc文件系统类型

2.2.3 检查nfs客户端是否有可以进行共享挂载目录的包

 1 rpm -qf `which showmount` 

说明:showmount使用,需要安装nfs-utils软件

2.2.4 进行nfs客户端共享目录挂载

进行共享目录挂载

 1 mount -t nfs 172.16.1.31:/data /mnt 

说明:只要nfs服务端进行修改配置文件重新挂载,客户端也必须重新进行挂载

2.2.5 进行文件创建/删除测试检查

在备份服务器中,新建oldboy文件

 1 [root@web01 ~]# touch /mnt/oldboy.txt 2 3 [root@web01 ~]# rm -f /mnt/oldboy.txt 

此时,nfs和web客户端均能共享到oldboy文件

注意:客户端测试如果有异常,可以把测试过程转移到服务端,通过服务端进行测试,便可确认异常问题原因

 

第3章 NFS深入扩展知识

3.1 NFS服务相关进程说明

 1 [root@nfs01 ~]# ps -ef |egrep "rpc|nfs" 2  3 rpc  1185  1 0 20:17 ?  00:00:00 rpcbind  <-RPC主进程 4 rpcuser 1207  1 0 20:17 ?  00:00:00 rpc.statd  <-检查数据存储一致性 5 root  1367  2 0 20:19 ?  00:00:00 [rpciod/0] 6 root  1376  1 0 20:19 ?  00:00:00 rpc.rquotad <-磁盘配额进程(remote quota server) 7 root  1381  1 0 20:19 ?  00:00:00 rpc.mountd <-服务端挂载权限管理验证等(NFS mount daemon) 8 root  1388  2 0 20:19 ?  00:00:00 [nfsd4] 9 root  1389  2 0 20:19 ?  00:00:00 [nfsd4_callbacks]10 root  1390  2 0 20:19 ?  00:00:00 [nfsd]     <-NFS主进程daemon11 root  1391  2 0 20:19 ?  00:00:00 [nfsd]     <-NFS主进程12 root  1392  2 0 20:19 ?  00:00:00 [nfsd]     <-NFS主进程,管理登入,ID身份判别等13 root  1393  2 0 20:19 ?  00:00:00 [nfsd]14 root  1394  2 0 20:19 ?  00:00:00 [nfsd]15 root  1395  2 0 20:19 ?  00:00:00 [nfsd]16 root  1396  2 0 20:19 ?  00:00:00 [nfsd]17 root  1397  2 0 20:19 ?  00:00:00 [nfsd]  <-NFS主进程18 root  1428  1 0 20:19 ?  00:00:00 rpc.idmapd <-name mapping daemon用户压缩/用户映射19 root  1432 1305 0 20:19 pts/0 00:00:00 egrep --color=auto rpc|nfs


NFS查看以上进程,可以通过man进程名命令,如man rpcidmapd

3.2 配置NFS服务端开机自启动

 1 [root@nfs01 ~]# chkconfig rpcbind on 2 3 [root@nfs01 ~]# chkconfig nfs on 

3.3 NFS服务端配置文件路径

NFS服务的默认配置文件路径为/etc/exports且默认为空

1 [root@nfs01 ~]# ls -l /etc/exports2 3 -rw-r--r-- 1 root root 29 Oct 11 11:13 /etc/exports4 5 [root@nfs01 ~]# cat /etc/exports

说明:NFS默认配置文件是存在的,但是没有内容,需要用户自配

 

第4章 NFS配置参数权限说明


 4.1 squash参数详解

rpc.idmapd      名字映射后台进程

4.2 anonuid、anongid参数详解

作用:修改映射后的默认用户信息,默认映射用户为65534-nfsnobody

4.2.1 实践操作配置1:修改NFS默认映射用户(nfsnobody->www)

4.2.1.1  服务端配置

第一个里程碑-创建映射用户(服务端与客户端都创建,且uid和gid保持一致)

说明:因为两端识别用户身份并不是依靠用户名识别的,而是识别uid和gid信息,需要 uid和gid信息来判断用户是否一致,不一致则出现拒绝访问错误!

#客户端和服务端创建用户www

 1 useradd www -u 666 2 3 id www 

第二个里程碑-服务端进行nfs文件配置,修改共享目录权限(客户端不进行修改)

1 [root@nfs01 ~]# vim /etc/exports2 3 #share /data by root for www at 201710154 5 /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

说明:不指定anon参数这里就以uid为65534的nfsnobody用户作为默认映射用户

提示:用户默认的映射参数为root_squash、no_all_squash,所以配置文件中一定要进行参数设置

第三个里程碑-修改上级目录权限

 1 [root@nfs01 ~]# chown -R www.www /data 

第四个里程碑-重启服务器

 1 [root@nfs01 ~]# /etc/init.d/nfs reload 

4.2.1.2  客户端配置

第一个里程碑-进行挂载/重新挂载

 1 [root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt 2  3 [root@backup ~]# df -h 4  5 Filesystem   Size Used Avail Use% Mounted on 6  7 /dev/sda3   8.8G 1.7G 6.7G 20% / 8  9 tmpfs    238M  0 238M 0% /dev/shm10 11 /dev/sda1   190M 40M 141M 22% /boot12 13 172.16.1.31:/data 8.8G 1.7G 6.7G 20% /mnt

第二个里程碑-创建指定www用户

 1 useradd www -u 666 2 3 id www 4 5 uid=666(www) gid=666(www) groups=666(www) 

第三个里程碑-客户端进行测试

01.测试root用户映射

1 [root@backup mnt]# touch user_root.txt2 3 [root@backup mnt]# ll4 5 total 06 7 -rw-r--r-- 1 www www 0 Oct 15 16:25 user_root.txt

02.测试普通用户映射

#www用户映射

1 [www@backup mnt]$ touch user_www.txt2 3 [www@backup mnt]$ ll4 5 total 06 7 -rw-r--r-- 1 www www 0 Oct 15 16:25 user_root.txt8 9 -rw-rw-r-- 1 www www 0 Oct 15 16:26 user_www.txt

注意:当服务端创建用户而客户端不存在此用户时,客户端在挂载点下创建目录,文件用户属性出现nobody信息

4.2.2 实践操作配置2:修改客户端配置文件进行测试

no_all_squash

 1 [oldboy@backup mnt]$ touch user_oldboy.txt 2 3 touch: cannot touch `user_oldboy.txt': Permission denied 

root_squash(服务端挂载目录/data属主为www,故www用户仍能挂载)

 1 [oldboy@backup mnt]$ touch user_oldboy.txt 2 3 touch: cannot touch `user_oldboy.txt': Permission denied 

no_root_squash(root用户不进行映射,其权限能创建文件且属主依然为root)

1 [root@backup mnt]# touch user_root.txt2 3 [root@backup mnt]# ll4 5 -rw-r--r-- 1 root root 0 Oct 15 17:06 user_root.txt6 7 [oldboy@backup mnt]$ touch user_oldboy.txt8 9 touch: cannot touch `user_oldboy.txt': Permission denied

  NFS服务umount命令参数

-l  表示不用离开当前挂载目录,进行懒惰卸载

-f  表示对挂载的目录进行强制卸载

 

第5章 NFS服务企业案例配置实践

5.1 实例:共享不同的两个目录,分别赋予读和写的权限

5.1.1 具体要求

服务端上面要求:nfs服务器172.16.1.31,共享下面两个目录

/data/w   要求的权限可读写,同步数据,所有用户都压缩为匿名用户

/data/r   要求的权限为只读,同步数据,所有用户都压缩为匿名用户

客户端上面要求 :

backup服务器   把NFS服务器的/data/r挂载到backup的/data/r

web01服务器   把NFS服务器的/data/w挂载到web01的/data/w

5.1.2 部署过程

5.1.3 第一个里程碑-卸载并创建目录环境

 1 umount -lf /data 

①    服务端创建

 1 mkdir /data/{r,w} 2 3 chown -R nfsnobody.nfsnobody /data 4 5 ll -d /data/{r,w} 

②    客户端创建(这里无需修改权限)

 1 [root@backup ~]# mkdir -p /data/r 2 3 [root@web01 ~]# mkdir -p /data/w 

5.1.4 第二个里程碑-编辑nfs服务端配置文件

1 [root@nfs01 ~]# vim /etc/exports2 3 #share /data by root at 201710154 5 #/data 172.16.1.0/24(rw,sync)6 7 /data/w 172.16.1.0/24(rw,sync,all_squash)8 9 /data/r 172.16.1.0/24(ro,sync,all_squash)

5.1.5 第三个里程碑-重启nfs

 1 [root@nfs01 ~]# /etc/init.d/nfs reload 

说明:在配置共享目录时,需要考虑到子目录会继承上一级目录的权限,即上一级目录/data若有rw权限,/data/r将仍被继承(ro权限不起作用),因此应尽量让共享目录之间没有继承关系,这里采用注释/data目录方法

5.1.6 第四个里程碑-客户端进行重新挂载

 1 umount -lf /mnt #卸载已挂载目录 2  3 backup 4  5 [root@backup ~]# mount -t nfs 172.16.1.31:/data/r /data/r/ 6 [root@backup ~]# df -h 7 Filesystem   Size Used Avail Use% Mounted on 8 /dev/sda3   8.8G 1.7G 6.7G 20% / 9 tmpfs    238M  0 238M 0% /dev/shm10 /dev/sda1   190M 40M 141M 22% /boot11 172.16.1.31:/data/r 8.8G 1.7G 6.7G 20% /data/r12 13 web0114 15 [root@web01 ~]# mount -t nfs 172.16.1.31:/data/w /data/w/16 [root@web01 ~]# df -h17 Filesystem   Size Used Avail Use% Mounted on18 /dev/sda3   8.8G 1.7G 6.8G 20% /19 tmpfs    238M  0 238M 0% /dev/shm20 /dev/sda1   190M 40M 141M 22% /boot21 172.16.1.31:/data/w 8.8G 1.7G 6.7G 20% /data/w

5.1.7 第五个里程碑-进行测试

①    测试读写功能

1 [root@web01 ~]# cd /data/w2 3 [root@web01 w]# touch test01.txt4 5 [root@web01 w]# ll6 7 total 08 9 -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 15 2017 test01.txt

②    测试只读功能

1 [root@backup ~]# cd /data/r2 3 [root@backup r]# touch test02.txt #创建文件进行测试4 5 touch: cannot touch ` test02.txt': Read-only file system #提示:不能创建文件,该文件为只读文件系统

提示:在任何情况下,服务端重启之后客户端都必须进行重新挂载,否则就出现如下错误

 1 [root@backup r]# ll 2 3 ls: cannot open directory .: Stale file handle 

 

第6章 NFS服务的重点知识梳理

6.1 多个NFS客户端访问服务端的读写文件要具有的权限

01.NFS服务器/etc/exports设置需要开放可写入的权限,即服务端的共享权限

02.NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务端本地目录的安全权限

03.每台机器对应存在和NFS默认配置UID的相同UID 65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器都需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)

只有满足上述三个条件,多个NFS客户端才能具有查看/修改/删除其它任意NFS客户端上传文件的权限,这在大规模的集群环境中作为集群共享存储时尤为重要

6.2 NFS客户端挂载命令格式

挂载命令

挂载的类型格式

指定挂载参数

NFS服务器端提供的共享目录

NFS客户端的挂载点

mount

-t nfs

-o ro

172.16.1.31:/data

/mnt(必须存在)

完整版的挂载命令:mount -t nfs 172.16.1.31:/data /mnt,此命令需在客户端执行

6.2.1 NFS共享目录自动挂载方法

01.将挂载命令放在/etc/rc.local里

偶尔开机挂载不上,工作中除了开机自启动配置,还要对是否挂载做监控

02.将挂载命令放在/etc/fstab里

1 [root@nfs01 data]# chkconfig netfs on2 3 [root@nfs01 data]# chkconfig --list netfs4 5 netfs   0:off  1:off  2:on  3:on  4:on  5:on  6:off

注意:生产环境中一般不将其挂载信息写入fstab中,因为开机启动时,网络连接不上nfs server的话,可能会导致客户端主机无法启动过不了fstab这项,可以将其放到/etc/rc.local中来实现开机自动挂载,但也有可能重启nfs客户端后挂载不成功

6.3 NFS服务的优缺点及应用建议

A.优点:

01.简单,容易上手,容易管理

02.NFS文件系统内数据是在文件系统之上的,即数据是可见的

03.部署快速,维护简单方便且可控,满足需求就是最好的

04.可靠,从软件层面上看,数据可靠性高,经久耐用。数据是在文件系统之上的

05.服务非常稳定

B.局限:

01.存在单点故障,如果NFS Server宕机了,所有客户端都不能访问共享目录,这个在后期会通过负载均衡及高可用方案弥补

02.在大数据高并发的场合,NFS效率、性能有限(2 千万/日以下PV的网站不是瓶颈,除非网站架构设计太差)

03.客户端认证是基于IP 和主机名的,权限要根据ID 识别,无安全认证机制(用于内网则问题不大)

04.NFS数据是明文的,NFS本身不对数据完整性进行验证

05.多台客户机挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其当NFS服务器端出问题后所有NFS客户端都处于挂掉状态测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)。

06.涉及了同步(实时等待)和异步(解耦)的概念,NFS服务器端和客户端相对来说就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是为程序及架构解耦,让网站的扩展性变的更好。

C.应用建议:

对于大中小网站(参考点2000万旧PV以下)线上应用,都有用武之地,门户网站也会有应用,生产场景应该多将数据的访问往前推,即尽量将静态存情里的资源通过CDN 或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:NFS服务

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录