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)索引的主要内容,如果未能解决你的问题,请参考以下文章

垃圾和悬挂参考有什么区别?

野指针 悬空指针和悬空引用

悬空指针的含义[重复]

组合逻辑电路中为啥TTL与非门电路的输入端悬空时,相当于高电平输入?

这怎么是一个悬空指针?

Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空”