恢复 API
1.0 版引入
恢复 API 提供有关一个或多个索引的任何已完成或正在进行的分片恢复的信息。如果列出数据流,API 会返回该数据流的后端索引的信息。
分片恢复涉及创建分片副本,以从快照恢复主分片或同步副本分片。分片恢复过程完成后,恢复的分片即可用于搜索和索引操作。
分片恢复在以下情况下自动发生
- 节点启动,称为本地存储恢复
- 主分片复制
- 将分片重新分配到同一集群内的不同节点
- 快照恢复
- 克隆、收缩或拆分操作
恢复 API 仅报告集群中当前存储的分片副本的已完成恢复。它仅报告每个分片副本的最新恢复,不包括以前恢复的历史信息,也不包括不再存在的分片副本的恢复信息。因此,如果分片副本完成恢复并随后重新分配到不同的节点,则原始恢复的信息不会在恢复 API 中显示。
端点
GET /_recovery
GET /<index>/_recovery/
路径参数
参数 | 数据类型 | 描述 |
---|---|---|
索引 | 字符串 | 以逗号分隔的索引、数据流或索引别名列表,操作将应用于这些列表。支持通配符表达式 (* )。使用 _all 或 * 来指定集群中的所有索引和数据流。 |
查询参数
以下所有查询参数均为可选。
参数 | 数据类型 | 描述 |
---|---|---|
active_only | 布尔型 | 当为 true 时,响应仅包含活动的分片恢复。默认为 false 。 |
detailed | 布尔型 | 当为 true 时,提供分片恢复的详细信息。默认为 false 。 |
索引 | 字符串 | 用于限制请求的索引名称的逗号分隔列表或通配符表达式。 |
示例请求
以下示例演示如何使用恢复 API 恢复信息。
从多个或所有索引恢复信息
以下示例请求以人类可读格式返回有关多个索引的恢复信息
GET index1,index2/_recovery?human
以下示例请求以人类可读格式返回有关所有索引的恢复信息
GET /_recovery?human
恢复详细信息
以下示例请求返回详细的恢复信息
GET _recovery?human&detailed=true
示例响应
以下响应返回名为 shakespeare
的索引的详细恢复信息
{
"shakespeare": {
"shards": [
{
"id": 0,
"type": "EXISTING_STORE",
"stage": "DONE",
"primary": true,
"start_time": "2024-07-01T18:06:47.415Z",
"start_time_in_millis": 1719857207415,
"stop_time": "2024-07-01T18:06:47.538Z",
"stop_time_in_millis": 1719857207538,
"total_time": "123ms",
"total_time_in_millis": 123,
"source": {
"bootstrap_new_history_uuid": false
},
"target": {
"id": "uerS7REgRQCbBF3ImY8wOQ",
"host": "172.18.0.3",
"transport_address": "172.18.0.3:9300",
"ip": "172.18.0.3",
"name": "opensearch-node2"
},
"index": {
"size": {
"total": "17.8mb",
"total_in_bytes": 18708764,
"reused": "17.8mb",
"reused_in_bytes": 18708764,
"recovered": "0b",
"recovered_in_bytes": 0,
"percent": "100.0%"
},
"files": {
"total": 7,
"reused": 7,
"recovered": 0,
"percent": "100.0%",
"details": [
{
"name": "_1.cfs",
"length": "9.8mb",
"length_in_bytes": 10325945,
"reused": true,
"recovered": "0b",
"recovered_in_bytes": 0
},
{
"name": "_0.cfe",
"length": "479b",
"length_in_bytes": 479,
"reused": true,
"recovered": "0b",
"recovered_in_bytes": 0
},
{
"name": "_0.si",
"length": "333b",
"length_in_bytes": 333,
"reused": true,
"recovered": "0b",
"recovered_in_bytes": 0
},
{
"name": "_1.cfe",
"length": "479b",
"length_in_bytes": 479,
"reused": true,
"recovered": "0b",
"recovered_in_bytes": 0
},
{
"name": "_1.si",
"length": "333b",
"length_in_bytes": 333,
"reused": true,
"recovered": "0b",
"recovered_in_bytes": 0
},
{
"name": "_0.cfs",
"length": "7.9mb",
"length_in_bytes": 8380790,
"reused": true,
"recovered": "0b",
"recovered_in_bytes": 0
},
{
"name": "segments_3",
"length": "405b",
"length_in_bytes": 405,
"reused": true,
"recovered": "0b",
"recovered_in_bytes": 0
}
]
},
"total_time": "6ms",
"total_time_in_millis": 6,
"source_throttle_time": "-1",
"source_throttle_time_in_millis": 0,
"target_throttle_time": "-1",
"target_throttle_time_in_millis": 0
},
"translog": {
"recovered": 0,
"total": 0,
"percent": "100.0%",
"total_on_start": 0,
"total_time": "113ms",
"total_time_in_millis": 113
},
"verify_index": {
"check_index_time": "0s",
"check_index_time_in_millis": 0,
"total_time": "0s",
"total_time_in_millis": 0
}
},
{
"id": 0,
"type": "PEER",
"stage": "DONE",
"primary": false,
"start_time": "2024-07-01T18:06:47.693Z",
"start_time_in_millis": 1719857207693,
"stop_time": "2024-07-01T18:06:47.744Z",
"stop_time_in_millis": 1719857207744,
"total_time": "50ms",
"total_time_in_millis": 50,
"source": {
"id": "uerS7REgRQCbBF3ImY8wOQ",
"host": "172.18.0.3",
"transport_address": "172.18.0.3:9300",
"ip": "172.18.0.3",
"name": "opensearch-node2"
},
"target": {
"id": "HFYKietmTO6Ud9COgP0k9Q",
"host": "172.18.0.2",
"transport_address": "172.18.0.2:9300",
"ip": "172.18.0.2",
"name": "opensearch-node1"
},
"index": {
"size": {
"total": "0b",
"total_in_bytes": 0,
"reused": "0b",
"reused_in_bytes": 0,
"recovered": "0b",
"recovered_in_bytes": 0,
"percent": "0.0%"
},
"files": {
"total": 0,
"reused": 0,
"recovered": 0,
"percent": "0.0%",
"details": []
},
"total_time": "1ms",
"total_time_in_millis": 1,
"source_throttle_time": "-1",
"source_throttle_time_in_millis": 0,
"target_throttle_time": "-1",
"target_throttle_time_in_millis": 0
},
"translog": {
"recovered": 0,
"total": 0,
"percent": "100.0%",
"total_on_start": -1,
"total_time": "42ms",
"total_time_in_millis": 42
},
"verify_index": {
"check_index_time": "0s",
"check_index_time_in_millis": 0,
"total_time": "0s",
"total_time_in_millis": 0
}
}
]
}
}
响应正文字段
API 返回有关恢复分片的以下信息。
参数 | 数据类型 | 描述 |
---|---|---|
id | 整数 | 分片的 ID。 |
类型 | 字符串 | 分片的恢复源。返回的值包括 - EMPTY_STORE : 空存储。表示一个新的主分片或使用集群重新路由 API 强制分配一个空的主分片。- EXISTING_STORE : 现有主分片的存储。表示恢复与节点启动或现有主分片的分配有关。- LOCAL_SHARDS : 属于同一节点上另一个索引的分片。表示恢复与克隆、收缩或拆分操作有关。- PEER : 另一个节点上的主分片。表示恢复与分片复制有关。- SNAPSHOT : 快照。表示恢复与快照恢复操作有关。 |
阶段 | 字符串 | 恢复阶段。返回的值可以包括 - INIT : 恢复尚未开始。- INDEX : 读取索引元数据并将字节从源复制到目标。- VERIFY_INDEX : 验证索引的完整性。- TRANSLOG : 重放事务日志。- FINALIZE : 清理。- DONE : 完成。 |
primary | 布尔型 | 当为 true 时,该分片是主分片。 |
start_time | 字符串 | 指示恢复开始时间的时间戳。 |
stop_time | 字符串 | 指示恢复完成时间的时间戳。 |
total_time_in_millis | 字符串 | 恢复分片所需的总时间,以毫秒为单位。 |
source | 对象 | 恢复源。这可以包括存储库的描述(如果恢复来自快照)或源节点的描述。 |
目标 | 对象 | 目标节点。 |
索引 | 对象 | 关于物理索引恢复的统计信息。 |
事务日志 | 对象 | 关于事务日志恢复的统计信息。 |
start | 对象 | 关于打开和启动索引所需时间的统计信息。 |