NFS快速入门(一):简介、原理
NFS网络文件共享存储
什么是NFS
NFS 是 Network File System 的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同主机系统之间可以共享文件或目录。NFS 客户端(一般为web服务器)可以通过挂载(mount)方式将 NFS 服务器端共享的数据目录挂载到客户端某一个挂载点下。从本地客户端来看,NFS 服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的 NFS 服务器的目录。
NFS和Windows网络共享、网络驱动器、linux的samba服务类似,只不过windows网络共享服务和samba多用于办公局域网, NFS多用于中小型网站架构数据共享。 如果是大型网站,除了用NFS外,还会用到更复杂的分布式文件系统,如FastDFS,glusterfs等。阿里云的NAS就是云化后的NFS服务。
企业应用场景:
企业集群架构的工作场景中,NFS 网络文件系统一般被用来存储共享视频、图片附件等静态资源文件,通常网站用户上传的文件都会放到 NFS 共享里,如 BBS 产品的图片、附件,头像等,然后前端所有的节点访问这些静态资源时都会读取 NFS 存储上的资源。注意网站代码是直接批量发布到web节点的,由开发运维人员统一发布,不存在延迟问题,不需要放NFS。
why NFS?
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
如果没有共享存储:
1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
(负载均衡:分摊请求。比如第一张给web1,再来一张给web2,再来一张给web3)
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。

有的话大家都能看到了:

中小型互联网企业一般不会买硬件存储,因为大费,大公司如果业务发展很快的话,可能会临时买硬件存储分散一下网站的压力,当网站并发继续加大时,硬件存储的扩展相对就会很费劲,且价格成几何级数增加。例如:淘宝网就曾替换掉了很多硬件设备、比如,用Lvs+Haproxy 替换了 NetScaler 负载均衡设备,用 FastDFS、TFS 配合 PC服务器替换了Netapp、EMC 等商业存储设备,去IOE 正在成为互联网公司的主流。
NFS原理介绍
我们知道,NFS通过网络进行数据传输。因此,NFS会使用一些端口来传输数据,那么,NFS到底使用哪些端口呢?通过重启NFS(如何启停NFS下节实践会讲)测试可知,NFS会随机启动很多端口。
[root@nfs ~]# netstat -lntup|grep rpc
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 6752/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 6789/rpc.mountd
tcp 0 0 0.0.0.0:40868 0.0.0.0:* LISTEN 6746/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 6752/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 6789/rpc.mountd
tcp6 0 0 :::49786 :::* LISTEN 6746/rpc.statd
udp 0 0 127.0.0.1:986 0.0.0.0:* 6746/rpc.statd
udp 0 0 0.0.0.0:987 0.0.0.0:* 6752/rpcbind
udp 0 0 0.0.0.0:20048 0.0.0.0:* 6789/rpc.mountd
...
也就是说,NFS在传输数据时使用的端口会随机选择。既然这样,NFS 客户端是怎么知道 NFS 服务器端使用的是哪个端口的呢?答案就是通过 RPC (Remote Procedure Call,中文意思远程过程调用)服务/协议来实现。
什么是RPC
因为 NFS 支持的功能相当多,而不同的功能会使用不同的程序来启动,每启动个功能就会启用一些端口来传输数据,因此,NFS 的功能所对应的端口无法固定,它会随机取用一些未被使用的端口作为传输之用,其中 Centos5.x 的随机端口都小于 1024,而 Centos7.6 的随机端口都是比较大的。
因为端口不固定,这样一来就会造成 NFS 客户端与 NFS 服务器端的通信障碍,因为 NFS 客户端必须要知道 NFS 服务器端的数据传输端口才能进行通信,才能交互数据。要解决这个问题,就要RPC出马了。
NFS 的 RPC服务最主要的功能就是记录每个 NFS 功能所对应的端口号,并且在 NFS 客户端发出请求时将该端口和功能对应的信息传递给请求数据的 NFS 客户端,从而确保客户端可以连接到正确的 NFS 端口上去,达到实现数据传输、交互数据目的。这个RPC服务类似 NFS服务器端和 NFS 客户端之间的一个中介,NFS 工作流程如下图所示。

那么RPC又是如何知道每个NFS端口号呢?
当 NFS 服务器端启动服务时会随机取用若干端口,并主动向 RPC 服务注册取用的相关端口及功能信息,如此一来,RPC 服务就知道 NFS 每个端口对应的 NFS 功能了。然后 RPC 服务使用固定 111端口来监听 NFS 客户端提交的请求,并将正确的 NFS 端口信息回复给请求的 NFS 客户端,这样一来,NFS 客户端就可以与 NFS 服务器端进行数据传输了。
因此,在启动 NFS Server 之前,首先要启动 RPC 服务(Centos6/7 环境下为rpcbind 服务),否则 NFS Server 就无法向 RPC 服务注册了。另外,如果 RPC 服务重新启动,原来已经注册好的 NFS 端口数据就会丟失,因此,此时 RPC 服务管理的 NFS 程序也需要重新启动以重新向 RPC 注册。要特别注意,修改 NFS 配置文件后是不需要重启 NFS 的,
直接在命令行执行 systemctl reload nfs 或 exportfs-r 即可使修改的/etc/exports 生效。
总之,NFS客户端向服务端存取文件时,数据流程大致如下图:

由上面流程可知,NFS客户端和服务端都需要先启动RPC服务,NFS服务必须在RPC启动后启动,客户端无需启动NFS服务,但需要RPC服务。
NFS快速入门(一):简介、原理的更多相关文章
- Spring框架快速入门之简介
Spring是java平台上的一个开源应用框架.它的第一个版本是由Rod Johnson写出来的.Rod在他的Expert One-On- One Java EE Design and Develop ...
- Redis快速入门之简介
一.Redis是什么? Redis 是一个开源(BSD许可)基于内存数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如字符串(strings), 散列(hashes) ...
- javascript快速入门22--Ajax简介
Ajax是什么? 首先,Ajax是什么?一个很酷的新兴词汇!仅仅是某种早就有了的技术的一种新说法而已! Ajax是指一种创建交互式网页应用的网页开发技术.要谈到网页应用程序,则必须从WEB的历史来讲: ...
- Kotlin新语言简介和快速入门知识点
Kotlin新语言简介和快速入门知识点 简介:Kotlin是最近由JetBrains发布的一种基于JVM的编程语言,已经被Google宣布为开发Android App的一级语言Kotlin有着与Jav ...
- Windows下FFmpeg快速入门
本系列文章导航 Windows下FFmpeg快速入门 ffmpeg参数解释 mencoder和ffmpeg参数详解(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进行视 ...
- SpringMVC 快速入门
SpringMVC 快速入门 SpringMVC 简介 SpringMVC是 Spring为展示层提供的基于Web MVC设计模式的请求驱动类型的轻量级Web框架,它的功能和Struts2一样.但比S ...
- 【HBase】简介、结构、数据模型、快速入门部署、shell操作、架构原理、读写数据流程、数据刷写、压缩、分割、Phoenix、表的映射、与hive集成、优化
一.简介 1.定义 分布式.可扩展.支持海量数据存储的NoSQL数据库 2.数据模型 2.1逻辑结构 2.2物理存储结构 2.3数据模型介绍 Name Space:相当于数据库,包含很多张表 Regi ...
- 其他主流开源硬件简介BeagleBone Black快速入门
其他主流开源硬件简介BeagleBone Black快速入门 1.3 其他主流开源硬件简介 开源硬件种类繁多,但主要有两款开源硬件常与BeagleBone比较.它们就是Arduino和Raspberr ...
- html5快速入门(二)—— CSS简介
前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...
- html5快速入门(一)—— html简介
前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...
随机推荐
- 【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究
作者:京东科技 王长春 业务问题 小编工作中负责业务的一个服务端系统,使用了 Elasticsearch 服务做数据存储,业务运营人员反馈,用户在使用该产品时发现,用户后台统计的订单笔数和导出的订单笔 ...
- Prism Sample 19-NavigationParticipation
Navigation Participation,不知翻译方法,意思是对导航过程的参与,触发事件,类似离开导航目标和进入导航的回调 在VM中,增加一个接口 ,然后实现导航事件 public class ...
- 自创简易CSS Tab 选项卡
前段时间我注册了 w3c.run域名,打算做一个W3C相关技术在线试验工具.没错,就是在线编写html.css.js代码然后在线运行,查看效果. 在设计首页时,我打算首页提供三个代码编辑器,介于界面大 ...
- django @login_required
Django在做后台系统过程中,我们通常都会为view函数添加 @login_required 装饰器,这个装饰器的主要作用就是在用户访问这个方法时,检查用户是否已经成功登陆,如果没有则重定向到登陆页 ...
- ERRORS: app1.Book.photo: (fields.E210) Cannot use ImageField because Pillow is not installed.
报错: (env) E:\pyAPP\mybook>python manage.py makemigrations SystemCheckError: System check identifi ...
- ET介绍—— 一切皆实体的设计
一切皆实体 目前十分流行ECS设计,主要是守望先锋的成功,引爆了这种技术.守望先锋采用了状态帧这种网络技术,客户端会进行预测,预测不准需要进行回滚,由于组件式的设计,回滚可以只回滚某些组件即可.ECS ...
- SpringBoot 使用 Sa-Token 完成路由拦截鉴权
一.需求分析 在前文,我们详细的讲述了在 Sa-Token 如何使用注解进行权限认证,注解鉴权虽然方便,却并不适合所有鉴权场景. 假设有如下需求:项目中所有接口均需要登录认证校验,只有 "登 ...
- 封装vue基于element的select多选时启用鼠标悬停折叠文字以tooltip显示具体所选值
相信很多公司的前端开发人员都会选择使用vue+element-ui的形式来开发公司的管理后台系统,基于element-ui很丰富的组件生态,我们可以很快速的开发管理后台系统的页面(管理后台系统的页面也 ...
- R 包初学者指南
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 基于 11 个最常见的用户问题介绍 R 软件包. R 包是由社区开发 (developed b ...
- 看看Angular有啥新玩法!手把手教你在Angular15中集成报表插件
摘要:本文由葡萄城技术团队于博客园原创并首发.葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Angular15新特性 Angular框架(以下简称"Angular" ...