克隆索引 API编辑

克隆现有索引。

POST /my-index-000001/_clone/cloned-my-index-000001

请求编辑

POST /<index>/_clone/<target-index>

PUT /<index>/_clone/<target-index>

先决条件编辑

  • 如果启用了 Elasticsearch 安全功能,您必须对要克隆的索引拥有 manage 索引权限
  • 要克隆索引,该索引必须标记为只读,并且具有 green集群健康 状态。

例如,以下请求阻止对 my_source_index 的写入操作,以便可以使用 添加索引块 API 克隆它。删除索引等元数据更改仍然允许。

PUT /my_source_index/_block/write

无法克隆数据流上的当前写入索引。为了克隆当前写入索引,必须首先将数据流 滚动,以便创建新的写入索引,然后才能克隆之前的写入索引。

描述编辑

使用克隆索引 API 将现有索引克隆到新索引中,其中每个原始主分片都克隆到新索引中的新主分片中。

Elasticsearch 不会将索引模板应用于生成的索引。该 API 也不会从原始索引复制索引元数据。索引元数据包括别名、ILM 阶段定义和 CCR 跟踪器信息。例如,如果您克隆 CCR 跟踪器索引,生成的克隆将不会是跟踪器索引。

克隆 API 将大多数索引设置从源索引复制到生成的索引,但 index.number_of_replicasindex.auto_expand_replicas 除外。要设置生成的索引中的副本数量,请在克隆请求中配置这些设置。

克隆工作原理编辑

克隆的工作原理如下

  • 首先,它会创建一个新的目标索引,其定义与源索引相同。
  • 然后,它将源索引中的段硬链接到目标索引中。(如果文件系统不支持硬链接,则所有段都将复制到新索引中,这将是一个耗时得多的过程。)
  • 最后,它会恢复目标索引,就好像它是一个刚刚重新打开的关闭索引一样。

克隆索引编辑

要将 my_source_index 克隆到名为 my_target_index 的新索引中,请发出以下请求

response = client.indices.clone(
  index: 'my_source_index',
  target: 'my_target_index'
)
puts response
POST /my_source_index/_clone/my_target_index

一旦目标索引被添加到集群状态,上述请求就会立即返回——它不会等待克隆操作开始。

只有满足以下要求的索引才能被克隆

  • 目标索引必须不存在。
  • 源索引必须与目标索引具有相同数量的主分片。
  • 处理克隆过程的节点必须有足够的可用磁盘空间来容纳现有索引的第二个副本。

_clone API 类似于 创建索引 API,并接受 settingsaliases 参数以用于目标索引

response = client.indices.clone(
  index: 'my_source_index',
  target: 'my_target_index',
  body: {
    settings: {
      'index.number_of_shards' => 5
    },
    aliases: {
      my_search_indices: {}
    }
  }
)
puts response
POST /my_source_index/_clone/my_target_index
{
  "settings": {
    "index.number_of_shards": 5 
  },
  "aliases": {
    "my_search_indices": {}
  }
}

目标索引中的分片数量。这必须等于源索引中的分片数量。

映射不能在 _clone 请求中指定。源索引的映射将用于目标索引。

监控克隆过程编辑

可以使用 _cat recovery API 监控克隆过程,或者可以使用 集群健康 API 通过将 wait_for_status 参数设置为 yellow 来等待所有主分片分配。

_clone API 在目标索引被添加到集群状态后立即返回,此时还没有分配任何分片。此时,所有分片都处于 unassigned 状态。如果由于任何原因,目标索引无法分配,其主分片将保持 unassigned 状态,直到它可以在该节点上分配。

一旦主分片被分配,它就会变为 initializing 状态,克隆过程就会开始。当克隆操作完成后,分片将变为 active 状态。此时,Elasticsearch 将尝试分配任何副本,并可能决定将主分片重新定位到另一个节点。

等待活动分片编辑

由于克隆操作会创建一个新的索引来克隆分片,因此索引创建上的 等待活动分片 设置也适用于克隆索引操作。

路径参数编辑

<index>
(必需,字符串) 要克隆的源索引的名称。
<target-index>

(必需,字符串) 要创建的目标索引的名称。

索引名称必须符合以下条件

  • 仅限小写
  • 不能包含 \/*?"<>|、` `(空格字符)、,#
  • 7.0 之前的索引可以包含冒号 (:),但已弃用,在 7.0+ 中将不再支持
  • 不能以 -_+ 开头
  • 不能是 ...
  • 不能超过 255 个字节(注意是字节,因此多字节字符将更快地达到 255 个字节的限制)
  • . 开头的名称已弃用,但 隐藏索引 和插件管理的内部索引除外

查询参数编辑

wait_for_active_shards

(可选,字符串) 必须处于活动状态的分片副本数量,然后才能继续执行操作。设置为 all 或任何正整数,直到索引中的分片总数 (number_of_replicas+1)。默认值:1,主分片。

请参阅 活动分片

master_timeout
(可选,时间单位) 等待主节点的时长。如果在超时时间到期之前主节点不可用,则请求失败并返回错误。默认值为 30s。也可以设置为 -1,表示请求永远不会超时。
timeout
(可选,时间单位) 等待响应的时长。如果在超时时间到期之前没有收到响应,则请求失败并返回错误。默认值为 30s

请求正文编辑

aliases

(可选,对象的对象) 生成的索引的别名。

aliases 对象的属性
<alias>

(必需,对象) 键是别名名称。索引别名名称支持 日期数学

对象主体包含别名的选项。支持空对象。

<alias> 的属性
filter
(可选,查询 DSL 对象) 用于限制别名可以访问的文档的查询。
index_routing
(可选,字符串) 用于将索引操作路由到特定分片的 value。如果指定,这将覆盖索引操作的 routing value。
is_hidden
(可选,布尔值) 如果为 true,则别名是 隐藏的。默认值为 false。别名的所有索引必须具有相同的 is_hidden value。
is_write_index
(可选,布尔值) 如果为 true,则索引是别名的 写入索引。默认值为 false
routing
(可选,字符串) 用于将索引和搜索操作路由到特定分片的 value。
search_routing
(可选,字符串) 用于将搜索操作路由到特定分片的 value。如果指定,这将覆盖搜索操作的 routing value。
settings
(可选,索引设置对象) 目标索引的配置选项。请参阅 索引设置