架构

Ozone S3 网关

师成师成· 更新于 2026-09-28· 阅读 5 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Apache Ozone 的 S3 Gateway(通常简称为 S3G)是一个为 Ozone 的对象存储提供 Amazon S3 兼容 REST 接口的组件。本质上,它允许任何 S3 客户端或工具在 Ozone 中读写数据,就像在与 AWS S3 交互一样。S3 Gateway 作为一个独立的、无状态的服务运行在 Ozone 之上,将 HTTP S3 API 调用转换为 Ozone 的原生存储操作。

这种设计使用户无需修改应用,就能将丰富的 S3 兼容应用生态与 Ozone 结合使用。

S3 Gateway 高层概述

Ozone 的 S3 Gateway 充当一个 REST 前端,使用 S3 协议并将之桥接到 Ozone 后端。它是无状态的,即不会在请求之间于本地持久化任何数据或元数据——所有状态都保存在 Ozone 集群本身之中。

无状态使得可以将多个 S3 Gateway 实例并行部署在负载均衡器之后,以实现横向扩展和高可用。无状态的特性也让 S3G 可以相当轻松地部署在 Kubernetes 中。该网关支持广泛的 S3 操作——创建/删除桶、PUT/GET 对象、列出对象、执行分片上传——可使用标准的 S3 SDK 或 CLI 工具。

在底层,每个操作都会被转换为相应的 Ozone 调用:

  • PUT 对象请求会变成 putKey 写操作。
  • GET 对象会变成 getKey 读操作。

S3 与 Ozone 概念的映射

在 Ozone 中,数据被组织为卷(volume)、桶(bucket)和键(key)。默认情况下,S3 Gateway 使用一个名为 /s3v 的特殊卷来存储所有 S3 桶(可通过 ozone.s3g.volume.name 属性配置)。

每个创建的 S3 桶在 Ozone 中都表示为 /s3v 卷下的一个桶。对象(键)存储在这些桶内。这种映射对最终用户是透明的。

S3 桶的默认桶布局(OBJECT_STORE)可以通过 ozone.s3g.default.bucket.layout 属性进行配置。该属性定义了通过 S3 Gateway 创建的桶的存储布局。

Ozone 架构中的 S3 Gateway

S3 Gateway 的职责如下:

  • 从客户端接收 S3 REST API 调用。
  • 将其转换,并把元数据操作转发给 OM。
  • 直接在 Datanode 之间流式传输数据。

这个无状态网关可以水平扩展。

内部组件与设计

HTTP 服务器与 REST API 层

运行一个内嵌的 HTTP 服务器,暴露如下 REST 端点:

  • PUT /<bucket>/<key>
  • GET /<bucket>/<key>

负责处理认证头、内容长度和路由。

请求处理器 / 协议转换

每个 S3 操作都映射到 Ozone API:

  • 创建桶 → 在 /s3v 卷中创建
  • 列出桶 → 查询 /s3v 下该用户拥有的所有桶
  • 上传/获取对象 → putKey / getKey

它还会组装符合 S3 规范的响应格式。

Ozone 客户端集成

使用 Ozone 客户端库来:

  • 调用 OM 进行元数据操作
  • 与 Datanode 之间流式传输数据

批量数据不会经过 OM —— 它直接在网关与数据节点之间传输。

无状态与缓存

该网关:

  • 不持久化状态
  • 使用轻量级的内存缓存
  • 依赖 OM 进行协调以及用户/token 校验

这简化了扩缩容和故障恢复。

认证与安全

支持 AWS Signature 风格的认证(若已启用):

  • 仅支持 AWS Signature V4(不支持较旧的 AWS Signature V2)
  • 通过 OM 校验访问密钥/秘密密钥
  • 使用 OM 中存储的凭据
  • 最终授权依赖 OM

支持安全集群的 Kerberos 认证;在非安全模式下,允许匿名或虚拟访问。

小结

Ozone S3 Gateway 是一个协议适配器:

  • 它将 REST S3 操作转换为原生 Ozone 调用。
  • 它不存储也不管理数据 —— 而是将其委托给 OM 和数据节点。
  • 其无状态、可扩展的设计支持在负载均衡器后部署多个实例。
  • 它使现有的 S3 兼容客户端和工具能够无缝使用。

更多详情请参阅其他文档:

评论

登录后参与评论

正在加载评论…