S3 网关
JuiceFS S3 网关是 JuiceFS 支持的多种访问方式之一,它可以将 JuiceFS 文件系统以 S3 协议对外提供服务,使得应用可以通过 S3 SDK 访问 JuiceFS 上存储的文件。
架构与原理
在 JuiceFS 中,文件是以对象的形式分块存储到底层的对象存储中。JuiceFS 提供了 FUSE POSIX、WebDAV、S3 网关、CSI 驱动等多种访问方式,其中 S3 网关是较为常用的一种,其架构图如下:
JuiceFS S3 网关功能是通过 MinIO S3 网关实现的。我们利用 MinIO 的 object 接口
将 JuiceFS 文件系统作为 MinIO 服务器的后端存储,提供 接近原生 MinIO 的使用体验,同时继承 MinIO 的许多高级功能。在这种架构中,JuiceFS 就相当于 MinIO 实例的一块本地磁盘,原理与 minio server /data1
命令类似。
JuiceFS S3 网关的常见的使用场景有:
- 为 JuiceFS 开放 S3 接口:应用可以通过 S3 SDK 访问 JuiceFS 上存储的文件;
- 使用 S3 客户端:使用 s3cmd、AWS CLI、MinIO 客户端来方便地访问和操作 JuiceFS 上存储的文件;
- 管理 JuiceFS 中的文件:S3 网关提供了一个基于网页的文件管理器,可以在浏览器中管理 JuiceFS 中的文件;
- 集群复制:在跨集群复制数据的场景下,作为集群的统一数据出口,避免跨区访问元数据以提升数据传输性能,详见「使用 S3 网关进行跨区域数据同步」
快速开始
启动 S3 网关需要一个已经创建完毕的 JuiceFS 文件系统,如果尚不存在,请参考文档来创建。下方假定元数据引擎 URL 为 redis://localhost:6379/1
。
由于网关基于 MinIO 开发,因此需要先设置 MINIO_ROOT_USER
和 MINIO_ROOT_PASSWORD
两个环境变量,他们会成为访问 S3 API 时认证身份用的 Access Key 和 Secret Key,是拥有最高权限的管理员凭证。
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
# Windows 用户请改用 set 命令设置环境变量
set MINIO_ROOT_USER=admin
注意,MINIO_ROOT_USER
的长度至少 3 个字符, MINIO_ROOT_PASSWORD
的长度至少 8 个字符,如果未能正确设置,将会遭遇类似 MINIO_ROOT_USER should be specified as an environment variable with at least 3 characters
的报错,注意排查。
启动 S3 网关:
# 第一个参数是元数据引擎的 URL,第二个是 S3 网关监听的地址和端口
juicefs gateway redis://localhost:6379/1 localhost:9000
# 从 v1.2 开始,S3 网关支持后台启动,追加 --background 或 -d 参数均可
# 后台运行场景下,使用 --log 指定日志输出文件路径
juicefs gateway redis://localhost:6379 localhost:9000 -d --log=/var/log/juicefs-s3-gateway.log
S3 Gateway 默认没有启用多桶支持,可以添加 --multi-buckets
选项开启。还可以添加其他选项优化 S3 网关,比如,可以将默认的本地缓存设置为 20 GiB。
juicefs gateway --cache-size 20480 redis://localhost:6379/1 localhost:9000
在这个例子中,我们假设 JuiceFS 文件系统使用的是本地的 Redis 数据库。当 S3 网关启用时,在当前主机上可以使用 http://localhost:9000
这个地址访问到 S3 网关的管理界面。
如果你希望通过局域网或互联网上的其他主机访问 S3 网关,则需要调整监听地址,例如:
juicefs gateway redis://localhost:6379/1 0.0.0.0:9000