缩减
编辑缩减编辑
允许的阶段:热、温。
阻止写入 源索引,并将其缩减为具有较少主分片的的新索引。生成的索引名称为 shrink-<随机 UUID>-<原始索引名称>
。此操作对应于 缩减 API。
shrink
操作之后,指向源索引的所有别名都将指向新的缩减索引。如果 ILM 对数据流的 backing 索引执行 shrink
操作,则缩减索引将替换流中的源索引。您无法对写入索引执行 shrink
操作。
要在 hot
阶段使用 shrink
操作,必须 存在 rollover
操作。如果没有配置 rollover 操作,ILM 将拒绝该策略。
shrink 操作将取消设置索引的 index.routing.allocation.total_shards_per_node
设置,这意味着将没有限制。这是为了确保可以将索引的所有分片复制到单个节点。即使在步骤完成后,此设置更改仍将保留在索引上。
如果对 跟随者索引 使用 shrink 操作,则策略执行将等待,直到领导者索引翻转(或 以其他方式标记为完成),然后在执行 shrink 操作之前,使用 取消跟随 操作将跟随者索引转换为常规索引。
缩减选项编辑
-
number_of_shards
- (可选,整数)要缩减到的分片数。必须是源索引中分片数的因子。此参数与
max_primary_shard_size
冲突,只能设置其中一个。 -
max_primary_shard_size
- (可选,字节单位)目标索引的最大主分片大小。用于查找目标索引的最佳分片数。设置此参数后,目标索引中每个分片的存储空间都不会大于该参数。目标索引的分片计数仍将是源索引的分片计数的因子,但如果该参数小于源索引中的单个分片大小,则目标索引的分片计数将等于源索引的分片计数。例如,当此参数设置为 50gb 时,如果源索引有 60 个主分片,总计 100gb,则目标索引将有 2 个主分片,每个分片大小为 50gb;如果源索引有 60 个主分片,总计 1000gb,则目标索引将有 20 个主分片;如果源索引有 60 个主分片,总计 4000gb,则目标索引仍将有 60 个主分片。此参数与
number_of_shards
在settings
中冲突,只能设置其中一个。 -
allow_write_after_shrink
- (可选,布尔值)如果为 true,则通过移除 写入块 使缩减后的索引可写。默认为 false。
示例编辑
显式设置新缩减索引的分片数编辑
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { warm: { actions: { shrink: { number_of_shards: 1 } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "warm": { "actions": { "shrink" : { "number_of_shards": 1 } } } } } }
计算缩减索引的最佳主分片数编辑
以下策略使用 max_primary_shard_size
参数根据源索引的存储大小自动计算新缩减索引的主分片计数。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { warm: { actions: { shrink: { max_primary_shard_size: '50gb' } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "warm": { "actions": { "shrink" : { "max_primary_shard_size": "50gb" } } } } } }
缩减的分片分配编辑
在 shrink
操作期间,ILM 会将源索引的主分片分配给一个节点。缩减索引后,ILM 会根据您的分配规则将缩减索引的分片重新分配给适当的节点。
这些分配步骤可能会因多种原因而失败,包括
- 在
shrink
操作期间移除节点。 - 没有节点有足够的磁盘空间来托管源索引的分片。
- 由于分配规则冲突,Elasticsearch 无法重新分配缩减的索引。
当其中一个分配步骤失败时,ILM 会等待 index.lifecycle.step.wait_time_threshold
中设置的时间段,默认为 12 小时。此阈值时间段允许集群解决导致分配失败的任何问题。
如果超过阈值时间段,并且 ILM 尚未缩减索引,则 ILM 会尝试将源索引的主分片分配给另一个节点。如果 ILM 缩减了索引,但在阈值时间段内无法重新分配缩减索引的分片,则 ILM 会删除缩减的索引,并重新尝试整个 shrink
操作。