ES Rollover and Shrink API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES Rollover and Shrink API相关的知识,希望对你有一定的参考价值。

参考技术A       Shrink API允许我们将存在的索引转变为一个只包含主要分片的新索引。目标索引中请求的主要分片数量必须要为原索引中的因子(即原分片数量是新分片倍数),例如8个分片可以缩小到4、2、1个分片。如果原分片数量为素数则只能缩小到一个分片。在缩小开始时,每个分片的复制都必须在同一节点(node)存在。

缩小步骤:
1)首先,以相同配置创建目标索引,但是主分片数量减少。
2)然后硬链接( hard-linking ) 各部分自原索引到目标索引。(如果系统不支持硬链接,那么索引的所有部分都将复制迁移到新索引,将会花费大量时间)
3)最终,将会恢复目标索引,因为目标索引刚被重新打开就会被关闭。

1)强制所有分片都复制迁移到名字为 shrink_node_name 的节点上并且节点健康为绿色。
2)为了缩小索引,索引必须被标记为只读。 index.blocks.write 避免索引的所有写操作,但是依然可以修改索引的基本信息,例如删除索引。
从原索引迁移将会花费一定时间。进度信息可以在所有分片都迁移完成前通过 _cat recovery API 或者 cluster health API 使用 wait_for_no_relocating_shards 参数获得。

缩小索引 my_source_index 到 新的索引 my_target_index ,可以用下列请求,缩小索引API和创建索引 (create index) API 相似,并且对于目标索引接受 settings 和 aliases 参数


上述请求将会在目标索引信息加入到集群时立即返回——他不会等到缩小操作开始。
注意:
1)目标索引存在
2)原索引主分片数量比目标索引多
3)原索引主分片数量是目标索引倍数
4)索引中的所有文档在目标索引将会被缩小到一个分片的数量不会超过 2,147,483,519 ,因为这是一个分片的承受的最大文档数量。
5)执行缩小进程的节点必须要有足够的空闲磁盘空间满足原索引的分片能够全部复制迁徙到该节点。

缩小进度可以被 _cat recovery API 或者 cluster health API 所监控。通过设置 wait_for_status 为 yellow ,可以等到所有的主分片都已经分配。

缩小API会在目标索引被创建时马上返回,这发生在所有分片被分配之前。这点说明这时所有分片都处于 unassigned 状态,如果出于任何原因目标索引分片无法分配到执行缩小的节点上,那么主分片状态会一直停留在 unassigned ,直到分片被分配。

一旦主节点分配成功,会转化状态会 initializing ,缩小进程就开始执行。当缩小操作结束的时候,这些分片会被激活。在这之后, Elasticsearch 将试图分配副本,甚至可能决定主分片迁至另一个节点。

因为缩小操作会创建新的索引,所以 wait for active shards 设置依然有效。

      当现有索引被认为太大或太旧时,滚动索引API 会将别名滚动到新的索引。API 接受单个别名和条件列表。 别名只能指向一个索引。 如果索引满足指定的条件,则创建一个新的索引,并将别名切换到指向新的索引。

上述可能会返回如下的响应:

如果现有索引的名称以 - 和数字结尾(比如 logs-000001), 新索引的名称将遵循相同的模式,增加数字(logs-000002)。 无论旧索引名称如何,编号为零填充长度为6。
如果旧名称与此模式不匹配,则必须按照如下所示,指定新索引的名称:

使用 日期计算 : 根据索引滚动的日期来命名滚动索引是有用的技术,例如 logstash-2016.02.03 .。 滚动API支持日期,但要求索引名称以一个破折号后跟一个数字,例如 logstash-2016.02.03-1,每次索引滚动时都会增加。 例如

1)创建当日的索引 logs-2018.07.31-1
2)当日索引滚动, 立即生成如. logs-2018.07.31-000002 , 或者 logs-2018.08.01-000002 24小时后
然后可以按照 日期数学文档 中的描述来引用这些索引。 例如,要搜索过去三天创建的索引,可以执行以下操作:

新索引的设置,映射和别名取自任何匹配的 索引模板 。 此外,可以在请求正文中指定设置,映射和别名,就像 create index API一样。 请求中指定的值覆盖匹配索引模板中设置的任何值。 例如,以下滚动请求将覆盖 index.number_of_shardssetting:

滚动API支持dry_run模式,可以在不执行实际滚动的情况下检查请求条件:

因为滚动操作会创建一个新的索引,因此在创建索引时的 wait_for_active_shards 设置也适用于滚动操作。

参考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-rollover-index.html

http://cwiki.apachecn.org/pages/viewpage.action?pageId=4882801

Elasticsearch elasticsearch中 rollover 的用法

1.概述

本章是 Elastic Stack 实战手册(早鸟版).pdf 读书笔记,记一下 加深记忆。建议直接看文档。

创作人: 杨松柏

了解 Elasticsearch 的同学应该都知道, 索引的主分片在设定之后, 改变(shrink ,
split, reindex) 主分片数目的成本相当大; 因此在设计之初, 一定要规划好索引的分片
数目。 如果集群的中节点数目固定, 且写入的数据不会再有更新操作或者更新操作极其
少; 可以使用 Rollover index 的方式来限制每个索引的大小。
Rollover:
若 rollover-target 绑定的当前索引满足设定的条件, 执行滚动操作将会为 rollovertarget 创建新索引。 滚动目标可以是索引别名或者数据流;
 当滚动目标是别名时, 执行滚动别名将指向新的索引。
 当滚动目标是数据流时, 数据流将数据写入到新的索引, 且新索引名后缀自增 1。

POST /

以上是关于ES Rollover and Shrink API的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch之rollover

71 - ES 使用Sharink与Rollover API管理时间序列索引

ES 实战索引翻滚 Rollover Index使用说明

ES 实战Shrink Index使用说明

使用索引别名和Rollover滚动创建索引

Maintenance Plan Usage4:Check Integrity and Shrink database