背景

公司有一个前后端不分离的单体项目,遇到一个场景,甲方要求应用服务分别部署到两台不同的服务器(Windows Server 2022)上,通过网关负载均衡进行访问(集群部署)。

其中项目中有块业务涉及到文件上传、在线预览等功能。项目是部署在内网服务器,并且甲方也没有提供专门的文件服务器,所以项目中的文件上传都是上传到应用服务所在服务器上,因为是集群部署负载均衡进行访问,避免两台应用服务器之间的文件不同步,导致用户预览时异常,最终选择了 NFS 网络文件系统 实现共享文件夹。

NFS 共享文件夹实现步骤

Windows 服务器

准备工作

  1. 需要配置源服务器(被共享文件夹所在的服务器)的防火墙端口 1112049
  2. 可以先关闭两台机器的防火墙,配置完成之后再打开,如果有问题再检查防火墙出入站规则

安装 NFS 服务器功能(已安装可略过)

  1. 打开服务器管理器,添加角色和功能

image-20230818171512533

image-20230818171638594

image-20230818171728872

image-20230818171801367

image-20230818171914089

image-20230818172010661

  1. 安装所选功能,默认 下一步 -> 安装 即可

image-20230818172537913

在源服务器上设置共享文件夹

  1. 选中需要共享的文件夹,右键属性,设置 NFS 共享

image-20230818173043659

image-20230818173126286

  1. 设置读写权限

image-20230818173159245

在目标服务器上添加网络驱动器

image-20230818173737941

image-20230918140756876

映射完成之后会在此电脑中的网络位置中显示

image-20230918140849304

可以通过命令创建目录链接,将网络位置添加的 Z 盘映射成一个文件目录,供其他位置使用

命令如下:

1
mklink /H D:\opt Z:\

Linux 服务器

步骤如下:

192.168.116.17 作为服务端,共享数据给 192.168.116.18

服务端配置

  1. 安装 nfs server

  2. 设置 nfs 共享目录

  3. 重启 nfs server

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装 nfs server(Ubuntu 系统)
sudo apt-get install nfs-kernel-server nfs-common
# 安装 nfs server(Centos 系统)
sudo yum install nfs-utils

# 设置 nfs 共享目录
sudo vim /etc/exports
/u01/opt *(rw,no_root_squash,sync)

# 重启 nfs server(Ubuntu 系统)
sudo service nfs-kernel-server restart
# 重启 nfs server(Centos 系统)
sudo systemctl restart nfs-server

客户端配置

  1. 安装 nfs client
  2. 查看服务端上共享的目录
  3. 创建共享挂载点,并执行挂载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装 nfs client(Ubuntu 系统)
sudo apt-get install nfs-common
# 安装 nfs client(Centos 系统)
sudo yum install nfs-common

# 查看服务端上共享的目录
showmount -e 192.168.116.17

# 创建共享挂载点,并执行挂载
mkdir -p /u01/opt
mount -t nfs 192.168.116.17:/u01/opt /u01/opt

# 设置开机自动挂载
# Ubuntu 系统
192.168.116.17:/u01/opt /u01/opt nfs defaults 0 0
# CentOS 系统
192.168.88.230:/u01/opt /u01/opt nfs rw,auto,nofail,noatime,nolock,intr,tcp,actimeo=1800,noac 0 0

# 取消挂载
umount -lf /u01/opt

总结

本文简单记录了 Windows 服务器、Linux 服务器上使用 NFS 共享文件夹的步骤。