NFS网络文件共享服务

NFS网络文件共享服务

1.1 NFS介绍

1)什么是NFS?

  • NFS是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
  • NFS网络文件系统很像Windows系统的网络共享,安全功能,网络驱动器影射,这也和Linux系统里的samba服务类似。只不过一般情况下,Windows网络共享服务或samba服务用于办公局域网共享,而互联网中小型网站集群架构后端常用NFS进行数据共享。

2)NFS在企业中的应用场景

  • 在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享里,例如:BBS产品的图片,附件,头像(注意网站BBS程序不要放NFS共享里),然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资源。NFS是当前互联网系统架构中最常用的数据存储服务之一,前面说过,中小型网站公司应用频率更高,大公司或门户除了使用NFS外,还可能会使用更为复杂的分布式文件系统,比如Moosefs(mfs),GlusterFS,FastDFS等
  • 动态数据:文字 存放动态数据的叫数据库

  • 静态数据:图片、视频、音频 存放静态数据的叫存储

NFS就是一个网络存储服务,类似于用于存储静态服务

第一次架构启蒙

如果你要去构成一个公司,我最低要几个模块可以构成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKZpumx7-1661608907580)(…/…/图片/image-20220729011111997.png)]

左边是公网 中间是外网 右边是美网

用户能到达的地方都是外网,用户不能到达的地方都是内网

内网里边必然有的是数据库、存储、缓存服务器(缓存服务器看公司)

  • 在企业生产集群架构中,NFS作为所有前端Web服务的共享存储,存储的内容一般包括网站用户上传的图片,附件,头像等,注意,网站的程序代码不要放NFS共享里,因为网站程序是开发运维人员统一发布的,不存在发布延迟问题,直接批量发布到Web节点提供访问比共享到NFS里访问效率更高。

3)企业生产集群为什么需要共享存储角色。

  • 这里通过图解给大家展示以下集群架构需要共享存储服务的理由。例如:A用户上传图片到Web1服务器,然后让B用户访问这张图片,结果B用户访问的请求分发到了Web2,因为Web2上没有这张图片,这就导致它无法看到A用户上传的图片,如果此时有一个共享存储,A用户上传图片的请求无论是分发到Web1还是Web2上,最终都会存储到共享存储上,而在B用户访问图片时,无论请求分发到Web1还是Web2上,最终也都会去共享存储上找,这样就可以访问到需要的资源了。这个共享存储的位置可以通过开源软件和商业硬件实现,互联网中小型集群架构会用普通PC服务器配置NFS网络文件系统实现。
  • 当及集群中没有NFS共享存储时,用户访问图片的情况如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQ7hYgGC-1661608907580)(…/…/图片/image-20220729043831021.png)]

上图是企业生产集群没有NFS共享存储访问的示意图。下图是企业生产集群有NFS共享存储的情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ONAxFO37-1661608907580)(…/…/图片/image-20220729043908241.png)]

  • 中小型互联网企业一般不会买硬件存储,因为太贵,大公司如果业务发展很快的话,可能会临时买硬件存储顶一下网站压力,当网站并发继续加大时,硬件存储的扩展相对就会很费劲,且价格成几何级数增加。例如:淘宝网就曾替换掉了很多硬件设备,比如,用lvs+haproxy替换了netscaler负载均衡设备,用FastDFS,TFS配合PC服务器替换了netapp,emc等商业存储设备,去IOE正在成为互联网公司的主流。

1.2 NFS系统原理介绍

1.2.1 NFS系统挂载结构图解与介绍

下图是企业工作中的NFS服务器与客户端挂载情况结构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FaLtkU8w-1661608907581)(…/…/图片/image-20220729044209516.png)]

  • 可以看到NFS服务器端/video共享目录挂载到了两台NFS客户端上。在客户端查看时,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NFS客户端操作挂载/v/video或者/video的目录,就可以将数据轻松地存取到NFS服务器端上的/video目录中了。

RPC注册服务,服务发现

1.2.2 什么是RPC(Remote Procedure Call)
  • 因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输之用,其中CentOS5.x的随机端口都小于1024,而CentOS6.x的随机端口都是较大的。
  • 因为端口不固定,这样一来就会造成NFS客户端与NFS服务端的通信障碍,因为NFS客户端必须要知道NFS服务端的数据传输端口才能进行通信,才能交互数据。
  • 要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙了,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。这个RPC服务类似NFS服务端和NFS客户端之间的一个中介。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GCmd1G4D-1661608907581)(…/…/图片/image-20220729050544663.png)]

固定的点:port111端口

  • 就拿房屋中介打个比喻吧:假设我们要找房子,这里的我们就相当于NFS客户端,中介介绍房子,中介就相当于RPC服务,房子所有者房东就相当于NFS服务,租房的人找房子,就要找中介,中介要预先存有房子主人房东的信息,才能将房源信息告诉租房的人。
  • 那么RPC服务又是如何知道每个NFS的端口呢?
  • 这是因为,当NFS服务端启动服务时会随机取用若干端口,并主动向RPC服务注册取用的相关端口及功能信息,如此一来,RPC服务就知道NFS每个端口对应的NFS功能了,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端,这样一来,NFS客户端就可以与NFS服务端进行数据传输了。
  • 在启动NFS SERVER之前,首先要启动RPC服务(CentOS5.x下为portmap服务,CentOS6.x下为rpcbind服务,下同),否则NFS SERVER就无法向RPC服务注册了。另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。要特别注意的是,一般修改NFS配置文件后,是不需要重启NFS的,直接在命令行执行/etc/init.d/nfs reload或exportfs -rv即可使修改的/etc/exports生效。
1.2.3 NFS的工作流程原理
  • 最后三次握手时客户端和服务端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JgrcLTCq-1661608907581)(…/…/图片/image-20220729051212277.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gwo6zfNQ-1661608907582)(…/…/图片/image-20220729051221318.png)]

当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程大致如下:

1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。

2)NFS服务端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)

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

4)NFS客户端把数据存取成功后,返回给前端访问程序,告知给用户存取结果,作为网站用户,就完成了一次存取操作。

因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务(rpcbind服务)才能获取到NFS服务的各项功能对应的端口号(port number),PID,NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务(rpcbind服务)询问才能找到正确的端口。也就是说,NFS需要有RPC服务(rpcbind服务)的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务(rpcbind服务),NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。

注意
NFS的RPC服务,在CentOS5.X下名称为portmap,在CentOS6.x下名称为rpcbind

首先开两台服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mOmpziVC-1661608907582)(…/…/图片/image-20220729052021866.png)]

然后键盘同步安装yum

[root@ning ~]# sh yum.sh 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CLvGlESi-1661608907582)(…/…/图片/image-20220729052613092.png)]

然后同时安装[root@ning ~]# yum -y install nfs-utils

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pK2WX2Jp-1661608907583)(…/…/图片/image-20220729052855049.png)]

安装完后就可以关闭键盘同步

只需要给下rpcbind

[root@ning ~]# yum -y install rpcbind

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPrcBGtR-1661608907583)(…/…/图片/image-20220729053256352.png)]

这里显示已经安装了,我们启动一下rpcbind

[root@ning ~]# /etc/init.d/rpcbind start
Starting rpcbind:                                          [  OK  ]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XbVdF95Y-1661608907583)(…/…/图片/image-20220729053530078.png)]

rpcinfo查看所有信息

[root@ning ~]# rpcinfo

所有暴露的都是111端口号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YI2BaqZZ-1661608907584)(…/…/图片/image-20220729053653548.png)]

然后再启动nfs

[root@ning ~]# /etc/init.d/nfs start #启动nfs服务
    启动 NFS 服务:                                            [确定]
    关掉 NFS 配额:                                            [确定]
    启动 NFS mountd:                                         [确定]
    启动 NFS 守护进程:                                         [确定]
    Starting RPC idmapd:                                     [  OK  ]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGBb2FVd-1661608907584)(…/…/图片/image-20220729054111332.png)]

特别提示
如果不启动rpcbind服务直接启动nfs服务的会启动时失败。

这个时候nfs已经构建成功了,成功之后你要分享哪一个目录,所以要创建一个目录

[root@ning ~]# mkdir /backup

1.5 实战配置NFS服务端

1.5.1 NFS服务端配置文件路径

NFS服务的默认配置文件路径为:/etc/exports,并且默认是空的。

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

#####    编辑如下    #####
/backup 192.168.200.0/24(rw,sync)
#表示/backup目录可以被192.168.200这个网段所有人去连接,rw是表示有读写权限,sync表示要立即进行同步

里 看一下192.168.200.142有没有分享出来目录,不写ip默认是看本地

[root@ning ~]# showmount -e 192.168.200.142
Export list for 192.168.200.142:
/backup 192.168.200.0/24

里 面创面一个test目录 然后将192.168.200.142:/backup挂载到test目录下

[root@ning ~]# mkdir test

[root@ning ~]# mount 192.168.200.142:/backup test/

然后将192.168.200.142:/backup挂载到test目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uue9nSW7-1661608907584)(…/…/图片/image-20220729081453972.png)]

这个时候如果我们往test里写文件相当于写到了nfs里

[root@ning ~]# touch test/smz

创建test目录下的smz报错了,Permission denied

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pNp6gsfr-1661608907584)(…/…/图片/image-20220731173309377.png)]

nfs01和nfs02不是用一个服务器,02要往01写,01里面创建了一个backup目录,02创建了一个test目录。实际上我往test里面写等同于我写到了backup目录上面。中间这个过程由nfs服务来写。用的是nfs程序用户,nfs程序用户默认是nfsnobody。也就是说你nfsnobody往root写肯定是权限拒绝。

backup得属主是root nfs程序是nfsnobody

权限拒绝我们需要将   主    的/backup/降权

[root@ning ~]# chown -R nfsnobody /backup/

降权后我们会看见它属主属组都是nfsnobody

这时候我们再去创建就不会报错了

[root@ning ~]# touch test/smz

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ev0nGQ2F-1661608907584)(…/…/图片/image-20220731173859514.png)]

我们再用创建一个123文件 注意:这里 一定要在backup目录下

[root@ning backup]# touch 123

ls看test目录也能有这个123文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5CG7skG-1661608907584)(…/…/图片/image-20220731185455092.png)]

然后我们再去用02服务器vim编辑123这个文件

[root@ning test]# vim 123 

编辑的时候这了显示是只读模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eVJmRlLe-1661608907584)(…/…/图片/image-20220731211501167-16592733014711.png)]

这里我们需要给 进行降权,因为当时是root创建的

[root@ning test]# chown -R nfsnobody:nfsnobody /backup/

将01属主和属组降权成nfsnobody 02就可以编辑了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHtkfq7y-1661608907585)(…/…/图片/image-20220731220901058.png)]

exports配置文件相关参数应用领域的详细解释 (NFS精华重点)

1)(rw,sync) :可读可写,同步传输
2)(ro,async):只读,异步传输。

详细说明
rw或者ro,主要控制的是所有客户端用户(包含root)的读写权限。如果设置成ro,就算root也只有读权限。它是NFS权限设置的第一道总闸阀门。
sync:同步传输,实时进行。
async:异步传输:攒一会在传输。

3)root_squash:将root账户在共享目录里的身份降低为匿名者(默认nfsnobody)身份
4)no_root_squash:不降低root账户在共享目录的身份,身份还是root
5)all_squash:将所有访问用户在共享目录里的身份都降低为匿名者(默认nfsnobody)身份

6)anonuid和anongid:指定NFS虚拟账户的uid或gid

自动挂载,这里没有设置完 一定要在上去写

[root@ning test]# vim /etc/fstab
##############编辑如下####################
192.168.200.142:/backup /root/test              nfs     defaults        0 0

[root@ning test]# reboot

这里显示没有开机自动挂载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k3byC4Ln-1661608907585)(…/…/图片/image-20220801002356222.png)]

我们手动挂载

[root@ning ~]# mount 192.168.200.142:/backup /root/test/

挂载上 然后可以正常使用了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eplr3OWW-1661608907585)(…/…/图片/image-20220801003006601.png)]

自动挂载的两种方法 注意一定要是 上去写

第一种方法:启动netfs

第一步先去vim改一下etc下的fstab,在最后一行加上192.168.200.142:/backup /root/test nfs defaults 0 0

第二步然后启动netfs就可以了

第三步重启服务器

[root@ning ~]# vim /etc/fstab
192.168.200.142:/backup /root/test              nfs     defaults        0 0
[root@ning ~]# chkconfig netfs on
[root@ning ~]# reboot
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值