NFS网络文件系统原理及案例

从现在开始我决定把我所学的知识以博客的形式分享给大家,希望对和我一样的菜鸟,同时梦想成为一只老鸟的IT小伙伴有一定的帮助!而对于我而言,这本身也是一种学习呢!好了废话不多说,我们开始进入主题;
我们人在接触一个新事物或者是一个新技一个新技术的时候,我们往往想到的第一个问题就是“这是什么呀?”或者“这是干什么的呀?”
那么NFS网络文件系统到底是一个什么东西,它的作用又是什么,我们在这里围绕这两个问题进行讨论;

1、什么是NFS

NFS是Network File System的缩写中文名网络文件系统,它的主要功能就是通过网络让不同的机器系统之间可以彼此共享文件或目录,NFS客户端可以通过挂载(mount)的方式将NFS服务器共享的目录挂载到本地,在NFS客户端看来就像是访问自己本地的目录或分区一样;
下面是我在网上找的NFS挂载流程图; -- 如图,NFS客户端共享自身/home/sharefile这个目录,客户端1和客户端2将NFS服务器共享的目录/home/sharefile挂载到本机 ---在这里我们可以理解成Windows7里边的共享目录,然后通过网络映射的方式映射到本地
NFS网络文件系统原理及案例

2、NFS的用作

NFS的作用是用来存放数据的,一般来说他的客户端就是应用服务器如web,NFS在工作场景中一般用来存储静态文件(如图片,视频,附件等)是当前互联网最长见的数据存
那么在实际架构中如果没有NFS服务器到底行不行呢?我们在这里简单的举一个例子与大家分享,以此来突出NFS服务的作用;
NFS网络文件系统原理及案例
这是我用思科模拟器简单的画的一个图,方便大家理解;
如图:我们先假设这就是腾讯qq的服务器,当小明在客户端A通过qq空间发布了一条带图片的说说,这时候会通过路由器把这条说说交给负载均衡调度器,调度器通过自身的一个算法,分配一台服务器来响应这个请求,假设把这个请求分配到了服务器A,那么这时候这条说说的图片也就存在了WEB服务A里边,
这时候小明和小红正好是qq好友,小红这时候通过客户端B要去访小明发的说说,咦!很奇怪,访问不到,怎么回事呢?原来这次调度在分配请求的时候将小红的请求分配给了WEB服务B,所以访问不到,那这时候如果WEB服务器A和WEB服务器B将NFS服务器共享的目录都挂载到本地,那么这时候小明在上传图片的时候,不管调度器把请求分配到哪一台WEB服务器,这时候WEB服务器都会把这张图片上传到NFS服务器;所以这时候小红在去访问这条说说的时候就可以顺利的看到图片啦!!!!
在了解完什么是NFS服务和NFS的作用之后,我们总得知道NFS客户端与NFS服务端是怎么建立连接,进行通信的吧!在这里也做一个简单描述;
NFS网络文件系统原理及案例
为了节约点时间我就在word上简单的画了一个图,方便大家理解记忆;
在理解通信流程之前我们首先要知道,NFS的端口号是不固定的,每次连接都会随机的分配一个小于1024的端口
首先服务端在开启NFS服务的时候会将自己的端口和其他信息注册到RPC服务里边,然后客户端的RPC(默认端口号:111)服务会通过TCP/IP协议向客户端发起请求,说我要连接到NFS服务器,请给我端口号,这时候服务器收到请求后,服务端的RPC服务就会通过TCP/IP协议把已经注册好的NFS端口信息发送给客户端的RPC服务,客户端收到端口信息后直接与NFS进行连接;在这里我们可以吧RPC服务理解成一个中介,当客户端需什么商品的时候就会想RPC索取,NFS就像是厂家,把自己所有的商品信息都注册给RPC服务;
最后我们来看看NFS是如何实现的吧!这里通过案例的形式与大家分享;重点注意配置的细节!!!!
server端配置:
[root@server 桌面]# cat /etc/redhat-release------------------>查看系统版本
CentOS release 6.5 (Final)
[root@server 桌面]# uname -r---------------------->查看内核
2.6.32-431.el6.x86_64
[root@server 桌面]# uname -m ---------------查看是多少位的系统
x86_64

[root@server 桌面]# rpm -qa | egrep "rpcbind|nfs"------------>查看系统有没有安装rpcbind和nfs软件(如果没有 可以用 yum install rpcbind nfs -y进行安装)这里我们可以看到已经安装
nfs-utils-1.2.3-39.el6.x86_64
nfs4-acl-tools-0.3.3-6.el6.x86_64
nfs-utils-lib-1.1.5-6.el6.x86_64
rpcbind-0.2.0-11.el6.x86_64
[root@server 桌面]# /etc/init.d/rpcbind status-------->查看RPC是否已经运行
rpcbind (pid 1576) 正在运行...
[root@server 桌面]# /etc/init.d/nfs status--------查看NFS是否已经运行
rpc.svcgssd 已停
rpc.mountd 已停
nfsd 已停
rpc.rquotad 已停
在这里我们要注意rpc和NFS的一个启动顺序,必须要在确保RPC启动的情况下才可启动nfs,因为nfs在启动的时候要向RPC服务进行注册自己端口信息;
[root@server 桌面]# /etc/init.d/nfs start----------------启动NFS服务
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
[root@server 桌面]# rpcinfo -p localhost--------------------->我们可以使用rpcinfo查看nfs注册的信息
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 59901 status
100024 1 tcp 54732 status
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
[root@server 桌面]# vim /etc/exports----------->编辑配置文件,我们可以看到打开什么都没有;
格式:共享的目录 共享客户端的网段(参数)
/mnt/test 172.20.10.0/24(rw,sync)---->注意没有空格,括号内是英文的逗号
[root@server 桌面]# chown nfsnobody:nfsnobody /mnt/test/ -----> 把文件的属主改成nfsnobody,因为NFS系统默认使用这个用户进行上传文件
[root@server 桌面]# /etc/init.d/nfs reload---------->使用reload让配置文件生效,平滑重启
[root@server 桌面]# showmount -e 172.20.10.13-------->可以使用showmount 进行查看共享了哪些目录
Export list for 172.20.10.13:
/mnt/test 172.20.10.0/24
客户端配置;
[root@client 桌面]# rpm -qa|grep rpcbind---->查看RPC安装情况如没有也可用yum install rpcbind -y 安装
rpcbind-0.2.0-11.el6.x86_64
[root@client 桌面]# /etc/init.d/rpcbind status---查看运行状态(客户端只需要开启RPC服务,如果没有看起用/etc/init.d/rpcbind start开启服务)
rpcbind (pid 1646) 正在运行..
[root@client 桌面]# mount -t nfs 172.20.10.13:/mnt/test /test --->用mount将服务器共享的目录挂载到本地挂载完成之后可以用df -h进行查看挂载情况
这时候我们可以在客户端的、/test目录里边创建一个文件touch aa 然后到服务端里的/mnt/test用ls -l 查看发现同样也会存在一个文件aa这时候我们的nfs文件系统就配置完成了
更多关于NFS的一些配置参数可以使用man nfs 寻求在线帮助;

猜你喜欢

转载自blog.51cto.com/13268236/2115246
今日推荐