克隆索引 API
编辑克隆索引 API编辑
克隆现有索引。
POST /my-index-000001/_clone/cloned-my-index-000001
先决条件编辑
例如,以下请求阻止对 my_source_index
的写入操作,以便可以使用 添加索引块 API 克隆它。删除索引等元数据更改仍然允许。
PUT /my_source_index/_block/write
无法克隆数据流上的当前写入索引。为了克隆当前写入索引,必须首先将数据流 滚动,以便创建新的写入索引,然后才能克隆之前的写入索引。
描述编辑
使用克隆索引 API 将现有索引克隆到新索引中,其中每个原始主分片都克隆到新索引中的新主分片中。
Elasticsearch 不会将索引模板应用于生成的索引。该 API 也不会从原始索引复制索引元数据。索引元数据包括别名、ILM 阶段定义和 CCR 跟踪器信息。例如,如果您克隆 CCR 跟踪器索引,生成的克隆将不会是跟踪器索引。
克隆 API 将大多数索引设置从源索引复制到生成的索引,但 index.number_of_replicas
和 index.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,并接受 settings
和 aliases
参数以用于目标索引
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 个字节的限制)
- 以
.
开头的名称已弃用,但 隐藏索引 和插件管理的内部索引除外
查询参数编辑
请求正文编辑
-
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
- (可选,索引设置对象) 目标索引的配置选项。请参阅 索引设置。