NFS 服务器

NFS 服务介绍

在计算机网络存储领域,NFS(Network File System,网络文件系统)是一种实现不同计算机之间文件
共享的经典技术。它允许网络中的客户端计算机像访问本地文件一样,透明地访问远程服务器上的文件
资源,极大地简化了跨设备的数据共享与管理流程。

NFS 的起源与发展

NFS 技术诞生于 20 世纪 80 年代,由太阳微系统公司(Sun Microsystems)率先开发。最初的设计目标
是解决 UNIX 系统之间的文件共享问题,凭借其简洁的架构和良好的跨平台性,迅速成为网络文件共享的
主流标准之一。
随着技术的演进,NFS 经历了多个版本的迭代。其中,NFSv3 是应用最为广泛的版本之一,它在早期版
本的基础上增强了性能和可靠性,支持更大的文件尺寸和更多的功能。而 NFSv4 则是较新的版本,引入
了更强的安全性(如支持 Kerberos 认证)、状态化连接以及更完善的文件锁机制,进一步提升了 NFS
在复杂网络环境中的适用性。

NFS 的核心架构

NFS 采用客户端 - 服务器(Client-Server)架构,主要由两部分组成:
NFS 服务器:负责存储文件资源,并通过 NFS 协议将这些资源共享给授权的客户端。服务器上运行
着 NFS 守护进程,用于监听客户端的请求、处理文件访问操作以及维护共享目录的权限控制。
NFS 客户端:通过 NFS 协议访问服务器上的共享文件。客户端需要挂载(Mount)服务器的共享目
录到本地文件系统,之后就可以像操作本地文件一样对远程文件进行读写、创建、删除等操作。

NFS 的工作原理

在这里插入图片描述
NFS 的工作流程基于远程过程调用(RPC,Remote Procedure Call)机制,具体过程如下:

  1. 注册阶段:NFS服务端启动服务时,向RPC服务注册服务端口。
  2. 建立连接阶段:客户端向RPC服务器查询NFS服务器服务端口,然后再向NFS 服务器的服务端口发
    起挂载请求。
  3. 挂载阶段:服务器验证客户端的身份和权限,如果通过验证,则允许客户端将共享目录挂载到本地
    指定的挂载点。
  4. 文件访问阶段:挂载成功后,客户端对远程文件的操作(如读取、写入)会通过 RPC 协议转换为对
    服务器的远程过程调用。服务器接收到请求后,执行相应的文件操作,并将结果返回给客户端。
  5. 权限控制:NFS 通过文件系统的权限机制(如 UNIX 的用户 ID 和组 ID)来控制客户端对文件的访
    问。服务器会根据客户端的身份以及共享目录的权限设置,决定是否允许客户端的操作。

NFS 的数据传输特点

无状态性(部分版本):NFSv3 及之前的版本属于无状态协议,服务器不保存客户端的连接状态信
息。这意味着如果服务器或网络出现故障,客户端重新连接后即可继续操作,无需恢复复杂的状态
信息,简化了协议的实现和容错处理。
基于 UDP 和 TCP:NFS 可以使用 UDP(用户数据报协议)或 TCP(传输控制协议)进行数据传
输。UDP 具有较低的开销,适用于对实时性要求较高但对可靠性要求相对较低的场景;TCP 则提供
可靠的面向连接的传输,适用于数据传输量大、对可靠性要求高的场景,在现代网络中应用更为广
泛。

NFS 的优势

透明性:客户端访问远程文件的方式与访问本地文件几乎一致,用户无需关注文件的实际存储位
置,降低了使用复杂度。
跨平台性:NFS 支持多种操作系统,如 UNIX、Linux、macOS 等,能够实现不同操作系统之间的
文件共享。
高效性:通过优化的数据传输机制和缓存策略,NFS 能够提供较高的文件访问性能,满足多数网络
环境下的文件共享需求。
易于管理:NFS 的配置相对简单,管理员可以通过修改配置文件轻松设置共享目录、访问权限等,
便于集中管理网络中的文件资源。
##NFS 的局限性
安全性较弱(早期版本):NFSv3 及之前的版本在安全性方面存在不足,缺乏强大的身份认证和数
据加密机制,容易受到网络监听、身份伪造等攻击。虽然 NFSv4 引入了更多安全特性,但在一些对
安全性要求极高的场景中,仍需配合其他安全措施(如 VPN、防火墙)使用。
对网络依赖性强:NFS 的性能和可用性高度依赖网络状况,网络延迟、丢包等问题会直接影响文件
访问的速度和稳定性。
文件锁机制复杂:在多客户端同时访问同一文件时,NFS 的文件锁机制相对复杂,处理不当可能导
致数据不一致的问题。

NFS 的典型应用场景

企业内部文件共享:在企业局域网中,NFS 可以用于共享办公文档、软件安装包等资源,方便员工
在不同的计算机上访问和协作。
服务器集群存储:在 Web 服务器集群、数据库集群等场景中,NFS 可以为集群中的所有节点提供
统一的共享存储,确保各节点访问的数据一致性。
嵌入式系统:在一些嵌入式设备(如网络存储设备、路由器等)中,NFS 可以作为简单的文件共享
解决方案,实现设备与外部计算机的数据交互。
节点名称 ip地址 作用
nfs-server 10.1.8.20/24 提供共享存储
nfs-client1 10.1.8.21/24 NFS客户端
nfs-client2 10.1.8.22/24 NFS客户端

总结

总之,NFS 作为一种成熟的网络文件共享技术,凭借其简洁、高效、跨平台等优势,在各类网络环境中
得到了广泛应用。尽管存在一些局限性,但通过版本迭代和与其他技术的结合,NFS 仍然在网络存储领
域发挥着重要作用。

NFS 服务最佳实践

节点规划

在这里插入图片描述

部署服务

NFS服务由nfs-utils软件包提供。

# 安装软件包
[root@nfs-server ~]# yum install -y nfs-utils
[root@nfs-server ~]# yum install -y httpd
# 准备共享目录
[root@nfs-server ~]# mkdir -p /shares/webapp
[root@nfs-server ~]# chown apache /shares/webapp
# 启用并启动服务
[root@nfs-server ~]# systemctl enable nfs-server --now
# 配置防火墙
[root@nfs-server ~]# systemctl stop firewalld

配置 NFS 导出

NFS服务器主要配置文件是/etc/exports

配置示例:

在这里插入图片描述

常用的选项

在这里插入图片描述

监视 NFS 导出

在这里插入图片描述

客户端挂载

nfs-client1:

# 安装软件包
[root@nfs-client1 ~]# yum install -y nfs-utils httpd
[root@nfs-client1 ~]# id apache
uid=48(apache) gid=48(apache)=48(apache)
[root@nfs-client1 ~]# systemctl enable httpd --now
# 查看服务端提供的共享
[root@nfs-client1 ~]# showmount -e 10.1.8.20
Export list for storage:
/shares/webapp 10.1.8.0/24
# 挂载
[root@nfs-client1 ~]# mount -t nfs 10.1.8.20:/shares/webapp /var/www/html
# 验证
# 发现nfs-server上的/shares/webapp已经挂载到本地的/var/www/html
[root@nfs-client1 ~]# df -h | grep www
10.1.8.20:/shares/webapp 50G 4.9G 46G 10% /var/www/html

nfs-client2:

# 安装软件包
[root@nfs-client2 ~]# yum install -y nfs-utils httpd
[root@nfs-client2 ~]# id apache
uid=48(apache) gid=48(apache)=48(apache)
[root@client ~]# systemctl enable httpd --now
# 查看服务端提供的共享
[root@nfs-client2 ~]# showmount -e 10.1.8.20
Export list for storage:
/shares/webapp 10.1.8.0/24
# 挂载
[root@nfs-client2 ~]# mount -t nfs 10.1.8.20:/shares/webapp /var/www/html
# 验证
# 发现nfs-server上的/shares/webapp已经挂载到本地的/var/www/html
[root@nfs-client2 ~]# df -h | grep www
10.1.8.20:/shares/webapp 50G 4.9G 46G 10% /var/www/html

测试

# nfs-client1 创建了xiyangyang文件,nfs-clien2也能看到,证明使用了相同的共享存储10.1.8.20
[root@nfs-client1 ~]# touch /var/www/html/xiyangyang
[root@nfs-client2 ~]# ls /var/www/html/
xiyangyang

实战测试
在这里插入图片描述

持久化挂载

在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐