华为云弹性文件服务SFS Turbo实战:多台ECS共享目录挂载与权限配置
一、背景:什么时候需要共享文件存储
多台云服务器共同读写同一批文件,是很常见的需求:Web 集群共享上传目录、机器学习训练节点共享数据集、CI 构建机共享依赖缓存、内容站点共享静态资源。如果把文件放在某一台 ECS 的本地盘再通过 NFS 手工导出,既要自己维护高可用,又要处理网络与权限问题;把文件全部塞进对象存储,又未必适合需要 POSIX 文件语义(随机写、目录锁、rename 原子性)的应用。
华为云 弹性文件服务 SFS Turbo 提供高性能、可扩展的共享文件存储,支持 NFS 协议,可被同一 VPC 内多台 ECS(以及部分容器场景)同时挂载。本文以“两台 ECS 共享业务上传目录”为主线,介绍文件系统创建、挂载与开机自动挂载、权限与并发注意点、监控扩容以及和 OBS、EVS 的选型对比。
二、核心概念
| 概念 | 说明 |
|---|---|
| 文件系统 | 一块可挂载的共享存储空间,有独立的共享路径(通常形如 地址:/) |
| SFS Turbo | 面向低时延、高 IOPS 场景的文件存储类型,适合热点小文件与共享工作目录 |
| 协议 | 常见为 NFSv3,部分类型支持更多协议,以控制台可选为准 |
| 挂载点 | ECS 上的本地目录,例如 /mnt/sfs/upload |
| VPC 与安全组 | 文件系统绑定 VPC,ECS 需与其网络互通,并放通 NFS 相关端口 |
| 容量与性能 | 容量规格影响可用空间与性能基线,支持在线扩容(以产品能力为准) |
三、准备工作
- 网络:准备好业务所在 VPC 与子网;SFS Turbo 需要与 ECS 位于可互通的网络环境(通常为同一 VPC);
- ECS:至少两台测试用 Linux ECS,已能 SSH 登录,并安装了 NFS 客户端工具;
- 安全组:计划放通 NFS 所需端口(常见涉及 TCP/UDP 111、2049 等,以官方文档当前说明为准),来源限制为业务子网而不是
0.0.0.0/0; - 权限:账号具备 SFS Turbo 与 VPC 相关操作权限。
在 ECS 上安装客户端(以 EulerOS / CentOS 系为例):
sudo yum install -y nfs-utils
# Ubuntu / Debian 则为: sudo apt-get install -y nfs-common
rpcinfo -p localhost 2>/dev/null | head
四、创建 SFS Turbo 文件系统
登录华为云控制台,进入“弹性文件服务”,创建 SFS Turbo 文件系统,关键项:
- 区域:与 ECS 同一区域,避免跨区域挂载带来的时延与额外复杂度;
- 可用区:选择与主要计算节点相同或就近的可用区;
- 存储类型 / 规格:按小文件密度、时延要求和容量选择,具体规格名称以控制台为准;
- 容量:按业务增长预留,后续一般支持扩容,但缩容能力要看产品是否支持;
- 网络:选择业务 VPC 与子网,确认自动分配的虚拟 IP / 挂载地址;
- 安全组:绑定仅对业务网段开放 NFS 端口的安全组。
创建完成后,在文件系统详情页复制 挂载地址(例如 192.168.1.12:/),后续所有 ECS 都使用同一地址。
五、在 ECS 上挂载
5.1 手动挂载验证
在第一台 ECS 上:
sudo mkdir -p /mnt/sfs/upload
sudo mount -t nfs -o vers=3,timeo=600,retrans=3,rsize=1048576,wsize=1048576 \
<挂载地址的IP>:/ /mnt/sfs/upload
df -h /mnt/sfs/upload
mount | grep sfs
写入测试文件后再到第二台 ECS 用同样命令挂载,确认能读到该文件:
echo "hello from ecs-01" | sudo tee /mnt/sfs/upload/hello.txt
# 在 ecs-02 上
cat /mnt/sfs/upload/hello.txt
若挂载失败,按下面顺序排查:
ping/telnet <挂载IP> 2049看网络与端口是否通;- 核对 ECS 与文件系统是否在同一 VPC、路由是否可达;
- 检查两端安全组及网络 ACL;
- 确认命令中的导出路径(
:/)与控制台一致,未多写目录名。
5.2 写入 fstab 实现开机自动挂载
手动挂载验证成功后,写入 /etc/fstab,避免重启后目录丢失:
# 追加一行(示例)
echo '<挂载地址的IP>:/ /mnt/sfs/upload nfs vers=3,timeo=600,retrans=3,_netdev 0 0' \
| sudo tee -a /etc/fstab
sudo umount /mnt/sfs/upload
sudo mount -a
df -h /mnt/sfs/upload
_netdev 很重要:它告诉系统等网络就绪后再挂载,减少开机时因网络未就绪导致的挂载失败。修改 fstab 后务必执行一次 mount -a,避免下次重启才发现写错。
六、权限、所有者与多客户端并发
共享文件系统上的权限模型仍遵循 Linux UID/GID。多台 ECS 若使用不同的本地用户 UID,会出现“在 A 机创建的文件,在 B 机变成别人的文件”的错觉。建议:
- 统一业务用户 UID/GID:例如各节点都使用
app:app且 UID/GID 同为2001; - 目录权限:对共享根目录设置合理的属主与
umask,应用以同一用户读写; - 避免多进程无协调地写同一文件:NFS 上的锁行为与本地盘不完全相同,关键文件写入应在应用层做互斥或写临时文件再
rename; - 不把数据库数据目录放在普通共享 NFS 上:数据库需要的是块存储低时延与强一致语义,应使用云硬盘 EVS 或云数据库服务。
示意:
sudo groupadd -g 2001 app
sudo useradd -u 2001 -g app -M -s /sbin/nologin app
sudo chown -R app:app /mnt/sfs/upload
sudo chmod 775 /mnt/sfs/upload
七、监控、扩容与备份思路
在控制台关注文件系统的容量使用率、读写带宽、IOPS、时延等指标,并对接云监控告警,例如:
- 容量使用率持续超过 80%;
- 客户端挂载数异常下降(可能大面积掉挂载);
- 读写时延明显高于基线。
容量不足时按控制台指引扩容;扩容一般不中断挂载,但大目录的 ls、统计类操作仍可能受元数据压力影响,应避免在高峰期做全量扫描。
备份方面,SFS Turbo 的数据保护能力以产品当前提供的备份/快照特性为准。若业务文件需要跨区域容灾或长期归档,可定期同步到对象存储 OBS(例如用定时任务把冷数据拷贝到 OBS 生命周期桶),热数据仍留在 SFS 供应用 POSIX 访问。
八、和 OBS、EVS 怎么选
| 需求 | 更合适的服务 |
|---|---|
| 多台 ECS 共享同一目录,需要文件语义 | SFS Turbo |
| 单机高性能力盘、数据库、独享数据 | EVS 云硬盘 |
| 海量非结构化对象、静态资源分发、生命周期归档 | OBS |
| 容器只读配置或小规模共享 | 也可评估 K8s 的 PVC + 文件存储类,需看集群与驱动支持情况 |
一句话:要“盘”用 EVS,要“网盘式多机共享目录”用 SFS,要“海量对象与 CDN/静态站”用 OBS。
九、常见坑
- 开机挂载失败:fstab 缺少
_netdev,或安全组在扩容/重建后变更;可用systemd的自动挂载或云初始化脚本做补偿检查; - 权限错乱:各 ECS 本地 UID 不一致;先统一账号再迁数据;
- 性能不及预期:大量小文件随机读写时,注意客户端
rsize/wsize、应用是否频繁fsync,以及是否选错了存储规格;先用fio在测试目录做基线,再对比业务指标; - 误把源站关键数据只放一份共享存储:仍要有备份与恢复演练,共享不等于安全;
- 跨 VPC 挂载:默认同一 VPC 最简单;跨 VPC 需要对等连接或云连接等打通路由,并同步放通安全组,复杂度明显高于同 VPC;
- 忘记清理测试挂载:临时 ECS 释放前先
umount,避免文件系统侧残留异常客户端信息(视产品表现而定)。
十、总结
SFS Turbo 让多台 ECS 以标准 NFS 方式共享同一套目录,免去自建文件服务器的运维负担。实践主线是:在业务同 VPC 创建文件系统并收敛安全组;用统一挂载参数完成验证后写入带 _netdev 的 fstab;跨节点统一 UID/GID 并在应用层避免无协调并发写;以容量与时延为核心配置监控,按需扩容,并把冷数据备份到 OBS。按这个路径落地,Web 集群共享上传目录、构建缓存共享一类需求可以稳定跑在华为云上。
- 点赞
- 收藏
- 关注作者
评论(0)