📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

将指定的悬空索引导入回集群,恢复其元数据和可用性。

API 格式 #

POST /_dangling/{index_uuid}

注意:API 路径使用 index_uuid 而非 index_name

API 作用 #

该 API 用于将悬空索引导入回集群。悬空索引是指在磁盘上存在但未在集群状态中注册的索引。该 API 允许管理员恢复这些索引。

API 参数 #

路径参数 #

参数类型是否必填默认值描述
{index_uuid}String-要导入的悬空索引的 UUID

查询参数 #

参数类型是否必填默认值描述
accept_data_lossBooleanfalse必须设置为 true 以确认接受数据丢失风险
timeoutTime请求超时操作的超时时间
master_timeoutTime主节点超时等待主节点响应的超时时间

请求示例 #

导入悬空索引 #

POST /_dangling/abc123-def456-ghi789-jkl012?accept_data_loss=true

设置超时时间 #

POST /_dangling/abc123-def456-ghi789-jkl012?accept_data_loss=true&timeout=60s

响应示例 #

成功响应 #

200 OK
{
  "acknowledged": true
}

错误响应 #

{
  "error": {
    "type": "illegal_argument_exception",
    "reason": "accept_data_loss must be set to true"
  }
}

未找到悬空索引 #

{
  "error": {
    "type": "illegal_argument_exception",
    "reason": "No dangling index found for UUID [abc123-def456-ghi789-jkl012]"
  }
}

响应字段说明 #

字段类型描述
acknowledgedBoolean导入操作是否被确认执行

处理流程 #

  1. 请求验证:检查提供的索引 UUID 是否对应实际的悬空索引
  2. 安全确认:验证 accept_data_loss 标志是否设置为 true
  3. 元数据选择:如果多个节点拥有同一索引的元数据,选择版本最高的
  4. 索引分配LocalAllocateDangledIndices 服务执行实际分配
  5. 返回确认:成功后返回 acknowledged: true

内部处理细节 #

  • 多节点处理:API 搜索所有节点的悬空索引元数据
  • 版本选择:当多个节点有同一索引的元数据时,自动选择最高版本
  • 分配服务:由 LocalAllocateDangledIndices 服务执行实际分配操作

错误场景 #

错误原因解决方法
accept_data_loss must be set to true未设置确认标志在查询参数中添加 accept_data_loss=true
No dangling index found for UUID未找到对应的悬空索引使用 GET /_dangling 查询可用的悬空索引
Connection failure节点连接失败检查网络连接和节点状态

相关操作 #

  • GET /_dangling:查询所有悬空索引
  • DELETE /_dangling/{index_uuid}:删除悬空索引

使用场景 #

  1. 故障恢复:在集群元数据丢失后恢复索引
  2. 节点重新加入:将离线节点的索引重新集成到集群
  3. 数据恢复:从备份的索引文件恢复数据

注意事项 #

  1. 数据丢失风险:导入操作可能导致数据冲突或丢失,需谨慎操作
  2. 必须确认:必须显式设置 accept_data_loss=true 作为安全保护
  3. UUID 识别:使用索引 UUID 而非名称进行导入
  4. 版本选择:多节点元数据时自动选择最高版本
  5. 分配时间:大型索引的分配可能需要较长时间

API 规范说明 #

该 API 在 REST API 规范中的定义为:

  • 规范文件:rest-api-spec/api/dangling_indices.import_dangling_index.json
  • 实际端点:POST /_dangling/{index_uuid}
  • 返回类型:AcknowledgedResponse