悬挂索引

悬挂索引(Dangling Indices) #

什么是悬挂索引 #

悬挂索引是指存在于节点本地磁盘上,但不属于当前集群状态的索引。这种情况通常发生在:

  • 节点离线期间,集群中其他节点删除了某个索引
  • 节点从一个集群迁移到另一个集群
  • 快照恢复失败或中断
  • 集群状态丢失后重建

当节点重新加入集群时,它本地存储的这些"孤立"索引分片就成为悬挂索引。

自动导入 #

可以通过集群设置控制是否自动导入悬挂索引:

# easysearch.yml
gateway.auto_import_dangling_indices: false  # 默认值:false

注意:自动导入默认关闭。在生产环境中,建议保持关闭,手动检查并决定是否导入,以避免意外引入过期或不需要的数据。

API 操作 #

列出悬挂索引 #

GET /_dangling

响应示例:

{
  "dangling_indices": [
    {
      "index_name": "my_old_index",
      "index_uuid": "r1eSJ3MoTheHQ2CvFoVrOg",
      "creation_date_millis": 1609459200000,
      "node_ids": ["node-1"]
    }
  ]
}

导入悬挂索引 #

使用索引 UUID 将悬挂索引导入到集群中:

POST /_dangling/r1eSJ3MoTheHQ2CvFoVrOg?accept_data_loss=true

accept_data_loss=true 参数是必须的,表示您已了解导入可能存在数据不一致的风险。

删除悬挂索引 #

不需要的悬挂索引可以直接删除:

DELETE /_dangling/r1eSJ3MoTheHQ2CvFoVrOg?accept_data_loss=true

操作建议 #

场景建议操作
节点短暂离线后重新加入检查索引内容后决定是否导入
集群迁移残留数据确认数据已在新集群中恢复后删除
集群状态丢失重建列出所有悬挂索引,逐一导入恢复
来源不明的悬挂索引谨慎处理,建议先备份再决定

注意事项 #

  • 导入悬挂索引不会自动恢复副本分片,需要等待集群自行分配
  • 如果集群中已存在同名索引(但 UUID 不同),导入会失败
  • 悬挂索引的映射和设置保持离线前的状态,可能与当前集群配置不兼容
  • 建议在导入前通过 _dangling API 检查索引的创建时间,确认是否是期望的数据