当前位置: 首页 > news >正文

NFS服务搭建与配置详解

目录

前言

一、NFS 服务介绍

1.1 什么是 NFS?

1.2 企业应用场景

1.3 核心组件

1.4 思维脑图

​编辑

二、配置文件深度解读

2.1 基本语法格式

2.2 共享目录

2.3 客户端地址(主机)

2.4 常用权限选项

三、NFS 服务管理命令

四、NFS 服务端搭建实战步骤

第一步:安装服务软件

第二步:设置开机自启

第三步:创建共享目录

第四步:配置共享资源

第五步:启动服务

第六步:验证服务状态

1. 检查 RPC 端口

2. 查看本机发布的 NFS 共享目录

两台 web服务器上挂载 NFS

1. 安装 NFS 客户端工具

2. 创建本地挂载点

3. 手动挂载测试

4. 验证挂载是否成功

5. 设置开机自动挂载

6. 重启 web服务


前言

在企业级应用架构中,为了实现多台服务器之间的数据共享(例如 Web 集群的后端存储),我们通常会使用 NFS(Network File System)。本文将详细介绍 NFS 的核心概念、配置文件解读以及从零搭建 NFS 服务的详细步骤。

一、NFS 服务介绍

1.1 什么是 NFS?

NFS(Network File System)即网络文件系统,是 FreeBSD 支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。

  • 主要用途:主要用于 Linux/Unix 系统之间实现文件共享。

  • 安全性注意:NFS 本身没有提供用户认证机制,且数据在网络上传送时通常是明文传送,因此一般只在安全的局域网内使用。

  • 并发能力:支持多节点同时挂载及并发写入。

1.2 企业应用场景

最典型的应用是为集群中的 Web Server(如 Nginx/Apache 集群)提供统一的后端存储。当用户上传文件到其中一台服务器时,其他服务器也能通过 NFS 访问到该文件。

1.3 核心组件

NFS 的运行依赖于以下两个关键组件:

  • RPC (Remote Procedure Call Protocol):远程过程调用协议。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。NFS 依赖 RPC 来传输数据。

  • rpcbind:负责 NFS 的数据传输,监听 TCP/UDP 的111端口。

  • nfs-utils:包含 NFS 的主服务程序,控制共享哪些文件以及权限管理。


1.4 思维脑图

二、配置文件深度解读

NFS 的主配置文件位于/etc/exports。我们可以通过man 5 exports获取帮助。

2.1 基本语法格式

共享目录 客户端地址(选项1,选项2,...)

示例:

/nfs/share *(ro,sync)

2.2 共享目录

指定要共享给客户端的本地文件夹路径。

2.3 客户端地址(主机)

定义谁可以访问这个共享目录:

  • *:代表允许所有主机访问。

  • 192.168.0.0/24:代表允许该网段内的所有 IP 访问。

  • 192.168.0.0/24(rw) 192.168.1.0/24(ro):针对不同网段设置不同权限(前一个读写,后一个只读)。

  • 192.168.0.254:仅允许单个特定 IP 访问。

  • *.itcast.com:允许特定域名下的所有主机访问。

2.4 常用权限选项

选项说明
ro只读 (Read-Only),客户端只能查看不能修改。
rw读写 (Read-Write),客户端拥有读写权限。
sync同步模式。数据会实时同步写入磁盘,安全性高但性能稍低(推荐生产环境使用)。
async异步模式。数据先写入内存缓冲区,不立即写入磁盘,性能好但断电可能丢数据。
no_root_squash重要安全选项。当客户端以 root 身份访问时,服务端也将其视为 root 用户(拥有最高权限)。默认情况下,root 会被映射为 nobody(普通用户)。

三、NFS 服务管理命令

安装完成后,我们可以使用exportfs命令来管理 NFS 共享列表,而无需重启服务。

  • exportfs -a:根据/etc/exports的配置,打开或取消所有目录共享(常用于配置修改后生效)。

  • exportfs -r:重新读取配置文件(Re-export),相当于先卸载再挂载所有共享。

  • exportfs -u:取消某个目录的共享。

  • exportfs -v:显示详细的共享选项信息。


四、NFS 服务端搭建实战步骤

以下是基于 CentOS/RHEL 系统的标准搭建流程:

第一步:安装服务软件

需要安装nfs-utils(NFS主程序)和rpcbind(RPC服务)。

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

第二步:设置开机自启

确保服务器重启后服务自动运行。

[root@localhost ~]# systemctl enable rpcbind [root@localhost ~]# systemctl enable nfs

第三步:创建共享目录

创建一个用于测试或生产的目录。

[root@localhost ~]# mkdir -pv /opt/wwwroot

第四步:配置共享资源

编辑/etc/exports文件。假设我们要将/opt/wwwroot共享给192.168.11.0/24网段,并赋予读写权限。

[root@localhost ~]# vim /etc/exports

文件内容添加如下行:

/opt/wwwroot 192.168.11.0/24(rw,sync,no_root_squash)

注意no_root_squash表示如果客户端用 root 登录,在服务端也是 root 权限,方便管理,但在公网环境需谨慎使用。

第五步:启动服务

关键点:NFS 依赖 RPC,所以必须先启动rpcbind,再启动nfs

[root@localhost ~]# systemctl restart rpcbind [root@localhost ~]# systemctl restart nfs

第六步:验证服务状态

1. 检查 RPC 端口

确认 rpcbind 正在监听 111 端口。

[root@localhost ~]# netstat -anpt | grep rpcbind tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 11551/rpcbind tcp6 0 0 :::111 :::* LISTEN 11551/rpcbind
2. 查看本机发布的 NFS 共享目录

使用showmount命令检查配置是否生效。

[root@localhost ~]# showmount -e Export list for localhost.localdomain: /opt/wwwroot 192.168.11.0/24

或者使用exportfs查看详细信息:

[root@localhost ~]# exportfs -rv exporting 192.168.11.0/24:/opt/wwwroot

两台 web服务器上挂载 NFS

我们需要在Nginx1 (154)Nginx2 (155)上执行相同的操作。

1. 安装 NFS 客户端工具

首先确保系统安装了nfs-utils包,它包含了挂载 NFS 所需的命令。

yum install -y nfs-utils

2. 创建本地挂载点

在本地创建一个目录,作为远程 NFS 共享目录的映射入口。

mkdir -p /var/www/html/uploads

3. 手动挂载测试

使用mount命令尝试将 NFS 服务器的共享目录挂载到本地。

  • NFS Server IP:192.168.30.156

  • 服务端共享路径:/opt/wwwroot

  • 本地挂载路径:/var/www/html/uploads

mount -t nfs 192.168.30.156:/opt/wwwroot /var/www/html/uploads

注意:如果等待时间过长或报错,请优先检查服务器防火墙是否放行了 NFS 相关端口(如 111, 2049 等),或者检查 SELinux 状态。

4. 验证挂载是否成功

挂载完成后,查看本地目录内容,确认是否能读取到 NFS 服务器上的文件。

ls /var/www/html/uploads df -h | grep nfs

5. 设置开机自动挂载

为了防止服务器重启后挂载失效,需要将挂载信息写入/etc/fstab文件。

echo "192.168.30.156:/opt/wwwroot /var/www/html/uploads nfs defaults,_netdev 0 0" >> /etc/fstab
  • _netdev:表示这是一个网络设备,系统会在网络启动后再进行挂载,避免启动报错。

6. 重启 web服务

为了确保权限和配置生效,建议重启 Nginx 服务。

systemctl restart nginx

http://www.jsqmd.com/news/1139910/

相关文章:

  • 【注意力机制】AAAI 2026 | Adaptive Cross-Fusion Attention (ACFA) — 自适应交叉融合注意力模块
  • AI漫剧技术解析:从《凤九歌》看生成式AI在影视创作的应用与挑战
  • 2026年AI API聚合平台选型指南:六大中转服务能力与企业级架构对比
  • 树莓派4B机械臂工程化实践:从脚本到实时控制平台
  • 凌源本地板材批发渠道推荐
  • 深入理解并发锁:从原子操作到分布式一致性的完整指南
  • Python开发入门:从零开始搭建你的第一个项目
  • JavaQuestPlayer:如何用Java构建跨平台的QSP游戏开发与运行一体化平台?
  • 深度解析Rive渲染器:高性能跨平台动画渲染引擎架构设计与实战应用
  • 专业级GTA5安全增强菜单完全指南:YimMenu终极教程
  • Blender拓扑优化革命:如何用QRemeshify将3D建模效率提升300%
  • 游戏模组开发实战:AES逆向工程与Hook技术解析
  • 无限制OCR技术解析:从Tesseract到分布式处理的长文档识别方案
  • ComfyUI整合包+KREA2模型:AI绘画环境一键部署与实战指南
  • Java开发第一道坎:JDK环境配置的底层原理与实战避坑指南
  • 机器人VLM捷径效应与泛化性实战分析
  • 创新Windows系统美化方案:DWMBlurGlass打造个性化毛玻璃标题栏
  • 3分钟掌握Blender四边形拓扑优化:QRemeshify实战指南
  • RIP动态实验
  • Global-AI_PET_v3 数据集实战:Python 加载 5.67GB 栅格数据并计算区域平均 AI
  • 一个月出差,8个“第一次”的实战收获
  • WorldQuant Alphathon 因子构建实战:5 类数据源与 3 种核心策略(动量/反转/情绪)解析
  • VScode写MarkDown文件,内嵌LaTex公式,Smiles公mermaid图--学习心得笔记
  • YOLOv10模型改进-损失函数改进-第85篇:YOLOv10改进策略【损失函数】| EIoU损失函数
  • IDM注册表锁定激活技术深度解析:永久试用期管理方案
  • 客户用AI搜“中国xxx供应商”,你的网站排第几?——GEO诊断方法
  • Spring浙江旅游推荐系统的设计与实现毕业设计任务书
  • 使用Deepseek进行Oracle恢复,引起重大故障---惜分飞
  • 管廊照明招标文件要求什么?五项“硬性要求”正在成为标配
  • 文件上传gitee