企业常见服务(一):NFS原理与实践

艺帆风顺 发布于 2025-04-07 35 次阅读


NFS 概述

NFS是一种基于TCP/IP 传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。

RPC服务

RPC(Remote Procedure Call)即远程过程调用。RPC服务会指定一个端口(111)来对外提供服务,这个服务主要功能就是去记录NFS服务器端上每个NFS功能所对应的端口,并且通知给客户端,让客户端可以连接到正确的端口上去。

  • 当NFS服务器端启动时,会启用一些功能,然后这些功能会随机调用一些端口

  • 这时候NFS服务器端就会向RPC去注册这些端口,RPC将注册端口记录下来。

  • 并且PRC开启的111端口去监听客户端的请求,如果客户端有请求,那么RPC就会将记录的NFS端口信息通知给客户端。

NFS工作原理

NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利。

NFS工作流程

1.首先服务器端启动RPC服务,并开启111端口2.服务器端启动NFS服务,并向RPC注册端口信息3.客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口4.服务端的RPC(portmap)服务反馈NFS端口信息给客户端。5.客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。进程功能说明:

  • rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器。

  • rpc.mount:主要功能是管理NFS的文件系统,当客户端顺利通过nfsd登录NFS服务器后,在使用NFS所提供的文件前,还必须通过文件使用权限的验证。他会读取NFS的配置文件/etc/exports来比对客户端权限

  • rpcbind:主要功能是进行端口映射工作


NFS的优缺点

优点

  • 节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问。
  • 简单容易上手。
  • 方便部署非常快速,维护十分简单。

缺点

  • 局限性容易发生单点故障,一旦服务器端宕机了所有客户端都不能访问。
  • 在高并发下NFS效率/性能有限。
  • 客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)。
  • NFS的数据是明文的,对数据完整性不做验证。
  • 多台机器挂载NFS服务器时,连接管理维护麻烦。

NFS 权限说明

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

参数作用
ro只读
rw读写
root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(默认)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
no_all_squash保留共享文件的UID和GID(默认)
sync同时将数据写入到内存和硬盘中,保证数据不丢失。
async优先将数据保存到内存,然后再写入磁盘,这样效率更高,但可能丢失数据

NFS相关文件

  • 配置文件:/etc/exports

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

    维护NFS共享资源的命令,可以对共享资源进行更新,删除等。

  • 共享资源登录文件:/var/lib/nfs/*tab

etab:主要记录了NFS所共享出来的目录的完整权限设定值;

xtab:记录曾经连接到此NFS服务器的相关客户端数据。

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

showmount主要用于客户端测试查看NFS服务器端共享出来的目录资源。

NFS部署

主机名主机IP操作系统
nfs-server172.16.1.27CentOS 7.9
nfs-client172.16.1.26CentOS 7.9

一、服务器端

1、安装nfs和rpcbind软件

[root@nfs-server ~]# yum -y install nfs-utils # 安装nfs-utils软件包[root@nfs-server ~]# [root@nfs-server ~]# rpm -qa | grep nfs # 查看nfs软件包libnfsidmap-0.25-19.el7.x86_64nfs-utils-1.3.0-0.68.el7.x86_64

2、配置共享目录

NFS 的配置文件为 /etc/exports ,文件内容默认为空(无任何共享)。在exports 文件中设置共享资源时,记录格式为“目录位置 客户机地址(权限选项)。

[root@nfs-server ~]# cat /etc/exports/data/packages 172.16.1.0/24(rw,sync)

3、启动 NFS服务并验证结果

需要先启动rpc服务,因为nfs要向rpc注册端口。

[root@nfs-server ~]# systemct enable --now rpcbind[root@nfs-server ~]# systemct enable --now nfs

# 查看rpc所有连接信息

[root@nfs-server ~]# netstat -lnupt | grep rpc

二、客户端

1、安装nfs

[root@nfs-client ~]# yum install -y nfs-utils rpcbind[root@nfs-client ~]# showmount -e 172.16.1.27

2、动挂载 NFS 共享目录

  • NFS 协议的目标是提供一种网络文件系统,因此对 NFS 共享的访问也使用 mount 命令来进行挂载,对应的文件系统类型为 nfs 。
  • 可以手动挂载,也可以加入 fstab 配置文件来实现开机自动挂载。

以 root 用户身份执行 mount 操作,将 NFS 服务器共享的 /data/packages目录挂载到本地目录 /data/packages。与挂载本地文件系统不同的是,设备位置处应指出服务器地址。

[root@nfs-client ~]# mount -t nfs 172.16.1.27:/data/packages /data/packages

3、fstab自动挂载设置

修改 /etc/fstab 配置文件,加入 NFS 共享目录的挂载设置(文件系统类型为nfs)。挂载参数建议添加_netdev(设备需要网络)。这样客户机就可以在每次开机后自动挂载 NFS 共享资源了。

vi /etc/fstab
172.16.1.27:/data/packages /data/packages nfs defaults,_netdev 0 0
4、强制卸载NFSNFS客户端与服务器端的耦合度是非常高的,如果客户端正在挂载使用,服务器端 NFS 服务突然间停掉了,那么在客户端就会出现执行 df -h 命令卡死的现象。这个时候使用 umount 命令是无法直接卸载的,需要加上-lf 选项才能卸载。当出现卡死现象时,要重新开一个终端,执行 cat /etc/rc.local 命令,查看挂载点。然后使用 umount 命令卸载,其中-l 选项表示解除正在繁忙的文件系统,-f 选项表示强制。
[root@nfs-client ~]# umount -lf /data/packages