知鱼
子非鱼,焉知鱼之乐

存储网关场景验证与选型

trylab 发布于 2025-9-7 20:30    12 次阅读

问题意识

存储网关+对象存储,构建可挂载访问的文件目录

工作中接触到交付人员提出关于存储网关的具体问题:

  1. 是否需要开通服务器?
  2. 如何基于 IP+端口实现目录挂载 ?

有必要基于此实操,了解下配置方法、注意事项。

开发环境:Windows WSL
存储网关+对象存储:XX云厂商


Main

天翼云

仅约140MB的高度优化zip安装包,只需3个命令即可安装在Linux操作系统上,从安装包解压到集群初始化不超过3分钟

目前此服务已从标准产品目录中下架,需要从产品首页-公测申请 进入。

网络整体架构图:

  • 云存储网关内部各节点之间通过内网互联。
  • 云存储网关与上层应用之间通过内网或专线或公网互联。
  • 云存储网关与OOS之间通过专线或公网互联。
graph TD
    App[上层应用]

    subgraph 云存储网关
        CSG_Internal_Nodes[内部节点通过内网互联]
    end

    OOS_Service[OOS]

    App -- 内网 --> 云存储网关
    App -- 专线 --> 云存储网关
    App -- 公网 --> 云存储网关

    云存储网关 -- 专线 --> OOS_Service
    云存储网关 -- 公网 --> OOS_Service

    style App fill:#cde4ff
    style OOS_Service fill:#f9f9f9
    style CSG_Internal_Nodes fill:#e0ffe0

订购入口

|848x362

提交申请开通后,会有天翼云运维人员联系您安装部署事宜。

提交订购申请前请务必准备好存储网关服务器的登录信息,包括:外网IP地址、连接端口号、用户名、密码、云存储OOS的主AK\SK,运维人员将与您确认此信息后方可部署。

意思是,需要提前准备好云存储网关服务器环境,让运维协助部署。

  • 建议配置:4CPU/内存16GB/安装目录盘10GB/数据盘1TB,采用厚配置
  • 从这个配置来看,1T的数据盘,来做缓存,门槛挺高
  • 客户端软件很容易安装,为什么要等待运维人员联系安装呢?为什么不提供给客户,自行安装?

华为云

网关节点的缓存盘要求类似

|848x489

提供 自助下载 安装 软件包

x86_64 版本

|848x449

考虑到是测试安装过程,实际开了 1c1g 的测试环境

参考步骤 完成环境安装,记得打开安全组(7443),否则存储网关配置界面无法刷新。

|848x439

准备 对象存储 的AK/SK

一直卡在 磁盘名称刷新不出来的界面,可能是数据盘容量不到1T导致的?(已测试不是容量原因)

|848x273


从参考来看,网关初始化完成后,

  • 创建文件共享(构建对象存储桶到NFS的映射)
  • 挂载文件共享,在应用环境中挂载、并持久化

|848x147

从命令内容来看,最终是基于IP+共享名称的方式,而不是IP+端口号

以上两家云厂商的存储网关,最新更新是2年前,且主要场景都是面向Linux环境的NFS,对Windows环境常用的SMB支持,不可知;而Aliyun有对应功能,定价方式上也有差别。

  • 本文介绍的两个云厂商,需要用户准备主机环境,并做出额定需求,成本由安装主机端收取,相比之下 Ali 是通过SaaS化的控制台定义和安装,缓存盘容量、带宽等可相对灵活设置

回顾问题意识中提及的2个问题:

  • 通常需要开通服务器,尤其是本文介绍的2个云厂商的存储网关软件,缓存盘配置要求比较高,通常业务主机很难支持
  • 实际不是 IP+ 端口号的方式实现目录挂载,而是通过 IP+共享目录名称(创建时自定义)实现挂载

最近2年随着行业场景对存储需求越来越大,业界逐渐发展出独立的存储中间件产品,本文将其定义为 非存储网关挂载方案,简单罗列如下

非存储网关的挂载方案

将对象存储(如 AWS S3、阿里云 OSS、Google Cloud Storage 等)挂载到 Linux 主机上当做本地目录来使用,是非常常见的需求。

这类工具和产品有很多,它们通常通过 FUSE (Filesystem in Userspace) 技术或者 NFS/SMB 协议转换来实现,可以大致分为以下几类:

一、开源工具 (自己部署和维护)

这类工具灵活、免费,功能强大,适合有一定技术能力的团队。

1. JuiceFS

这是一个非常出色的高性能分布式文件系统,专为云环境设计。它将数据存储在对象存储中,同时将文件元数据存储在独立的数据库(如 Redis, MySQL, PostgreSQL)中。

  • 优点:

    • 高性能: 通过元数据独立存储和强大的客户端缓存机制,提供远超传统 s3fs 这类工具的性能,特别是在处理大量小文件和元数据密集型操作时。

    • 强一致性: 保证 POSIX 完全兼容,可以像本地文件系统一样使用,无缝支持各种复杂应用。

    • 功能丰富: 支持数据压缩、加密、快照、回收站等高级功能。

    • 跨云支持: 可以将后端数据存储在几乎所有主流的对象存储上。

  • 适用场景: 大数据分析、AI 训练、海量日志存储、开发测试环境等对性能和 POSIX 兼容性要求高的场景。

数据格式在存到对象存储时,会被重新组织,重命名成新的数据块。

重组后的数据分片是看不出源文件特征的,后续检索需要依赖 JuiceFS 自构建的元数据来检索,这说明 JuiceFS 在设计之初,并不是面向数据备份场景设计的,其重构数据分片,是想优化数据检索和修改过程,即对文件系统的增强。

选型 JuiceFS 做数据备份,一定要考虑到上述特征带来的数据检索和后续迁移”问题“。

2. s3fs-fuse

这是一个比较老牌和知名的 FUSE 工具,专门用于将 S3 或其他兼容 S3 协议的对象存储挂载到 Linux。

  • 优点:

    • 简单易用: 安装和配置相对简单,使用广泛,社区文档丰富。

    • 兼容性好: 支持大多数 S3 兼容的存储。

  • 缺点:

    • 性能瓶颈: 性能相对较低,因为每次文件操作(特别是元数据操作如 ls)都可能转化为多次 HTTP 请求,延迟较高,不适合 I/O 密集型应用。

    • POSIX 兼容性不完整: 对于某些原子操作和文件锁的支持有限。

  • 适用场景: 简单的文件归档、备份数据访问、日志查看等对性能要求不高的场景。

3. goofys (Goofy FUSE Filesystem)

这是一个追求高性能的 FUSE 工具,在设计上做出了一些权衡。

  • 优点:

    • 性能较高: 特别是在大文件读写和 ls 等操作上,性能通常优于 s3fs

    • 部署简单: 单个二进制文件,配置简单。

  • 缺点:

    • 牺牲部分 POSIX 兼容性: 为了性能,它没有实现一些不常用的 POSIX 功能,如 rename 的原子性、文件锁等。
  • 适用场景: 数据分析、日志流式读取等大文件读写为主、对 POSIX 兼容性要求不那么严格的场景。

4. rclone mount

Rclone 被誉为“云存储的瑞士军刀”,它支持挂载几十种不同的云存储(包括各种对象存储)。

  • 优点:

    • 支持广泛: 支持的后端存储服务非常多,远不止 S3。

    • 功能强大: 除了 mount,还集成了 sync, copy, move 等非常强大的数据管理功能。

    • 带缓存: 挂载时可以配置多种缓存策略,提升访问性能。

  • 缺点:

    • 性能和 POSIX 兼容性介于 s3fsJuiceFS 之间,具体表现取决于配置和使用场景。
  • 适用场景: 需要统一管理多种不同云存储、偶尔需要挂载访问的场景。

观点:

  • 2/3 都是非存储网关的客户端软件,适合在业务主机上安装,并实现数据的备份、转移,是比较适合问题意识中描述的场景(数据备份、少量几乎没有对象存储的修改)
  • 4 是云存储挂载工具,特点是具备广泛的存储挂载方式

如何选择?

工具/产品 类型 性能 POSIX 兼容性 核心优势 适合场景
JuiceFS 开源软件 非常高 完全兼容 高性能、强一致性、全功能分布式文件系统 AI训练、大数据、共享文件存储等严肃生产环境
s3fs-fuse 开源软件 较低 部分兼容 简单、老牌、易于上手 简单归档、备份文件访问、低频读写
goofys 开源软件 较高 部分兼容 读写性能高、部署简单 大文件读写、日志分析、数据仓库
rclone mount 开源软件 中等 部分兼容 支持的后端存储极多、功能全面 多云存储管理、临时挂载需求
云存储网关 (AWS/Aliyun) 托管服务/产品 高 (有缓存) 完全兼容 (NFS/SMB) 托管服务、无缝集成、稳定可靠 企业混合云、数据迁移、备份归档
Azure NFS / GCS FUSE 云原生功能 良好 良好 与云平台深度集成、使用便捷 特定云平台用户

简单总结建议:

  • 追求高性能和强兼容性的生产环境: 强烈推荐 JuiceFS

  • 临时或轻量级访问: s3fs-fuserclone mount 足够了。

  • 读写大文件为主,不太关心原子操作: 可以尝试 goofys

  • 企业级混合云,希望有厂商支持: 选择你所使用的云厂商的存储网关产品(如 AWS Storage Gateway)。

附录

POSIX (Portable Operating System Interface) 和 FUSE (Filesystem in Userspace) 是两个在文件系统和操作系统领域中非常重要的概念,它们之间存在密切的关联。

POSIX 是什么?

POSIX 是一系列由 IEEE 制定的标准,旨在规范操作系统(主要是类 Unix 系统)的应用程序接口 (API)。它的目标是提高应用程序在不同 Unix 操作系统之间的可移植性

简单来说,POSIX 定义了应用程序如何与操作系统进行交互,包括:

  • 文件系统操作: 如何创建、读取、写入、删除文件和目录,以及文件权限、所有权等
  • 进程管理: 如何创建、控制和终止进程。
  • 线程管理: 如何使用多线程。
  • 信号处理: 如何处理系统事件。
  • I/O 操作: 如何进行输入/输出。

当一个文件系统被称为“POSIX 兼容”时,意味着它支持 POSIX 标准中定义的所有文件操作语义,例如文件锁、原子操作、硬链接、软链接、权限管理等,使得应用程序可以像操作本地文件系统一样操作它,而无需修改代码。

文件系统通常是独立封装的专用系统,POSIX作为行业指定的标准,旨在面向不同工具提供类似文件系统的访问接口,从而丰富场景应用。

FUSE 是什么?

FUSE (Filesystem in Userspace) 是一种允许非特权用户在用户空间(而不是内核空间)开发文件系统的机制。通常,文件系统需要在操作系统内核中实现,这使得开发和调试非常复杂。FUSE 通过提供一个桥梁,让用户空间的程序能够处理文件系统的请求(如读取、写入、查找文件等),然后将这些请求转发给内核。

FUSE 的核心思想是:

  1. 用户空间实现: 文件系统的逻辑(例如如何存储数据、如何处理元数据)在用户空间的程序中实现。
  2. 内核模块: 一个小的内核模块负责将来自应用程序的文件系统操作请求(例如 open(), read(), write())拦截并转发给用户空间的文件系统程序。
  3. 灵活性: 极大地降低了开发新文件系统的门槛,允许开发者利用各种后端存储(如对象存储、网络协议、加密存储等)创建自定义文件系统。

两者有什么关联?

POSIX 和 FUSE 的关联主要体现在 FUSE 文件系统通常会努力实现 POSIX 兼容性:

  1. FUSE 旨在提供 POSIX 接口: FUSE 机制本身就是为了让用户空间的文件系统能够对外提供一个标准的、类 POSIX 的文件系统接口。当应用程序通过 FUSE 挂载点访问文件时,它期望的是一个行为符合 POSIX 标准的文件系统。
  2. 实现 POSIX 兼容性是 FUSE 文件系统的目标: 许多基于 FUSE 的文件系统(例如你的笔记中提到的 s3fs-fusegoofysJuiceFS 等)都致力于将底层存储(如对象存储)的非文件系统特性转换为 POSIX 文件系统的行为。
    • 例如,对象存储本身没有目录概念,但 FUSE 文件系统会模拟目录结构。
    • 对象存储通常不直接支持文件锁或原子重命名,FUSE 文件系统需要通过额外的逻辑来模拟或部分实现这些 POSIX 特性。
  3. 兼容性程度不同: 不同的 FUSE 文件系统在实现 POSIX 兼容性方面会有所不同。
    • s3fs-fusegoofys 为了性能或简化实现,可能会牺牲部分 POSIX 兼容性(例如,对文件锁、原子操作的支持可能不完整)。
    • 而像 JuiceFS 这样的高性能分布式文件系统,则明确强调其“完全兼容 POSIX”,这意味着它在设计上投入了更多精力来确保所有 POSIX 文件系统语义都能正确实现,从而支持更广泛的应用程序。

总结来说,FUSE 提供了一种在用户空间构建文件系统的技术,而 POSIX 则定义了这些文件系统应该遵循的行为标准。FUSE 文件系统通过实现 POSIX 标准,使得底层非文件系统存储(如对象存储)能够像本地文件系统一样被应用程序访问和使用。