Elasticsearch:管理悬空(dangling)索引

Elasticsearch中的悬空索引是指在节点加入集群时,其本地存储的某些分片在集群中不存在的索引。这些索引可以通过Dangling Indices API进行列出、导入或删除。如果在节点离线时删除索引,当节点重新上线时,其分片会成为悬空索引。使用API恢复悬空索引时需谨慎,因为可能丢失数据,并需要接受数据损失。定期检查和管理悬空索引对于保持集群健康至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是 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 标志。在集群中存在悬空索引并不常见,但你可以安排每周或每月检查一次以检查它们,以及检查是否可以进行所需的维护:通常,删除它们以恢复空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值