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