Elasticsearch:管理悬空(dangling)索引
Posted Elastic 中国社区官方博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:管理悬空(dangling)索引相关的知识,希望对你有一定的参考价值。
什么是 dangling 索引呢?当一个节点加入集群时,如果它发现存储在其本地数据目录中的任何分片(shard)在集群中尚不存在,它将认为这些分片属于“悬空”索引。 你可以使用 Dangling indices API 列出、导入或删除悬空索引。例如,如果您在 Elasticsearch 节点离线时删除了多个 cluster.indices.tombstones.size 索引,就会发生这种情况。
注意:当索引仍然是集群的一部分时,API 无法保证导入的数据是否真正代表数据的最新状态。
在节点故障的情况下,如果没有足够的副本,你可能会丢失一些分片(以及这些分片中的数据)。 缺少分片的索引被标记为红色,并且它们处于只读模式,以防你尝试查询数据。 在这种情况下,唯一可用的选项是删除损坏的索引并从数据或备份中恢复它们。 当失败的节点在集群中恢复为活动状态时,将会有一些悬空索引(孤立分片)。 我们将介绍如何使用 API 用于管理这些索引。
我们可以使用如下的 API 来返回当前的 dangling 索引:
GET /_dangling
这个 API 可能返回如下类似的响应:
"dangling_indices": [
"index_name": "my-index-000001",
"index_uuid": "zmM4e0JtBkeUjiHD-MihPQ",
"creation_date_millis": 1589414451372,
"node_ids": [
"pL47UN3dAb2d5RCWP6lQ3e"
]
]
我们可以恢复之前响应的 index_uuid (zmM4e0JtBkeUjiHD-MihPQ) 中可用的数据,如下所示:
POST /_dangling/zmM4e0JtBkeUjiHD-MihPQ?accept_data_loss=true
如果你希望节省空间并使用 index_uuid (zmM4e0JtBkeUjiHD-MihPQ) 删除悬空索引的数据,可以执行以下命令:
DELETE /_dangling/<index-uuid>?accept_data_loss=true
你将得到如下的响应:
"acknowledged" : true
当你删除其分片位于集群中的离线节点中的索引时,会创建悬空索引。 当离线节点上线时,它们的分片处于悬空状态,并且在集群状态下被标记为悬空索引。 如果要删除或恢复现有孤立分片中的数据,则只需要部分数据,因为过时的索引将丢失数据分片。 正是出于这个原因,必须提供 accept_data_loss=true 标志。在集群中存在悬空索引并不常见,但你可以安排每周或每月检查一次以检查它们,以及检查是否可以进行所需的维护:通常,删除它们以恢复空间。
以上是关于Elasticsearch:管理悬空(dangling)索引的主要内容,如果未能解决你的问题,请参考以下文章