Ceph对象存储网关中的索引工作原理<转>

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: Ceph 对象存储网关允许你通过 Swift 及 S3 API 访问 Ceph 。它将这些 API 请求转化为 librados 请求。Librados 是一个非常出色的对象存储(库)但是它无法高效的列举对象。

Ceph 对象存储网关允许你通过 Swift 及 S3 API 访问 Ceph 。它将这些 API 请求转化为 librados 请求。Librados 是一个非常出色的对象存储(库)但是它无法高效的列举对象。对象存储网关维护自有索引来提升列举对象的响应性能并维护了其他的一些元信息。有关对象存储网关索引工作原理的文章很少,所以我写了这篇博文,权当抛砖迎玉。

我们先来看看一个已存在的 bucket


这个 bucket 的对象列表存储在一个单独的 rados 对象中。这个对象的名字是 .dir. 加上 bucket id 。索引对象存储在一个名为 .rgw.buckets.index 的独立存储池中。所以本例中,mybucket 的索引应该是 .dir.default.14113.1(译者注:原文中是.dir.default.2529250.167, 基于原理和实践,确定此处有误,特此更正)。

 

找到 bucket 索引

# rados -p .rgw.buckets.index ls - | grep "default.14113.1"
.dir.default.14113.1

你可以看到从 .rgw.buckets.index 存储池返回的索引对象。

查看索引对象的内容

# rados -p rados -p .rgw.buckets.index get .dir.default.14113.1 indexfile
# wc -c indexfile
0 indexfile

对象为 0 字节,怎么回事呢?秘密是:索引信息实际上存储在 Ceph 的键/值数据库中。每个 OSD 都有一个本地 leveldb 键/值数据库。因此索引对象实际上只是一个占位符,Ceph 通过它找到那个包含索引信息的 OSD 键/值数据库。

查看键/值数据库的内容

先来看看索引键

# rados -p .rgw.buckets.index listomapkeys 
.dir.default.14113.1myobject

所以索引键就是对象名(情理之中)。

再来看看索引值


现在比较对头了!本例中索引占了 175 字节,从上面的十六进制转储信息可以看到一些信息片段。如果你用上面的转储信息与 radosgw-admin 输出的对象元信息对比,你就会知道索引中存储的是什么。

对象元信息

我们可以确定索引包含如下信息:

  • name

  • owner

  • owner_display_name

  • etag

  • tag

需要注意的是 owner 既是键也是值。我认为这样做是在出现数据损坏时能通过扫描索引值来恢复索引键。

owner_display_name 在这里是为了兼容 S3。显然是一个读写妥协。

etag(实体标签)是对象的 MD5 值,也是为了兼容 S3。这有点得不偿失,因为我可以肯定如果每次创建一个对象就要计算 MD5 值,这将会损害写性能。

我怀疑 radosgw-admin 显示的其他元信息也包含在索引中(或者为空或者不可见)。

找到键值数据库

计算出包含索引对象的 OSD

# ceph osd map .rgw.buckets.index .rgw.buckets.index .dir.default.14113.24

osdmap e60 pool '.rgw.buckets.index' (11) object '.dir.default.14113.24/.rgw.buckets.index' -&amp;gt; pg 11.e6c72a3f (11.3f) -&amp;gt; up ([3,5], p3) acting ([3,5], p3)

我们看到键值数据库在 OSD 3 及 5 上,其中 3 是主 OSD(第一个)。

找到 OSD 3 上的键值数据库


可以看到 osd.3 在主机 ceph-osd1 上

这就是包含索引的键值数据库 leveldb。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
6月前
|
存储 Cloud Native API
oss云网关配置
配置阿里云OSS与云网关实现灵活数据传输和访问控制。步骤包括开通OSS服务,创建Bucket,获取访问凭证,可选配置CORS和生命周期规则。云网关配置涉及阿里云云原生网关的代理规则设定或使用云存储网关集成OSS访问,具体配置需参照产品文档,因产品更新可能会有变动。
110 1
|
2月前
|
存储 API Swift
Ceph Reef(18.2.X)之Swift操作对象存储网关
这篇文章详细介绍了Ceph Reef(18.2.X)中通过Swift API操作对象存储网关的方法,包括创建用户、子用户、配置环境变量、以及使用swift命令行工具进行存储桶和对象的管理。
35 7
Ceph Reef(18.2.X)之Swift操作对象存储网关
|
2月前
|
存储 对象存储
Ceph Reef(18.2.X)的对象存储网关(rgw)组件搭建
这篇文章是关于Ceph Reef(18.2.X)版本中对象存储系统的配置和使用案例,包括对象存储网关的概述、核心资源介绍、Ceph RGW支持的接口、高可用radosgw的部署、s3cmd工具的使用以及如何通过HTTP方式访问对象存储。
76 3
Ceph Reef(18.2.X)的对象存储网关(rgw)组件搭建
|
2月前
|
存储 对象存储
radosgw高可用对象存储网关实战指南
关于radosgw高可用对象存储网关的实战指南,涵盖了从基本概念到具体操作案例,再到架构设计和使用技巧的全面介绍。
64 6
|
2月前
|
对象存储 Python
Ceph Reef(18.2.X)之python操作对象存储网关
这篇文章介绍了如何在Ceph Reef(18.2.X)环境中使用Python操作对象存储网关(rgw),包括环境搭建、账号创建、使用s3cmd工具以及编写和测试Python代码。
49 3
|
4月前
|
存储 关系型数据库 算法框架/工具
Ceph对象网关,多区域网关
Ceph对象网关,多区域网关
44 6
|
6月前
|
网络协议 网络架构
ensp中BGP(边界网关协议)基础原理及配置命令
ensp中BGP(边界网关协议)基础原理及配置命令
352 0
|
1月前
|
安全 5G 网络性能优化
|
2月前
|
监控 负载均衡 安全
微服务(五)-服务网关zuul(一)
微服务(五)-服务网关zuul(一)
|
3月前
|
运维 Kubernetes 安全
利用服务网格实现全链路mTLS(一):在入口网关上提供mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,用于简化服务治理,包括流量管理和拆分、安全认证及网格可观测性,有效减轻开发运维负担。ASM支持通过mTLS提供服务,要求客户端提供证书以增强安全性。本文介绍如何在ASM入口网关上配置mTLS服务并通过授权策略实现特定用户的访问限制。首先需部署ASM实例和ACK集群,并开启sidecar自动注入。接着,在集群中部署入口网关和httpbin应用,并生成mTLS通信所需的根证书、服务器证书及客户端证书。最后,配置网关上的mTLS监听并设置授权策略,以限制特定客户端对特定路径的访问。
130 2