NFS服务

NFS

RPC

什么是RPC

网络文件系统实现的核心是使用了RPC机制,即:远程过程调用协议。在说明NFS协议之前必须先搞清楚RPC。RPC是一种编程技术,也是协议。

如果在同一个主机上,两个进程之间可以直接通信(即进程间通信),但是当两个进程位于C/S模型上时,则需要借助另外一个应用程序(RPC),两个进程不需要考虑自己是否在网络上通信(全权由RPC处理)

RPC建立在Socket(套接字)之上,一台主机上运行的主程序,可以调用另一台主机上准备好的子程序,就像本地调用子程序一样,不需要知道底层网络实现的细节。

RPC使用类似C/S模型,请求的时候,请求程序时客户端,而服务提供的程序则是服务器。使用C/S模型忽略通讯的具体细节,从而程序员不必关心C/S之间的通信协议,集中精力实现其过程就可以了。

提供RPC服务的程序:Portmap;服务器端监听tcp/udp的111端口

RPC是一种编程技术,简化分布式应用程序的开发

RC --> RPC C --> RPC S --> RS

RPC

PRC调用方式

RPC调用的时候一般有两种方式:

  • 同步调用,客户端等待调用执行完成后并返回结果;

  • 异步调用,客户端调用后不用等待执行结果的返回,但可以通过回调通知等方式获取返回结果。如若客户端不关心调用返回的结果,则称为单向异步调用。

任何RPC C/S程序的重要实体都包括 IDL 文件(接口定义文件)、客户机 stub(存根)、服务器 stub 以及由客户机和服务器程序共用的头文件。客户机和服务器 stub 使用 RPC 运行时库通信。RPC 运行时库提供一套标准的运行时例程来支持RPC 应用程序。

当我们建立RPC服务后,客户算的调用参数通过调用底层的RPC传输管道,并根据传输前所提供的目的地址及其RPC上层应用程序的stub,转到相应的RPC应用程序服务端,然后客户端程序处于等待状态,直到收到应答或者Timeout的超时信号。服务端获取请求消息,服务端stub吧所需的信息提交给上层的服务应用程序,服务端执行远程过程调用,然后使用RPC运行时库将结果返回给客户端stub,最后客户端stub将结果反馈给客户端应用程序。从上面的过程可以看出来,stub作为应用程序与RPC运行时层之间的接口,它使得两者可以以理解的格式交互信息。

客户端与服务端交互

  1. 服务器 RPC 应用程序初始化期间它会向 RPC 运行时库注册接口,客户机在向服务器发出远程过程调用时,要检查它是否与服务器兼容。服务器启动,监听来自客户机的远程过程调用。

  2. 客户机发出远程过程调用,RPC 运行时库监听服务器进程上哪个端点达到RPC。

  3. 客户机找到服务器之后,客户机 stub 把远程过程调用和参数转换为服务器 stub 可以理解的格式,然后交给客户机运行时,由客户机运行时通过网络传输这些信息。

  4. 服务器 RPC 运行时库接收到达的 RPC 调用,把它传递给服务器 stub,服务器 stub 把它转换为服务器可以理解的格式。

  5. 执行 RPC 调用之后,服务器 stub 和服务器运行时把结果发送回客户机。

  6. 客户机RPC 运行时接收执行结果,传递给客户机 stub,客户机 stub 再把它传递给客户机进程。客户机应用程序从客户机 stub 接收结果并完成 RPC 调用。

SOAP:简单对象访问协议,是一种框架。轻量级的XML,RPC

NFS

NFS本身不是服务,是一种文件系统(network file system)。期望本机的某一个文件系统(如:共享处去一个目录/var/shared目录),可以被网络内别的主机访问到,并且可以进行操作。

当然,首先客户端必须首先挂载服务器共享的目录(mount),

nfs配置

服务器端:nfs-utils

/usr/sbin/rpc.mountd /usr/sbin/rpc.nfsd 核心进程

nfs启动的三个进程:

  • nfsd:文件传输进程,一般监听在2049/tcp

  • mounted:支持客户端挂载进程,端口会改变,半随机,启动时会向portmapper注册,但是一般可以自定义一个固定端口(防止占用一些特殊端口)

  • quotod:磁盘配额进程 ,端口会改变

为了防止两个客户端同时对nfs共享目录进行操作(文件崩溃),nfs引入了nfslock(分布式文件锁)机制。该nfslock由服务端提供,客户端申请操作文件,同时申请nfs服务端加锁。

前面提到,可以自定义一个固定端口(针对mounted和quotod),编辑/etc/sysconfig/nfs

rpcinfo -p localhost可以查看rpc相关进程端口号

/etc/exports配置文件

格式:/path/to/somedir CLIENT_LIST

每个客户在机件使用空白字符分割,每个客户端后面必须跟一个小括号,里面定义此客户访问特性,如访问权限等。如:172.25.0.0/16(ro,async) 192.168.1.0/24(rw,sync)

“#”开头是注释行

安装流程

  • 下载nfs server服务

yum install -y nfs-utils 下载安装nfs服务

systemctl start nfs开启nfs服务

  • 修改配置文件

ehco "/nfsshare 172.25.254.0/24(ro,sync)" > /etc/exports` 修改nfs配置文件:共享/nfsshare目录,允许172.25.254.0网段地址使用挂载,模式可以为(ro只读),(rw读写),(sync异步),(async同步)

systemctl restart nfs开启nfs服务

相关命令:

rpcinfo -p localhost 查看portmapper端口情况

showmount -e nfs_server(IP) 查看nfs提供共享的文件系统

showmount -a nfs_server 查看nfs服务器所有被挂载的文件系统及其挂载的客户端对应关系列表

showmount -d nfs_server 显示nfs服务器所有导出的文件系统

exportfs命令:

-a:跟-r或-u同时使用,表示重新挂载所有文件系统或取消导出所有文件系统

-r:重新导出

-u:取消导出

-v:显示详细信息

  • 客户端挂载(mount命令):

mount -t nfs NFS_SERVER:/PATH/TO/SOME_EXPORT /PATH/TO/SOMEWHERE

问题

nfs是通过简单的id号映射来标识共享文件系统中文件的文件所属属性,如果server上有一个用户a的id号和client上另外一个用户b的id号相同,则可能同一个文件,在服务器上和客户端上看来,文件所属人,所属组是不同的。

开机自动挂载

vim /etc/fstab

172.25.254.111:/nfsshare /mnt nfs defaults,_rnetdev 0 0

服务器IP:服务器共享文件系统(目录) 本地挂载点 挂载类型(nfs) 默认挂载(_rnetdev:如果不存在就放弃挂载) 0 0

NFS守护进程

NFSv3:

1,客户端联系portmap,查看是不是RPC服务器,RPC 告诉客户端mounted进程的端口号

2,mounted的端口号回传给客户端后,客户端链接rpc_mounted,mounted认证客户端是否可以访问文件系统,如果可以,返回给客户端一个初始化文件句柄(类似于通行证)。

nfs是文件级别的共享,属于NAS,Network Attached Storage:网络附属存储


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建NFS服务器的步骤如下: 1. 安装nfs-utils软件包。在Linux系统中,NFS服务器需要安装nfs-utils软件包才能正常运行。如果你使用的是Debian或Ubuntu等基于Debian的发行版,可以使用以下命令安装: ``` sudo apt-get install nfs-kernel-server ``` 如果你使用的是CentOS或RHEL等基于Red Hat的发行版,可以使用以下命令安装: ``` sudo yum install nfs-utils ``` 2. 创建共享目录。在NFS服务器上创建一个共享目录,并为它设置读写权限。 3. 配置exports文件。exports文件用于指定NFS服务器共享的目录和客户端可以访问这些目录的权限。打开/etc/exports文件,并添加以下内容: ``` /path/to/shared/directory client_ip(rw,sync,no_root_squash,no_subtree_check) ``` 其中,/path/to/shared/directory是你在第二步中创建的共享目录路径,client_ip是允许访问该目录的客户端IP地址,rw表示读写权限,sync表示同步写入,no_root_squash表示允许root用户访问该目录,no_subtree_check表示关闭子树检查。 4. 启动NFS服务器。启动NFS服务器并重新加载exports文件: ``` sudo systemctl start nfs-kernel-server sudo exportfs -a ``` 5. 配置NFS客户端。在客户端上安装nfs-common软件包,并通过mount命令挂载NFS共享目录: ``` sudo apt-get install nfs-common # Debian/Ubuntu sudo yum install nfs-utils # CentOS/RHEL sudo mount server_ip:/path/to/shared/directory /local/mount/point ``` 其中,server_ip是NFS服务器的IP地址,/path/to/shared/directory是共享目录路径,/local/mount/point是本地挂载点路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值