索引恢复 API

编辑

返回一个或多个索引正在进行和已完成的分片恢复的信息。对于数据流,API 返回流的后备索引的信息。

resp = client.indices.recovery(
    index="my-index-000001",
)
print(resp)
response = client.indices.recovery(
  index: 'my-index-000001'
)
puts response
const response = await client.indices.recovery({
  index: "my-index-000001",
});
console.log(response);
GET /my-index-000001/_recovery

请求

编辑

GET /<target>/_recovery

GET /_recovery

先决条件

编辑
  • 如果启用了 Elasticsearch 安全功能,则您必须拥有目标数据流、索引或别名的 monitormanage 索引权限

描述

编辑

使用索引恢复 API 获取有关正在进行和已完成的分片恢复的信息。

分片恢复是指初始化分片副本的过程,例如从快照还原主分片或从主分片创建副本分片。当分片恢复完成时,恢复的分片可用于搜索和索引。

在以下过程中,会自动发生恢复

  • 首次创建索引时。
  • 当节点重新加入集群并使用其数据路径中保存的数据启动任何丢失的主分片副本时。
  • 从主分片创建新的副本分片副本时。
  • 将分片副本重新定位到同一集群中的不同节点时。
  • 快照还原操作。
  • 克隆收缩拆分操作。

您可以使用 recoverycat recovery API 确定分片恢复的原因。

索引恢复 API 仅报告集群中当前存在的分片副本的已完成恢复信息。它仅报告每个分片副本的最后一次恢复,不报告有关早期恢复的历史信息,也不报告有关不再存在的分片副本的恢复信息。这意味着如果一个分片副本完成恢复,然后 Elasticsearch 将其重新定位到不同的节点,则有关原始恢复的信息将不会显示在恢复 API 中。

路径参数

编辑
<target>
(可选,字符串)用于限制请求的以逗号分隔的数据流、索引和别名列表。支持通配符 (*)。要定位所有数据流和索引,请省略此参数或使用 *_all

查询参数

编辑
active_only
(可选,布尔值)如果为 true,则响应仅包含正在进行的分片恢复。默认为 false
detailed
(可选,布尔值)如果为 true,则响应包含有关分片恢复的详细信息。默认为 false
index
(可选,字符串)用于限制请求的以逗号分隔的索引名称列表或通配符表达式。

响应正文

编辑
id
(整数)分片的 ID。
type

(字符串)分片的恢复源。返回的值包括

EMPTY_STORE
一个空的存储。表示一个新的主分片或使用 集群重新路由 API 强制分配的空主分片。
EXISTING_STORE
现有主分片的存储。表示恢复与节点启动或现有主分片的分配有关。
LOCAL_SHARDS
同一节点上另一个索引的分片。表示恢复与 克隆收缩拆分操作有关。
PEER
另一个节点上的主分片。表示恢复与分片复制有关。
SNAPSHOT
快照。表示恢复与 快照还原操作有关。
STAGE

(字符串)恢复阶段。返回的值可以包括

INIT
恢复尚未开始。
INDEX
读取索引元数据并将字节从源复制到目标。
VERIFY_INDEX
验证索引的完整性。
TRANSLOG
重放事务日志。
FINALIZE
清理。
DONE
完成。
primary
(布尔值)如果为 true,则分片是主分片。
start_time
(字符串)恢复开始的时间戳。
stop_time
(字符串)恢复完成的时间戳。
total_time_in_millis
(字符串)恢复分片的总时间(以毫秒为单位)。
source

(对象)恢复源。这可以包括

  • 如果恢复来自快照,则为存储库描述
  • 源节点的描述
target
(对象)目标节点。
index
(对象)有关物理索引恢复的统计信息。
translog
(对象)有关事务日志恢复的统计信息。
start
(对象)有关打开和启动索引的时间的统计信息。

示例

编辑

获取多个数据流和索引的恢复信息

编辑
resp = client.indices.recovery(
    index="index1,index2",
    human=True,
)
print(resp)
response = client.indices.recovery(
  index: 'index1,index2',
  human: true
)
puts response
const response = await client.indices.recovery({
  index: "index1,index2",
  human: "true",
});
console.log(response);
GET index1,index2/_recovery?human

获取集群中所有数据流和索引的段信息

编辑
resp = client.indices.recovery(
    human=True,
)
print(resp)
response = client.indices.recovery(
  human: true
)
puts response
const response = await client.indices.recovery({
  human: "true",
});
console.log(response);
GET /_recovery?human

API 返回以下响应

{
  "index1" : {
    "shards" : [ {
      "id" : 0,
      "type" : "SNAPSHOT",
      "stage" : "INDEX",
      "primary" : true,
      "start_time" : "2014-02-24T12:15:59.716",
      "start_time_in_millis": 1393244159716,
      "stop_time" : "0s",
      "stop_time_in_millis" : 0,
      "total_time" : "2.9m",
      "total_time_in_millis" : 175576,
      "source" : {
        "repository" : "my_repository",
        "snapshot" : "my_snapshot",
        "index" : "index1",
        "version" : "{version}",
        "restoreUUID": "PDh1ZAOaRbiGIVtCvZOMww"
      },
      "target" : {
        "id" : "ryqJ5lO5S4-lSFbGntkEkg",
        "host" : "my.fqdn",
        "transport_address" : "my.fqdn",
        "ip" : "10.0.1.7",
        "name" : "my_es_node"
      },
      "index" : {
        "size" : {
          "total" : "75.4mb",
          "total_in_bytes" : 79063092,
          "reused" : "0b",
          "reused_in_bytes" : 0,
          "recovered" : "65.7mb",
          "recovered_in_bytes" : 68891939,
          "recovered_from_snapshot" : "0b",
          "recovered_from_snapshot_in_bytes" : 0,
          "percent" : "87.1%"
        },
        "files" : {
          "total" : 73,
          "reused" : 0,
          "recovered" : 69,
          "percent" : "94.5%"
        },
        "total_time" : "0s",
        "total_time_in_millis" : 0,
        "source_throttle_time" : "0s",
        "source_throttle_time_in_millis" : 0,
        "target_throttle_time" : "0s",
        "target_throttle_time_in_millis" : 0
      },
      "translog" : {
        "recovered" : 0,
        "total" : 0,
        "percent" : "100.0%",
        "total_on_start" : 0,
        "total_time" : "0s",
        "total_time_in_millis" : 0
      },
      "verify_index" : {
        "check_index_time" : "0s",
        "check_index_time_in_millis" : 0,
        "total_time" : "0s",
        "total_time_in_millis" : 0
      }
    } ]
  }
}

此响应包含有关单个索引恢复单个分片的信息。恢复的源是快照存储库,恢复的目标是 my_es_node 节点。

响应还包括已恢复的文件和字节的数量和百分比。

获取详细的恢复信息

编辑

要获取恢复中的物理文件列表,请将 detailed 查询参数设置为 true

resp = client.indices.recovery(
    human=True,
    detailed=True,
)
print(resp)
response = client.indices.recovery(
  human: true,
  detailed: true
)
puts response
const response = await client.indices.recovery({
  human: "true",
  detailed: "true",
});
console.log(response);
GET _recovery?human&detailed=true

API 返回以下响应

{
  "index1" : {
    "shards" : [ {
      "id" : 0,
      "type" : "EXISTING_STORE",
      "stage" : "DONE",
      "primary" : true,
      "start_time" : "2014-02-24T12:38:06.349",
      "start_time_in_millis" : "1393245486349",
      "stop_time" : "2014-02-24T12:38:08.464",
      "stop_time_in_millis" : "1393245488464",
      "total_time" : "2.1s",
      "total_time_in_millis" : 2115,
      "source" : {
        "id" : "RGMdRc-yQWWKIBM4DGvwqQ",
        "host" : "my.fqdn",
        "transport_address" : "my.fqdn",
        "ip" : "10.0.1.7",
        "name" : "my_es_node"
      },
      "target" : {
        "id" : "RGMdRc-yQWWKIBM4DGvwqQ",
        "host" : "my.fqdn",
        "transport_address" : "my.fqdn",
        "ip" : "10.0.1.7",
        "name" : "my_es_node"
      },
      "index" : {
        "size" : {
          "total" : "24.7mb",
          "total_in_bytes" : 26001617,
          "reused" : "24.7mb",
          "reused_in_bytes" : 26001617,
          "recovered" : "0b",
          "recovered_in_bytes" : 0,
          "recovered_from_snapshot" : "0b",
          "recovered_from_snapshot_in_bytes" : 0,
          "percent" : "100.0%"
        },
        "files" : {
          "total" : 26,
          "reused" : 26,
          "recovered" : 0,
          "percent" : "100.0%",
          "details" : [ {
            "name" : "segments.gen",
            "length" : 20,
            "recovered" : 20
          }, {
            "name" : "_0.cfs",
            "length" : 135306,
            "recovered" : 135306,
            "recovered_from_snapshot": 0
          }, {
            "name" : "segments_2",
            "length" : 251,
            "recovered" : 251,
            "recovered_from_snapshot": 0
          }
          ]
        },
        "total_time" : "2ms",
        "total_time_in_millis" : 2,
        "source_throttle_time" : "0s",
        "source_throttle_time_in_millis" : 0,
        "target_throttle_time" : "0s",
        "target_throttle_time_in_millis" : 0
      },
      "translog" : {
        "recovered" : 71,
        "total" : 0,
        "percent" : "100.0%",
        "total_on_start" : 0,
        "total_time" : "2.0s",
        "total_time_in_millis" : 2025
      },
      "verify_index" : {
        "check_index_time" : 0,
        "check_index_time_in_millis" : 0,
        "total_time" : "88ms",
        "total_time_in_millis" : 88
      }
    } ]
  }
}

响应包括任何已恢复的物理文件及其大小的列表。

响应还包括以毫秒为单位的各个恢复阶段的时间

  • 索引检索
  • 事务日志重放
  • 索引启动时间

此响应指示恢复已 done。所有恢复,无论是正在进行的还是已完成的,都保存在集群状态中,并且可以随时报告。

要仅返回有关正在进行的恢复的信息,请将 active_only 查询参数设置为 true