分布式文件系统-NFS

NFS

1. NFS工作原理

Linux中的网络文件系统NFS (Network File System)是一种分布式文件系统协议,它允许用户在网络上远程访问和操作文件,就好像这些文件存储在本地计算机上一样。NFS最初由Sun Microsystems在1980年代开发,现在已成为UNIX和Linux操作系统中普遍支持的标准组件。以下是NFS工作原理的基本概述:

1. NFS架构

NFS遵循客户端-服务器模型,其中:

  • 服务器:存储实际文件的系统,并通过NFS服务向网络上的其他计算机提供这些文件的访问权限。
  • 客户端:想要访问服务器上文件的系统。客户端通过网络使用NFS协议将远程文件系统挂载为本地文件系统,从而实现对文件的操作。

2. NFS协议

NFS使用远程过程调用(RPC)来通信。RPC允许程序调用另一台计算机上的程序,就像调用本地程序一样。NFS主要使用两个RPC程序:一个用于挂载请求,另一个用于实际的文件系统操作(如打开、读取、写入、关闭文件等)。

3. 工作流程

  1. 启动NFS服务:首先,NFS服务器需要配置并启动NFS服务,包括设置哪些文件系统可以被NFS客户端访问,以及定义访问控制(如哪些客户端有权访问,可执行的操作等)。

  2. 挂载过程:NFS客户端通过向NFS服务器发送挂载请求来开始通信。如果客户端被授权访问,服务器响应此请求并允许客户端将服务器上的文件系统挂载为本地文件系统。

  3. 文件操作:一旦挂载成功,客户端上的应用程序和用户就可以像操作本地文件一样操作远程文件。所有操作请求(如读取、写入文件)都通过NFS协议发送给服务器,由服务器执行实际操作后返回结果。

4. NFS版本

NFS有几个版本,包括NFSv2、NFSv3、NFSv4,每个版本都增加了新的特性和性能改进。NFSv4是最新的广泛采用版本,引入了如状态持久性、更强的安全性和改进的性能等新特性。

5. 安全性

NFS的早期版本(特别是NFSv2和NFSv3)在设计时没有将安全性作为重点,主要依赖网络安全和主机控制。NFSv4增加了更强的安全措施,如Kerberos认证和加密传输。

结论

NFS通过其简单的客户端-服务器模型和协议,有效地实现了分布式环境中的文件共享和访问。随着新版本的发布,NFS不断增强其特性和安全性,以满足现代网络环境的需求。

2. RPC工作原理

远程过程调用(RPC)是一种通信机制,允许一台计算机(客户端)请求另一台计算机(服务器)上的程序或服务执行一个过程(函数或方法),就如同该过程是在本地执行一样。RPC抽象了底层的通信细节,使开发人员能够专注于业务逻辑,而不是网络交互的复杂性。这种方式简化了不同计算机之间的功能调用,是分布式系统设计中的一个关键概念。以下是对RPC的进一步理解和组成部分的描述:

核心概念

  • 透明性:RPC的设计目的之一是让远程服务调用看起来尽可能像是本地调用。这种透明性意味着开发人员可以像调用本地函数那样调用远程函数,而不需要关心网络通信的复杂性。
  • 接口定义:在RPC系统中,服务提供方需要定义一个接口(通常是一组可远程调用的函数或方法),客户端根据这个接口进行编程,发起远程调用。这个接口定义了可以远程调用的方法、它们的参数和返回类型。

工作流程

  1. 客户端发起调用:当客户端需要执行远程过程时,它会在本地生成一个对该远程过程的调用。
  2. 请求序列化:客户端的RPC框架将调用请求(包括函数名、参数等)序列化成一种格式(例如,JSON、XML、二进制等),这样可以通过网络发送。
  3. 发送请求:序列化后的请求通过网络发送给服务器。
  4. 服务器处理请求:服务器接收到请求后,RPC框架反序列化请求,获取函数名和参数,然后像调用本地函数一样调用相应的过程。
  5. 返回结果:服务器执行完毕后,将结果序列化并发送回客户端。
  6. 客户端接收结果:客户端的RPC框架接收到结果,反序列化它,然后返回给调用者。

通信协议

RPC可以使用多种底层网络协议来传输数据,包括TCP/IP、UDP等。选择哪种协议取决于应用的需求,比如对性能、可靠性或数据完整性的不同要求。

应用和优势

RPC广泛用于构建分布式系统和微服务架构,因为它能够:

  • 简化开发:开发人员可以专注于业务逻辑,而不是底层的网络通信细节。
  • 提高抽象级别:通过使用高级的接口定义语言(IDL),可以在不同语言和平台之间进行通信,增强系统的互操作性。
  • 支持多种语言:RPC框架通常支持多种编程语言,使得不同语言编写的系统组件能够轻松通信。

RPC的这些特性使其成为现代软件架构中不可或缺的技术之一,尤其是在微服务架构的设计和实现中。

3. 注册中心

注册中心是分布式系统和微服务架构中的一个重要组成部分。注册中心在RPC系统中扮演着至关重要的角色,特别是在服务发现和服务治理方面。下面我会详细解释注册中心的作用和它如何与RPC结合使用。

注册中心的作用

在分布式系统或微服务架构中,注册中心负责存储服务的地址和元数据信息。它主要有以下几个作用:

  1. 服务注册:服务启动时,会将自己的网络地址(如IP和端口)以及提供的功能(服务)的相关信息注册到注册中心。这个过程称为服务注册。
  2. 服务发现:客户端在需要调用某个服务时,会向注册中心查询该服务的网络地址,然后直接与服务进行通信。这个过程称为服务发现。
  3. 负载均衡:注册中心可能会存储多个实例的地址信息,客户端可以根据某种策略(如轮询、随机等)从中选择一个进行调用,从而实现负载均衡。
  4. 健康检查:注册中心通常会周期性地检查服务实例的健康状态,不健康的实例会被暂时移除或标记,以确保系统的稳定性。

注册中心与RPC的结合

在RPC系统中,注册中心的使用解决了服务位置的硬编码问题,提高了系统的灵活性和可维护性。与RPC结合使用时,流程通常如下:

  1. 服务提供者(服务器)启动时,向注册中心注册自己提供的服务接口和地址信息。
  2. 服务消费者(客户端)在需要调用远程服务时,首先从注册中心查询该服务的地址。
  3. 注册中心返回服务地址信息给客户端,客户端根据这些信息,使用RPC机制调用远程服务。
  4. 客户端可以实现负载均衡,从注册中心获取的多个服务实例中选择一个进行调用。
  5. 服务提供者定期向注册中心发送心跳,以证明自己是活跃的。注册中心也可以通过健康检查机制监控服务实例的状态。

常见的注册中心

在实践中,有许多流行的注册中心解决方案,包括:

  • Eureka:Netflix开发的服务发现工具,是Spring Cloud体系中的一部分。
  • Consul:由HashiCorp开发,提供了服务发现、健康检查和键值存储等功能。
  • Zookeeper:Apache软件基金会的一个项目,常用于Kafka和Hadoop等分布式系统的协调服务。
  • Nacos:阿里巴巴开源的服务发现和配置管理工具,支持微服务架构。

注册中心不仅简化了服务之间的通信,还为服务的可扩展性、动态性和高可用性提供了基础设施支持。

4.安装配置NFS

# 安装nfs-utils包,nfs服务在centos7以前叫nfs,centos7以后叫nfs-server。并且在安装的过程会自动处理依赖关系,其中包括注册中心rpcbind
[root@Rocky9 ~]# yum install nfs-utils
Dependencies resolved.
============================================================================================================================================================================================Package                                          Architecture                             Version                                           Repository                                Size
============================================================================================================================================================================================
Installing:nfs-utils                                        x86_64                                   1:2.5.4-20.el9                                    baseos                                   425 k
Installing dependencies:gssproxy                                         x86_64                                   0.8.4-6.el9                                       baseos                                   108 kkeyutils                                         x86_64                                   1.6.3-1.el9                                       baseos                                    72 klibev                                            x86_64                                   4.33-5.el9                                        baseos                                    52 klibnfsidmap                                      x86_64                                   1:2.5.4-20.el9                                    baseos                                    60 klibverto-libev                                   x86_64                                   0.3.2-3.el9                                       baseos                                    13 krpcbind                                          x86_64                                   1.2.6-5.el9                                       baseos                                    56 ksssd-nfs-idmap                                   x86_64                                   2.9.1-4.el9_3.5                                   baseos                                    42 kTransaction Summary
============================================================================================================================================================================================
Install  8 PackagesTotal download size: 827 k
Installed size: 2.1 M
Is this ok [y/N]:[root@Rocky9 ~]#systemctl enable --now nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@Rocky9 ~]#systemctl status nfs-server
[root@Rocky9 data]# systemctl status nfs-server
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; preset: disabled)Drop-In: /run/systemd/generator/nfs-server.service.d└─order-with-mounts.confActive: active (exited) since Tue 2024-04-09 09:21:58 CST; 5h 41min agoProcess: 831 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)Process: 837 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)Process: 1010 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)Main PID: 1010 (code=exited, status=0/SUCCESS)CPU: 34msApr 09 09:21:57 Rocky9.3 systemd[1]: Starting NFS server and services...
Apr 09 09:21:58 Rocky9.3 systemd[1]: Finished NFS server and services.
[root@Rocky9 data]#

配置文件

vi /etc/exports
vi /etc/exports.d/*.exports

基本格式:

共享目录 客户端(选项1, 选项2, ...)
  1. 共享目录: 这是您想要共享的本地文件系统路径。

  2. 客户端

    • 可以是单个客户端的 IP 地址或主机名。

    • 也可以是一个 IP 网段(例如:192.168.1.0/24)。

    • 使用 * 表示允许所有客户端访问。

    • 使用 @group 表示允许属于某个 NIS 组的所有客户端访问。

  3. 选项

    • rw: 允许读写访问(如果没有指定 rwro,默认是 ro)。
    • ro: 只读访问。
    • sync: 同步写操作,保证数据一致性。
    • async: 异步写操作,提高性能但可能牺牲数据一致性。
    • no_root_squash: 默认情况下,来自客户端的root用户会被映射到匿名用户(通常是nobody),这个选项禁用这种行为。
    • root_squash: 启用root用户映射到匿名用户,这是默认行为。
    • all_squash: 将所有远程用户映射到匿名用户。
    • no_subtree_check: 如果共享的不是整个文件系统,NFS会进行子树检查。这个选项禁用子树检查,可能提高性能但增加风险。
    • subtree_check: 启用子树检查,这是默认行为。
    • secure: 使用1024以下的TCP/IP端口进行通信,这是默认行为。
    • insecure: 允许使用1024以上的端口,某些客户端可能需要这个选项。
    • anonuidanongid: 指定匿名用户的UID和GID,通常与 all_squash 一起使用。

示例:

vim /etc/exports
/data/nfsdir1 *(rw,no_root_squash,all_squash,anonuid=88,anongid=88)#或者
[root@Rocky9 data]# vim /etc/exports.d/test.exports
/data/nfsdir2 *(rw)
[root@Rocky9 data]# exportfs -r
[root@Rocky9 data]# exportfs -v
/data/nfsdir1   10.0.0.107(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/data/nfsdir1   <world>(sync,wdelay,hide,no_subtree_check,anonuid=88,anongid=88,sec=sys,ro,secure,no_root_squash,all_squash)
/data/nfsdir2   <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
[root@Rocky9 data]##查看
[root@ubuntu2204 nfs]#showmount -e 10.0.0.137
Export list for 10.0.0.137:
/data/nfsdir2 *
/data/nfsdir1 (everyone)

修改完以后,生效:

[root@Rocky9 data]# exportfs -r
[root@Rocky9 data]#
[root@Rocky9 data]# exportfs -v
/data/nfsdir1   <world>(sync,wdelay,hide,no_subtree_check,anonuid=88,anongid=88,sec=sys,rw,secure,no_root_squash,all_squash)

客户端挂载

#centos/rocky上面客户端安装
[root@Rocky9 ~]# yum -y install nfs-utils
#Ubuntu客户端安装不叫这个,是nfs-common
[root@Ubuntu22 ~]#apt install -y nfs-common
[root@Rocky9 ~]# showmount -e 10.0.0.137
Export list for 10.0.0.137:
/data/nfsdir1 (everyone)
[root@Rocky9 ~]#
#临时挂载
[root@Rocky9 ~]# mount 10.0.0.137:/data/nfsdir1 /mnt/nfs 
#永久挂载
[root@Rocky9 ~]# vim /etc/fstab
10.0.0.137:/data/nfsdir1 /mnt/nfs               nfs     _netdev         0 0
[root@Rocky9 ~]# mount -a
mount: (hint) your fstab has been modified, but systemd still usesthe old version; use 'systemctl daemon-reload' to reload.
#如果出现上面提示,执行下面命令即可
[root@Rocky9 ~]# systemctl daemon-reload
# _netdev:没有网络的时候不挂载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小短片创作-理论知识(五)

1、网格体绘制 1.UE5打开Megascan插件的材质混合器&#xff0c;创建混合材质&#xff0c;最多选择3个材质进行混合&#xff0c; 2.通过模式->网格体绘制&#xff0c;进入网格体绘制模式&#xff0c;通过select选择一个平面进行绘制&#xff0c;然后通过paint进行绘制&am…

关于线程池面试题,使用“豆包”训练答案

我提问&#xff1a; 问题描述 下面是一个有关线程池调度的面试真题&#xff0c;来自于疯狂创客圈社群&#xff1a; 一个线程池的核心线程数为10个&#xff0c;最大线程数为20个&#xff0c;阻塞队列的容量为30。现在提交45个 任务&#xff0c;每个任务的耗时为500毫秒。 请问&…

【Mac】Keyboard Maestro for Mac(键盘大师)软件介绍及安装教程

软件介绍 Keyboard Maestro for mac&#xff08;键盘大师&#xff09;是目前Mac OS平台上功能最为齐全的Mac键盘增强工具&#xff0c;它能将你的Keyboard作用发挥到极致&#xff0c;可以根据命令或计划自动执行简单或复杂的应用程序或网站&#xff0c;文本或图像。使用Keyboar…

python之* 和+

背景 python的* 和用法。 代码 >>> l [1, 2, 3] >>> l * 5 [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3] >>> 5 * abcd abcdabcdabcdabcdabcd 结论 Python程序员会默认序列是支持和*操作的。通常号两侧的序列由相同类型的数据所构成&#…

【TPAMI-2024】EfficientTrain++帮你降低网络训练的成本

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言论文更容易学习的模式:频域易于学习的模式:空间域统一的训练课程 EFFICIENTTRAIN计…

RIP v2路由安全认证综合实验

RIP v2路由安全认证综合实验 实验拓扑&#xff1a; 实验要求&#xff1a;通过认证防范攻击者获得通信设备的相关信息。 实验步骤&#xff1a; 1.完成基本配置 sys Enter system view, return user view with CtrlZ. [Huawei]sys AR1 [AR1]undo in e Info: Information center…

【电子书赠送福利】蘇小沐电子数据取证实务教程!风吹哪页读哪页,哪页不会撕哪页!

【电子书赠送福利】蘇小沐电子数据取证实务教程&#xff01;风吹哪页读哪页&#xff0c;哪页不会撕哪页&#xff01; 合并文章的时候才发现自己写了那么多&#xff0c;受限于时间&#xff0c;第一次合集版本只收录了已发博客的三分之二左右&#xff0c;暂时先这样&#xff01;…

外汇天眼:Bitpanda 扩大与德意志银行的合作

金融科技独角兽Bitpanda正在扩大与德意志银行的合作&#xff0c;为德国用户提供实时支付解决方案&#xff0c;以处理进出交易。 这种基于API的账户解决方案将使Bitpanda能够访问德国的IBAN账户&#xff0c;优化和增强用户体验&#xff0c;同时确保信任、速度和效率。 这只是Bi…

react-draft-wysiwyg富文本编辑器使用常见问题解答

记录一些常见的问题以及使用 1. 初始化赋值 import htmlToDraft from html-to-draftjs import { ContentState as DraftContentState } from draft-js import { EditorState,, convertToRaw } from draft-jsconst { initialContent } propsuseEffect(() > {if (initialCon…

七大战略性新兴产业崭露头角:新能源电燃灶或将成为未来厨房新宠

近日&#xff0c;在国家发布的七大战略性新兴产业名单中&#xff0c;新能源产业赫然在列&#xff0c;作为其中的重要组成部分&#xff0c;华火新能源电燃灶凭借其独特的优势&#xff0c;正逐渐走进人们的视野&#xff0c;有望成为未来厨房的新宠。 华火新能源电燃灶作为清洁能源…

NeuralForecast 多变量的处理 包括训练和推理

NeuralForecast 多变量的处理 包括训练和推理 flyfish 两个excel表格合并后的结果 unique_id ds y ex_1 ex_2 ex_3 ex_4 0 HUFL 2016-07-01 00:00:00 -0.041413 -0.500000 0.166667 -0.500000 -0.001370 1 …

Houdini pbd_constraints.h的文件位置

Houdini安装目录下的houdini\vex\include文件夹 C:\Program Files\Side Effects Software\Houdini 19.5.716\houdini\vex\include

17.调用游戏本身的hp减伤害函数实现秒杀游戏角色

上一个内容&#xff1a;16.在目标进程构建CALL执行代码 16.在目标进程构建CALL执行代码在它的代码上进行的更改&#xff0c;它的callData变量中的代码不完善一个完整的函数是由return的处理器执行到return会返回如果执行不到会继续往下走&#xff0c;直到执行不下去或者执行到…

Facebook开户 | Facebook海外三不限的价值

在当今数字化时代&#xff0c;海外数字营销已经成为企业推广和品牌建设的重要手段。在这个过程中&#xff0c;社交媒体平台扮演着至关重要的角色&#xff0c;而Facebook作为全球最大的社交媒体平台之一&#xff0c;其海外三不限账户近年来引起了越来越多数字营销从业者的关注。…

各种实用方法

下载文件 function downloadUpload (url) {if ((/Trident\/7\./).test(navigator.userAgent) || (/Trident\/6\./).test(navigator.userAgent)) {// IE10/IE11var aLink document.createElement(a)//创建a链接aLink.className download_linkvar text document.createTextNo…

技术积累1:Java容错机制

如何优雅地重试 原创 赵九文 字节跳动技术团队 2021-01-05 10:01 背景 在微服务架构中&#xff0c;一个大系统被拆分成多个小服务&#xff0c;小服务之间大量 RPC 调用&#xff0c;经常可能因为网络抖动等原因导致 RPC 调用失败&#xff0c;这时候使用重试机制可以提高请求的…

【话题】开源大模型与闭源带模型你更看好哪一方

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 引言评价AI模型“好不好”及“有没有发展”开源与闭源&#xff1a;两种发展路径的比较开源的优势与劣势闭源的优势与劣势 开源与闭源&#xff1a;你更看好哪一种&#x…

gitbook安装 报错处理 windows系统

首先需要有nodejs。若没有&#xff0c;则去nodejs官网下载nodejs安装。 然后安装gitbook。命令如下&#xff1a;这是在linux系统的命令。 $ npm config set registry http://registry.npm.taobao.org #设置一下淘宝镜像&#xff08;非必选&#xff09; $ npm install gitbo…

计算机视觉全系列实战教程:(七)opencv的improc模块基本介绍

1.颜色转换 A.函数转换函数原型&#xff1a; void cv::cvtColor(cv::InputArray src, // 输入序列cv::OutputArray dst, // 输出序列int code, // 颜色映射码int dstCn 0 // 输出的通道数 (0automatic) );B.基本使用&#xff1a; cv::Mat imGray; cv::cvtColor(imBGR, imGr…

域环境信息收集

背景 一个具有一定规模的企业&#xff0c;每天都可能面临员工入职和离职&#xff0c;因此网络管理部门经常需要对域成员主机进行格式化消除磁的文件&#xff0c;然后重装系统及软件&#xff0c;以提供给新员工使用;因此&#xff0c;为了便于后期交接&#xff0c;大多网络管理员…