注意

本文档适用于 Ceph 的开发版本。

ElasticSearch 同步模块

从 Kraken 版本开始新增。

注意

截至 2020 年 5 月 31 日,仅支持 Elasticsearch 6 及更低版本。不支持 ElasticSearch 7。

此同步模块将来自其他区域的元数据写入 ElasticSearch。从 luminous 版本开始,这是我们当前存储在 ElasticSearch 中的数据字段的 json。

{
     "_index" : "rgw-gold-ee5863d6",
     "_type" : "object",
     "_id" : "34137443-8592-48d9-8ca7-160255d52ade.34137.1:object1:null",
     "_score" : 1.0,
     "_source" : {
       "bucket" : "testbucket123",
       "name" : "object1",
       "instance" : "null",
       "versioned_epoch" : 0,
       "owner" : {
         "id" : "user1",
         "display_name" : "user1"
       },
       "permissions" : [
         "user1"
       ],
       "meta" : {
         "size" : 712354,
         "mtime" : "2017-05-04T12:54:16.462Z",
         "etag" : "7ac66c0f148de9519b8bd264312c4d64"
       }
     }
   }

ElasticSearch 层类型可配置项

  • endpoint

指定要访问的 Elasticsearch 服务器端点

  • num_shards (整数)

Elasticsearch 在数据同步初始化时将配置的分片数量。请注意,初始化后无法更改此项。此处的任何更改都需要重建 Elasticsearch 索引并重新初始化数据同步过程。

  • num_replicas (整数)

Elasticsearch 在数据同步初始化时将配置的副本数量。

  • explicit_custom_meta (true | false)

指定是否索引所有用户自定义元数据,或者用户是否需要配置(在存储桶级别)应索引哪些自定义元数据条目。默认情况下此值为 false。

  • index_buckets_list (逗号分隔的字符串列表)

如果为空,则所有存储桶都将被索引。否则,只有此处指定的存储桶才会被索引。可以提供存储桶前缀(例如,foo*)或存储桶后缀(例如,*bar)。

  • approved_owners_list (逗号分隔的字符串列表)

如果为空,则所有者的存储桶都将被索引(受其他限制约束),否则,只有指定所有者拥有的存储桶才会被索引。也可以提供后缀和前缀。

  • override_index_path (字符串)

如果不为空,此字符串将用作 elasticsearch 索引路径。否则,索引路径将在同步初始化时确定和生成。

终端用户元数据查询

New in version Luminous.

由于 ElasticSearch 集群现在存储对象元数据,因此重要的是 Elasticsearch 端点不暴露给公众,并且只能由集群管理员访问。对于向终端用户本身公开元数据查询,这会带来一个问题,因为我们希望用户只查询他们自己的元数据,而不是其他任何用户的元数据,这需要 ElasticSearch 集群以类似于 RGW 的方式进行用户身份验证,从而带来问题。

从 Luminous 版本开始,元数据主区域中的 RGW 现在可以为终端用户请求提供服务。这允许不公开 elasticsearch 端点,也解决了身份验证和授权问题,因为 RGW 本身可以验证终端用户请求。为此,RGW 在存储桶 API 中引入了一个新查询,可以为 elasticsearch 请求提供服务。所有这些请求必须发送到元数据主区域。

语法

获取 elasticsearch 查询

GET /{bucket}?query={query-expr}
请求参数
  • max-keys: 要返回的最大条目数

  • marker: 分页标记

expression := [(]<arg> <op> <value> [)][<and|or> ...]

op 是以下之一:<, <=, ==, >=, >

例如

GET /?query=name==foo

将返回用户具有读取权限且名为“foo”的所有索引键。

输出将是一个 XML 格式的键列表,类似于 S3 存储桶列表响应。

配置自定义元数据字段

定义应索引哪些自定义元数据条目(在指定的存储桶下),以及这些键的类型。如果配置了显式自定义元数据索引,则需要此项以便 rgw 索引指定的自定义元数据值。否则,在索引的元数据键类型不是字符串的情况下也需要此项。

POST /{bucket}?mdsearch
x-amz-meta-search: <key [; type]> [, ...]

多个元数据字段必须用逗号分隔,可以使用 ; 为字段强制指定类型。当前允许的类型是 string(默认)、integer 和 date。

例如,如果您想将自定义对象元数据 x-amz-meta-year 索引为 int,x-amz-meta-date 索引为 date 类型,x-amz-meta-title 索引为 string,您将执行以下操作:

POST /mybooks?mdsearch
x-amz-meta-search: x-amz-meta-year;int, x-amz-meta-release-date;date, x-amz-meta-title;string

删除自定义元数据配置

删除自定义元数据存储桶配置。

DELETE /<bucket>?mdsearch

获取自定义元数据配置

检索自定义元数据存储桶配置。

GET /<bucket>?mdsearch

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入