存储网关场景验证与选型
问题意识
存储网关+对象存储,构建可挂载访问的文件目录
工作中接触到交付人员提出关于存储网关的具体问题:
- 是否需要开通服务器?
- 如何基于 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
提交申请开通后,会有天翼云运维人员联系您安装部署事宜。
提交订购申请前请务必准备好存储网关服务器的登录信息,包括:外网IP地址、连接端口号、用户名、密码、云存储OOS的主AK\SK,运维人员将与您确认此信息后方可部署。
意思是,需要提前准备好云存储网关服务器环境,让运维协助部署。
- 建议配置:4CPU/内存16GB/安装目录盘10GB/数据盘1TB,采用厚配置
- 从这个配置来看,1T的数据盘,来做缓存,门槛挺高
- 客户端软件很容易安装,为什么要等待运维人员联系安装呢?为什么不提供给客户,自行安装?
华为云
网关节点的缓存盘要求类似
提供 自助下载 安装 软件包
考虑到是测试安装过程,实际开了 1c1g 的测试环境
参考步骤 完成环境安装,记得打开安全组(7443),否则存储网关配置界面无法刷新。
准备 对象存储 的AK/SK
一直卡在 磁盘名称刷新不出来的界面,可能是数据盘容量不到1T导致的?(已测试不是容量原因)
从参考来看,网关初始化完成后,
- 创建文件共享(构建对象存储桶到NFS的映射)
- 挂载文件共享,在应用环境中挂载、并持久化
从命令内容来看,最终是基于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 兼容性: 为了性能,它没有实现一些不常用的 POSIX 功能,如
-
适用场景: 数据分析、日志流式读取等大文件读写为主、对 POSIX 兼容性要求不那么严格的场景。
4. rclone mount
Rclone 被誉为“云存储的瑞士军刀”,它支持挂载几十种不同的云存储(包括各种对象存储)。
-
优点:
-
支持广泛: 支持的后端存储服务非常多,远不止 S3。
-
功能强大: 除了
mount
,还集成了sync
,copy
,move
等非常强大的数据管理功能。 -
带缓存: 挂载时可以配置多种缓存策略,提升访问性能。
-
-
缺点:
- 性能和 POSIX 兼容性介于
s3fs
和JuiceFS
之间,具体表现取决于配置和使用场景。
- 性能和 POSIX 兼容性介于
-
适用场景: 需要统一管理多种不同云存储、偶尔需要挂载访问的场景。
观点:
- 2/3 都是非存储网关的客户端软件,适合在业务主机上安装,并实现数据的备份、转移,是比较适合问题意识中描述的场景(数据备份、少量几乎没有对象存储的修改)
- 4 是云存储挂载工具,特点是具备广泛的存储挂载方式
如何选择?
工具/产品 | 类型 | 性能 | POSIX 兼容性 | 核心优势 | 适合场景 |
---|---|---|---|---|---|
JuiceFS | 开源软件 | 非常高 | 完全兼容 | 高性能、强一致性、全功能分布式文件系统 | AI训练、大数据、共享文件存储等严肃生产环境 |
s3fs-fuse | 开源软件 | 较低 | 部分兼容 | 简单、老牌、易于上手 | 简单归档、备份文件访问、低频读写 |
goofys | 开源软件 | 较高 | 部分兼容 | 读写性能高、部署简单 | 大文件读写、日志分析、数据仓库 |
rclone mount | 开源软件 | 中等 | 部分兼容 | 支持的后端存储极多、功能全面 | 多云存储管理、临时挂载需求 |
云存储网关 (AWS/Aliyun) | 托管服务/产品 | 高 (有缓存) | 完全兼容 (NFS/SMB) | 托管服务、无缝集成、稳定可靠 | 企业混合云、数据迁移、备份归档 |
Azure NFS / GCS FUSE | 云原生功能 | 良好 | 良好 | 与云平台深度集成、使用便捷 | 特定云平台用户 |
简单总结建议:
-
追求高性能和强兼容性的生产环境: 强烈推荐 JuiceFS。
-
临时或轻量级访问: s3fs-fuse 或 rclone 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 的核心思想是:
- 用户空间实现: 文件系统的逻辑(例如如何存储数据、如何处理元数据)在用户空间的程序中实现。
- 内核模块: 一个小的内核模块负责将来自应用程序的文件系统操作请求(例如
open()
,read()
,write()
)拦截并转发给用户空间的文件系统程序。 - 灵活性: 极大地降低了开发新文件系统的门槛,允许开发者利用各种后端存储(如对象存储、网络协议、加密存储等)创建自定义文件系统。
两者有什么关联?
POSIX 和 FUSE 的关联主要体现在 FUSE 文件系统通常会努力实现 POSIX 兼容性:
- FUSE 旨在提供 POSIX 接口: FUSE 机制本身就是为了让用户空间的文件系统能够对外提供一个标准的、类 POSIX 的文件系统接口。当应用程序通过 FUSE 挂载点访问文件时,它期望的是一个行为符合 POSIX 标准的文件系统。
- 实现 POSIX 兼容性是 FUSE 文件系统的目标: 许多基于 FUSE 的文件系统(例如你的笔记中提到的
s3fs-fuse
、goofys
、JuiceFS
等)都致力于将底层存储(如对象存储)的非文件系统特性转换为 POSIX 文件系统的行为。- 例如,对象存储本身没有目录概念,但 FUSE 文件系统会模拟目录结构。
- 对象存储通常不直接支持文件锁或原子重命名,FUSE 文件系统需要通过额外的逻辑来模拟或部分实现这些 POSIX 特性。
- 兼容性程度不同: 不同的 FUSE 文件系统在实现 POSIX 兼容性方面会有所不同。
- 像
s3fs-fuse
和goofys
为了性能或简化实现,可能会牺牲部分 POSIX 兼容性(例如,对文件锁、原子操作的支持可能不完整)。 - 而像
JuiceFS
这样的高性能分布式文件系统,则明确强调其“完全兼容 POSIX”,这意味着它在设计上投入了更多精力来确保所有 POSIX 文件系统语义都能正确实现,从而支持更广泛的应用程序。
- 像
总结来说,FUSE 提供了一种在用户空间构建文件系统的技术,而 POSIX 则定义了这些文件系统应该遵循的行为标准。FUSE 文件系统通过实现 POSIX 标准,使得底层非文件系统存储(如对象存储)能够像本地文件系统一样被应用程序访问和使用。