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