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

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 indexfile0 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。

时间: 2025-01-29 07:52:30

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

Ceph分布式存储学习指南1.7 Ceph对象存储

1.7 Ceph对象存储 对象存储是一种以对象形式而不是传统文件和块形式存储数据的方法.基于对象的存储已经引起了行业界的大量关注.为灵活地使用它们的巨量数据,这些组织正快速采用对象存储解决方案.Ceph是一个众所周知的真正的对象存储系统. Ceph是一个分布式对象存储系统,通过它的对象网关(object gateway),也就是RADOS网关(radosgw)提供对象存储接口.RADOS网关利用librgw(RADOS网关库)和librados这些库,允许应用程序跟Ceph对象存储建立连接.Ce

如何配置Ceph对象存储作为KVM虚拟机外部存储

凭借良好的可扩展性以及价格优势,Ceph对象存储在KVM虚拟机存储领域逐渐流行起来. 对象存储最初来自于云环境,因为相比于其他环境,云环境对于存储可扩展性需求通常更高.而Ceph对象存储现在是配置KVM虚拟机外部存储最为流行的一种方式. 对于Ceph来说,同一集群中的多个结点协同工作,用户可以访问位于通用硬件的分布式存储系统.通过访问由ceph-mon结点提供的元数据信息,不同类型的客户端可以连接到这些存储结点. 对象存储是一种全新的存储类型:应用程序可以通过调用API直接访问存储,这意味着应用

JavaScript 中 this 的工作原理以及注意事项

在JavaScript中,this 的概念比较复杂.除了在面向对象编程中,this 还是随处可用的.这篇文章介绍了this 的工作原理,它会造成什么样的问题以及this 的相关例子. 要根据this 所在的位置来理解它,情况大概可以分为3种: 在函数中:this 通常是一个隐含的参数. 在函数外(顶级作用域中):在浏览器中this 指的是全局对象:在Node.js中指的是模块(module)的导出(exports). ** 传递到eval()中的字符串**:如果eval()是被直接调用的,thi

IP网络存储iSCSI的概念与工作原理

本章主要介绍基于IP SAN的网络存储iSCSI.iSCSI技术以其低廉的构建成本和优秀的存储性能,博得了很多CIO和存储管理员的喜爱,目前陆续进入企业应用领域,推动了企业的存储环境向集中式转变.虽然,目前对于iSCSI应该在什么样的环境中使用还存在着诸多争议,但是iSCSI的前途是光明的,在未来的存储世界中,iSCSI一定会占据重要的席位.本章重点介绍iSCSI在Windows和Linux环境下的配置和使用. 存储的概念与术语 在存储的世界里,有各种各样的名词和术语,常见的有SCSI.FC.D

SpringMVC中Controller的方法中参数的工作原理

前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html SpringMVC中Controller的方法参数可以是Integer,Double,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非常灵活.本文将分析SpringMVC是如何对这些参数进行处理的,

Java中Class类工作原理详解

1.Class对象 Class对象包含了与类相关的信息.事实上,Class对象就是用来创建类的所有的"普通"对象的. 类是程序的一部分,每个类都有一个Class对象.换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中).在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象是否已经加载.如果尚未加载,JVM就会根据类名查找.class文件,并将其载入. 一旦某个类的Clas

详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] good

目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口的具体应用 常用HandlerMethodArgumentResolver介绍 常用HandlerMethodReturnValueHandler介绍 本文开头现象解释以及解决方案 编写自定义的HandlerMet

Node.js中require的工作原理浅析_node.js

几乎所有的Node.js开发人员可以告诉你`require()`函数做什么,但我们又有多少人真正知道它是如何工作的?我们每天都使用它来加载库和模块,但它的行为,对于我们来说反而是一个谜. 出于好奇,我钻研了node的核心代码来找出在引擎下发生了什么事.但这并不是一个单一的功能,我在node的模块系统的找到了module.js.该文件包含一个令人惊讶的强大的且相对陌生的核心模块,控制每个文件的加载,编译和缓存.`require()`,它的横空出世,只是冰山的一角. module.js 复制代码 代

存储初创企业Versity公司提供S3对象存储接口

大量数字化处理对象. Versity公司是一家采用多线程SAM-QFS的归档软件初创企业. 这家年轻的公司成立于2011年3月,CEO Bruce Gilpin拥有风险投资背景,而CTO则为Harriet Coverston.她自1986年起即在LSC(即Large Storage Configurations)公司工作并担任技术负责人职务,而该公司正是QFS(即快速文件系统)的开发方. QFS能够对磁盘驱动器进行分组,并为其提供一套文件系统.该软件后被Sun公司收购,Coverston亦在工作