首页 > 其他分享 >NFS快速入门(一):简介、原理

NFS快速入门(一):简介、原理

时间:2023-08-06 20:33:53浏览次数:38  
标签:入门 简介 服务器端 端口 RPC NFS 0.0 客户端

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服务。

标签:入门,简介,服务器端,端口,RPC,NFS,0.0,客户端
From: https://www.cnblogs.com/AndrewNotes/p/17609841.html

相关文章

  • python基础入门模块
    一、os模块os模块提供了许多与操作系统相关的函数,可以让我们在Python程序中轻松地处理文件和目录、环境变量等等。下面是os模块中常用的方法:os.getcwd()这个函数用于获取当前工作目录,即当前Python脚本工作的目录路径。os.chdir(path)这个函数用于改变当前工作目录到指定的......
  • ceph-nfs
    一.ceph-nfs1.cephfs1.1配置启动cephfscephnfs基于cephfs,需要先配置cephfscephosdpoolcreatecephfs-metadata1616cephosdpoolcreatecephfs-data3232cephfsnewcephfscephfs-metadatacephfs-datacephorchapplymdscephfs--placement="3storag......
  • JavaWeb之Servlet入门版教务系统(二)
    本次要分享的内容是之前教务系统中系统管理模块下的角色列表功能,包括对角色信息进行增删改查以及对当前的用户进行角色的分配(重点讲解)。首先还是需要使用mysql数据库准备一张角色表,建表语句如下:DROPTABLEIFEXISTS`sys_role`;CREATETABLE`sys_role`(`role_id`int(11)NO......
  • 快速入门OpenCv(python版)
    OpenCV是一个(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。在学习过程中遇到问题最好的办法就是......
  • Java入门
    java类 类里面存在变量和方法变量又称为“属性”,主要有类变量,实例变量,局部变量 实例变量实例变量在类里面(不在方法里面),不可以直接使用,要在方法里面调用输出!格式为:变量类型(当前类名)变量名称(随便)=new变量类型();System.out.println(变量类型.属性);如:Demo08zmz=ne......
  • 【JavaScript01】简介与声明变量
    前言JavaScript是Web的编程语言。所有现代的HTML页面都使用JavaScript。JavaScript简介JavaScript的学习分三个部分:1、核心(ECMAScript):JavaScript的核心,描述了语言的基本语法和数据类型。ECMAScript是一套标准,定义了一种语言的标准与具体实现无关。2、文档......
  • Git实战指南:从入门到实战手把手教你玩转Git
    一、基本操作1.使用命令设置用户名:gitconfig--globaluser.name"你的用户名"2.使用命令设置邮箱:gitconfig--globaluser.email"你的邮箱"2-1.查看一下配置的【用户名】和【邮箱】,以防配置错误:3.使用命令生成SSHKey:ssh-keygen-trsa-C'你的邮箱'(这样代表以及生成成功了)4.......
  • Caddy 入门实战(1)--简介及安装
    Caddy是一款基于Go语言编写的强大且可扩展的平台,可以给你的站点、服务和应用程序提供服务。本文主要内容为Caddy的简介及安装,文中所使用到的软件版本:Caddy2.6.4、CentOS 7.9.2009。1、简介大多数人将Caddy用作Web服务器或代理,但Caddy的本质是诸多服务器的服务器。......
  • Git实战指南:从入门到实战手把手教你玩转Git
    一、基本操作1.使用命令设置用户名:gitconfig--globaluser.name"你的用户名"2.使用命令设置邮箱:gitconfig--globaluser.email"你的邮箱"2-1.查看一下配置的【用户名】和【邮箱】,以防配置错误:3.使用命令生成SSHKey:ssh-keygen-trsa-C'你的邮箱'(这样代......
  • Cilium系列-14-Cilium NetworkPolicy 简介
    系列文章Cilium系列文章前言今天我们进入Cilium安全相关主题,介绍Kubernetes网络策略以及CiliumNetworkPolicies额外支持的内容。网络策略(NetworkPolicy)的类型默认情况下,Kubernetes集群中的所有pod都可被其他pod和网络端点访问。网络策略允许用户定义Kuber......