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快速入门(一):简介、原理的更多相关文章

  1. Spring框架快速入门之简介

    Spring是java平台上的一个开源应用框架.它的第一个版本是由Rod Johnson写出来的.Rod在他的Expert One-On- One Java EE Design and Develop ...

  2. Redis快速入门之简介

    一.Redis是什么? Redis 是一个开源(BSD许可)基于内存数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如字符串(strings), 散列(hashes) ...

  3. javascript快速入门22--Ajax简介

    Ajax是什么? 首先,Ajax是什么?一个很酷的新兴词汇!仅仅是某种早就有了的技术的一种新说法而已! Ajax是指一种创建交互式网页应用的网页开发技术.要谈到网页应用程序,则必须从WEB的历史来讲: ...

  4. Kotlin新语言简介和快速入门知识点

    Kotlin新语言简介和快速入门知识点 简介:Kotlin是最近由JetBrains发布的一种基于JVM的编程语言,已经被Google宣布为开发Android App的一级语言Kotlin有着与Jav ...

  5. Windows下FFmpeg快速入门

    本系列文章导航 Windows下FFmpeg快速入门 ffmpeg参数解释 mencoder和ffmpeg参数详解(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进行视 ...

  6. SpringMVC 快速入门

    SpringMVC 快速入门 SpringMVC 简介 SpringMVC是 Spring为展示层提供的基于Web MVC设计模式的请求驱动类型的轻量级Web框架,它的功能和Struts2一样.但比S ...

  7. 【HBase】简介、结构、数据模型、快速入门部署、shell操作、架构原理、读写数据流程、数据刷写、压缩、分割、Phoenix、表的映射、与hive集成、优化

    一.简介 1.定义 分布式.可扩展.支持海量数据存储的NoSQL数据库 2.数据模型 2.1逻辑结构 2.2物理存储结构 2.3数据模型介绍 Name Space:相当于数据库,包含很多张表 Regi ...

  8. 其他主流开源硬件简介BeagleBone Black快速入门

    其他主流开源硬件简介BeagleBone Black快速入门 1.3 其他主流开源硬件简介 开源硬件种类繁多,但主要有两款开源硬件常与BeagleBone比较.它们就是Arduino和Raspberr ...

  9. html5快速入门(二)—— CSS简介

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  10. html5快速入门(一)—— html简介

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

随机推荐

  1. Visual Basic 6 API压缩数据

    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As ...

  2. autojs系列-js入门1

    开头 确保 Autojs 和 adb 还有模拟器安装调试完成之后,就可以进行js的学习了 调试安装一部分步骤可以参考 https://www.cnblogs.com/c-keke/p/14919615 ...

  3. 2022-01-10:路径交叉。给你一个整数数组 distance 。 从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南

    2022-01-10:路径交叉.给你一个整数数组 distance . 从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南 ...

  4. Go开源世界主流成熟ORM框架gorm实践分享

    @ 目录 概述 定义 核心功能 声明模型与约定 gorm.Model 字段级权限 时间惯例 嵌入结构 字段标签 使用 安装 数据库链接 连接池 CRUD 接口 创建 查询 高级查询 修改 删除 原始S ...

  5. 洛谷 - P1030 求先序

    Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,且二叉树的节点个数 ≤8≤8). Input 共两行,均为大写字母组成的字符串,表示一棵二叉 ...

  6. 基于.NetCore+React单点登录系统

    对于有多个应用系统的企业来说,每一个应用系统都有自己的用户体系,这就造成用户在切换不同应用系统时,就要多次输入账号密码,导致体验非常不好,也造成使用上非常不便. 针对这个问题,我们就可以采用单点登录的 ...

  7. SQL基础知识扫盲

    @ 目录 SQL & 数据库基础知识扫盲 SQL是什么? 数据库是什么? 挺身入局,实践出真知 DBMS初体验 MySQL:初体验 Oracle:初体验 PostgreSQL:初体验 Demo ...

  8. Clumpify:能使 Fastq 压缩文件再缩小 30% 并加速后续分析流程

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. Clumpify 是 BBMap 工具包中的一个组件,它与其他工具略有不同的是 Clumpif ...

  9. BGP 反射器;BGP联盟

    目录 BGP反射器 实验拓扑 实验需求 实验步骤 在R2上查看BGP邻居表 在R2上做反射器 在R3上查看1.1.1.1 路由表,进行观察 在R3上查看1.1.1.1 路由详细信息 BGP联盟实验 实 ...

  10. NFS远程挂载

    NFS远程挂载 一.概述 NFS是一种基于TCP/IP 传输的网络文件系统协议.通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源 NAS存储: NFS服务的实现依赖于RPC ...