写点什么

NFS 服务器原理、搭建、配置,Python 面试题选择题

作者:程序媛可鸥
  • 2022 年 3 月 18 日
  • 本文字数:3414 字

    阅读完需:约 11 分钟

既然 NFS 是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有想对应的网络端口,NFS 服务器到底使用哪个端口来进行数据传输呢?基本上 NFS 这个服务器的端口开在 2049,但由于文件系统非常复杂。因此 NFS 还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于 1024 的端口;既然是随机的那么客户端又是如何知道 NFS 服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现了!


RPC 与 NFS 通讯原理:




? 因为 NFS 支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此 NFS 的功能对应的端口并不固定,客户端要知道 NFS 服务器端的相关端口才能建立连接进行数据传输,而 RPC 就是用来统一管理 NFS 端口的服务,并且统一对外的端口是 111,RPC 会记录 NFS 端口的信息,如此我们就能够通过 RPC 实现服务端和客户端沟通端口信息。PRC 最主要的功能就是指定每个 NFS 功能所对应的 port number,并且通知客户端,记客户端可以连接到正常端口上去。


那么 RPC 又是如何知道每个 NFS 功能的端口呢?


首先当 NFS 启动后,就会随机的使用一些端口,然后 NFS 就会向 RPC 去注册这些端口,RPC 就会记录下这些端口,并且 RPC 会开启 111 端口,等待客户端 RPC 的请求,如果客户端有请求,那么服务器端的 RPC 就会将之前记录的 NFS 端口信息告知客户端。如此客户端就会获取 NFS 服务器端的端口信息,就会以实际端口进行数据的传输了。


注意:在启动 NFS SERVER 之前,首先要启动 RPC 服务(即 portmap 服务,下同)否则 NFS SERVER 就无法向 RPC 服务区注册,另外,如果 RPC 服务重新启动,原来已经注册好的 NFS 端口数据就会全部丢失。因此此时 RPC 服务管理的 NFS 程序也要重新启动以重新向 RPC 注册。特别注意:一般修改 NFS 配置文档后,是不需要重启 NFS 的,直接在命令执行 systemctl reload nfs 或 exportfs –rv 即可使修改的/etc/exports 生效


NFS 客户端和 NFS 服务器通讯过程:





图:NFS 工作原理图


  1. 首先服务器端启动 RPC 服务,并开启 111 端口

  2. 服务器端启动 NFS 服务,并向 RPC 注册端口信息

  3. 客户端启动 RPC(portmap 服务),向服务端的 RPC(portmap)服务请求服务端的 NFS 端口

  4. 服务端的 RPC(portmap)服务反馈 NFS 端口信息给客户端。

  5. 客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输。


Linux 下 NFS 服务器部署


======================================================================================================================================


NFS 服务所需软件及主要配置文件:




安装 NFS 服务,需要安装两个软件,分别是:


  • RPC 主程序:rpcbind


NFS 其实可以被视为一个 RPC 服务,因为启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)。


  • NFS 主程序:nfs-utils


就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件。


NFS 的相关文件:


  • 主要配置文件:/etc/exports


这是 NFS 的主要配置文件了。该文件是空白的,有的系统可能不存在这个文件,主要手动建立。NFS 的配置一般只在这个文件中配置即可。


  • NFS 文件系统维护指令:/usr/sbin/exportfs


这个是维护 NFS 分享资源的指令,可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享。


  • 分享资源的登录档:/var/lib/nfs/*tab


在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。


  • 客户端查询服务器分享资源的指令:/usr/sbin/showmount


这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。showmount 可以用来察看 NFS 分享出来的目录资源。


服务端安装 NFS 服务步骤:




第一步:安装 NFS 和 rpc。


[root@localhost ~]# yum install -y nfs-utils


#安装 nfs 服务


[root@localhost ~]# yum install -y rpcbind


#安装 rpc 服务


第二步:启动服务和设置开启启动:


注意:先启动 rpc 服务,再启动 nfs 服务。


[root@localhost ~]# systemctl start rpcbind #先启动 rpc 服务


[root@localhost ~]# systemctl enable rpcbind #设置开机启动


[root@localhost ~]# systemctl start nfs-server nfs-secure-server


#启动 nfs 服务和 nfs 安全传输服务


[root@localhost ~]# systemctl enable nfs-server nfs-secure-server


[root@localhost /]# firewall-cmd --permanent --add-service=nfs


success #配置防火墙放行 nfs 服务


[root@localhost /]# firewall-cmd --reload


success


第三步:配置共享文件目录,编辑配置文件:


首先创建共享目录,然后在/etc/exports 配置文件中编辑配置即可。


[root@localhost /]# mkdir /public


#创建 public 共享目录


[root@localhost /]# vi /etc/exports


/public 192.168.245.0/24(ro)


/protected 192.168.245.0/24(rw)


[root@localhost /]# systemctl reload nfs


#重新加载 NFS 服务,使配置文件生效


配置文件说明:


格式:?共享目录的路径 允许访问的NFS客户端(共享权限参数)




如上,共享目录为/public , 允许访问的客户端为 192.168.245.0/24 网络用户,权限为只读。



请注意,NFS 客户端地址与权限之间没有空格。



NFS 输出保护需要用到 kerberos 加密(none,sys,krb5,krb5i,krb5p),格式 sec=XXX



none:以匿名身份访问,如果要允许写操作,要映射到 nfsnobody 用户,同时布尔值开关要打开,setsebool nfsd_anon_write 1



sys:文件的访问是基于标准的文件访问,如果没有指定,默认就是 sys, 信任任何发送过来用户名



krb5:客户端必须提供标识,客户端的表示也必须是 krb5,基于域环境的认证



krb5i:在 krb5 的基础上做了加密的操作,对用户的密码做了加密,但是传输的数据没有加密



krb5p:所有的数据都加密


用于配置 NFS 服务程序配置文件的参数:


| 参数 | 作用 |


| --- | --- |


| ro | 只读 |


| rw | 读写 |


| root_squash | 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户 |


| no_root_squash | 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员 |


| all_squash | 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户 |


| sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |


| async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |


NFS 客户端挂载配置:




**第一步:**使用 showmount 命令查看 nfs 服务器共享信息。输出格式为“共享的目录名称 允许使用客户端地址”。


[root@localhost ~]# showmount -e 192.168.245.128


如果你也是看准了 Python,想自学 Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析 Python 兼职、就业行情前景的这些事儿。

一、Python 所有方向的学习路线

Python 所有方向路线就是把 Python 常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。


二、学习软件

工欲善其必先利其器。学习 Python 常用的开发软件都在这里了,给大家节省了很多时间。


三、全套 PDF 电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。


四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。



四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。


五、面试资料

我们学习 Python 必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。



成为一个 Python 程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!最后祝你好运!!!

用户头像

Python编程资料加Q群免费领取:419829237 2022.03.14 加入

还未添加个人简介

评论

发布
暂无评论
NFS服务器原理、搭建、配置,Python面试题选择题_Python_程序媛可鸥_InfoQ写作平台