注意
本文档适用于 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