热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Linux服务器架设】存储服务器构建原理NFS

【Linux服务器架设】存储服务器篇第一章搭建存储服务器-NFS第二章存储服务器构建原理(上)-NFS文章目录【Linux服务器架设】存储服务器篇前言

【Linux服务器架设】存储服务器篇

第一章 搭建存储服务器-NFS
第二章 存储服务器构建原理(上)-NFS




文章目录

  • 【Linux服务器架设】存储服务器篇
  • 前言
  • 一、NFS是什么?
  • 二、RPC
    • 1.什么是RPC
    • 2.NFS启动RPC守护进程
      • rpc.nfsd
      • rpc.mountd
      • rpc.lockd【非必要】
      • rpc.statd【非必要】
  • 三、NFS文件访问权限
  • 总结




前言

书承上回,上次写了一篇如何搭建“NFS”存储服务器,未具体刨析底层的原理,下面咱们好好探究一手,小伙伴们一起冲鸭!




一、NFS是什么?

这时有小伙伴问了,小涛小涛,这是我手机那个能刷卡那个东东吗?
不是哦,那个是NFC,NFS全称是Network File System,即网络文件系统,最大的功能呢,即通过网络的方式,让不同的机器,可以共享文件
而对于客户端来说,这个远程的主机目录,就好像自己的磁盘分区,在使用上,相当于远程插U盘
在这里插入图片描述
如同所示,当服务端配置共享的/data/share目录,那么客户端就可以把该目录挂载到任意位置,例如客户端1,当我进入/home/share目录时,即可查看到服务端的所以数据了(前提是权限要足够),进入后,可自由使用Linux指令,特别nice😁


二、RPC

那么问题来了,NFS是借助网络进行传输,那肯定需要占用一些端口,NFS这个服务的默认端口是2049,但文件系统本身很复杂,因此NFS还需要借助其他进程去启动其他端口。这样就造成一个尬尴的局面:随机取用一些未被使用且小于1024端口用于传输

可是,这可难为咱们的客户端了,我不知道你的端口,咋给你开通防火墙的白名单端口号呢?
别急,此时我们借助RPC协议(远程过程调用,Remote Procedure Call)进行辅助。


1.什么是RPC

RPC最主要的功能:指定每个NFS功能所对应的端口号,并且通知客户端,让客户端可以允许访问了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b94a54829cdd40089820078a61b1b0a9.png
RPC如何知道每个NFS的端口?
当服务器启动NFS时,会随机选取某个端口,并主动向RPC注册,因此RPC可以知道每个端口对于的NFS功能。
然后RPC是固定使用111端口来监听客户端的需求,并向客户端响应正确的端口,依次有了它,NFS的启动更为丝滑了。


注意:
1.在启动NFS前,必须先启动RPC,否则NFS无法向RPC注册。
2.当RPC重启后,原来注册是数据会消失。所以当RPC重启后,它管理的所有服务都需重新启动以向RPC注册。
3.所以,也可以称NFS为RPC server的一种。


如图所示,当客户端请求NFS文件时间,它是这么向服务端请求数据:
1.客户端向服务端RPC(111端口)发出NFS文件访问功能的查询要求
2.服务端找到对应且已注册的NFS端口后,通知给客户端
3.客户端了解正确的端口后,他们就能亲密连接了。
在这里插入图片描述


2.NFS启动RPC守护进程

上面那种图中,在服务端启动时,会有一个NFS守护进程,与之相对应的,RPC也有守护进程,下面咱们继续了解一下。
现在我们知道,NFS服务主要任务是进行文件系统共享,谈到共享,那也就离不开权限问题(安全)。所以,NFS服务器启动至少需2个以上守护进程,一个是管理客户端能否登录,另一个是管理客户端能获取那些权限。如何还想细化,还需要其他守护进程,下面由小涛一一阐述。


rpc.nfsd

管理客户端能否使用服务器文件系统挂载信息,如判断登录用户的ID


rpc.mountd

管理NFS文件系统。当客户端通过nfsd登录服务器后,使用文件系统前,需要经过文件权限的认证,即/etc/exports文件,通过这一关后客户端就可正常使用文件了。


rpc.lockd【非必要】

用于管理文件的锁定(lock)。
为什么需要它呢?
because,共享的NFS必然是多用户连接,那么当多个尝试写入某文件时,可能会对该文件造成一些问题,使用lock则可解决该问题,但lock在客户端和服务端都开启才行。


rpc.statd【非必要】

用于检查文件一致性,与lock,相互。
当客户端同时使用同一文件时,导致文件有所损坏,这是statd可以用来检测并尝试恢复该文件。
lock一样,在客户端和服务端都开启才行。


三、NFS文件访问权限

这时有小伙伴想问了:小涛,我在客户端1用aoao这个用户身份去访问/home/share这个来自NFS服务端提供的文件时,NFS服务端会让我们以什么身份访问呢?也是aoao还是其他角色吗?
小涛:为什么会这么提问呢?
小伙伴:我发现NFS本身的服务并没有进行用户身份验证,验证貌似是RPC干的
小涛:说得非常正确,当aoao想访问服务端的文件系统时,服务端会以客户用户的UID与GID的身份尝试读取
小伙伴:那客户端与服务端的用户身份不一致怎么办呢?
小涛:emm。。。咱们看图,这是NFS的客户端与服务端用户连接机制过程
在这里插入图片描述
小涛:当我们以aoao身份去访问服务端时,需注意,文件系统的inode所记录的属性为UID、GID,而非账号与属组名
小伙伴:哦哦,那就是Linux主机会去查看/etc/passwd、/etc/group进行查询对应的用户名等,所以当aoao进入该目录文件后,会参照NFS客户端1的用户名与组名是吧?
小涛:正确,但由于该目录的文件是来自服务端,所以会出现以下几种情况,咱们要具体问题具体分析。

1.服务端/客户端 都有相同的账号与用户组
此时用户以aoao身份访问服务端文件

2.服务端 520这个UID账号对于为tao用户
若服务端的/etc/exports里面UID 520用户名称为tao,则客户端的aoao可以访问tao用户的文件,因为两者具有相同的UID,这个需要注意。

3.服务端没有520这个UID
那么aoao就会压缩成匿名用户,而一般会匿名成65534作为其UID,在CentOS 7里,该UID为nfsnobody用户

4.用户身份是root
在默认情况下,root身份会被压缩成匿名用户

小涛:总结一下,当满足以下三个条件,客户端最终具备写入权限。
①用户账号,UID相互的身份;
②NFS服务端允许写入的权限;【/etc/exports中设置】
③文件系统具有可读权限,才具备可写入权限。




总结

以上就是今天要讲的内容,本文着重介绍NFS和RPC两个基础服务底层原理,期望该系列能继续更新下去。(●’◡’●)
咱们下篇博文再见了😀


推荐阅读
  • NFS文件共享系统
    1、概述:NFS(NetworkFileSystem)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 提示信息_局域网内互发提示信息
    本文由编程笔记#小编为大家整理,主要介绍了局域网内互发提示信息相关的知识,希望对你有一定的参考价值。【局域网内互发提示信息】准备工作:1.rege ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • Linux下安装依赖包版本高解决方法
    本文介绍了在Linux系统下,当已安装的依赖包版本高于需要安装的依赖包版本时,解决方法包括欺骗安装程序和修改相关配置文件等操作。针对不同情况,提供了不同的解决方案。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
author-avatar
失憶壹瞬間_533
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有