验证存储库完整性 API

编辑

验证快照存储库内容的完整性。

resp = client.snapshot.repository_verify_integrity(
    name="my_repository",
)
print(resp)
const response = await client.snapshot.repositoryVerifyIntegrity({
  name: "my_repository",
});
console.log(response);
POST /_snapshot/my_repository/_verify_integrity

请求

编辑

POST /_snapshot/<repository>/_verify_integrity

前提条件

编辑
  • 如果启用了 Elasticsearch 安全功能,则必须拥有 manage 集群权限 才能使用此 API。更多信息,请参见 安全权限

描述

编辑

此 API 允许您对存储库的内容进行全面检查,查找其数据或元数据中的任何异常,这些异常可能会阻止您从存储库恢复快照,或者可能会导致将来的快照创建或删除操作失败。

如果您怀疑其中一个快照存储库的内容完整性,请立即停止对此存储库的所有写入活动,将其 read_only 选项设置为 true,并使用此 API 验证其完整性。在您这样做之前

  • 可能无法从该存储库 恢复某些快照
  • 可搜索快照 在搜索时可能会报告错误,或者可能具有未分配的分片。
  • 创建快照 到此存储库可能会失败,或者可能看起来已成功创建了无法恢复的快照。
  • 删除快照 从此存储库可能会失败,或者可能看起来已成功删除,但底层数据仍然保留在磁盘上。
  • 在存储库处于无效状态时继续写入可能会导致其内容损坏加剧。

如果 验证存储库完整性 API 发现您的存储库内容的完整性存在任何问题,Elasticsearch 将无法修复损坏。在存储库内容损坏后将其恢复到完全可工作状态的唯一方法是从 存储库备份(在损坏发生之前进行的备份)恢复其内容。您还必须确定导致损坏的原因并采取措施防止再次发生。

如果您无法恢复存储库备份,请 注册一个新的存储库 并将其用于所有将来的快照操作。在某些情况下,可以通过 恢复 尽可能多的快照并 创建新快照 已恢复的数据,或者使用 重新索引 API 从损坏的存储库中挂载的任何 可搜索快照 复制数据来恢复损坏存储库的部分内容。

验证存储库完整性 API 运行期间,避免所有写入存储库的操作。如果在完整性验证运行期间某些内容更改了存储库内容,则 Elasticsearch 可能会错误地报告已检测到其内容中的某些异常,这是由于并发写入造成的。它也可能错误地未能报告并发写入阻止其检测到的某些异常。

此 API 旨在供人类进行探索性使用。您应该预计请求参数和响应格式在将来的版本中会有所不同。

此 API 在混合版本集群中可能无法正常工作。

路径参数

编辑
<repository>
(必需,字符串) 要验证其完整性的快照存储库的名称。

查询参数

编辑

此 API 参数的默认值旨在限制完整性验证对集群中其他活动的影响。例如,默认情况下,它最多只会使用一半的 snapshot_meta 线程来验证每个快照的完整性,允许其他快照操作使用线程池的另一半。

如果您修改这些参数以加快验证过程,则可能会中断集群中的其他与快照相关的操作。对于大型存储库,请考虑只为运行完整性验证 API 设置一个单独的单节点 Elasticsearch 集群。

snapshot_verification_concurrency
(可选,整数) 指定要同时验证的快照数量。默认为 0,这意味着一次最多使用 snapshot_meta 线程池的一半。
index_verification_concurrency
(可选,整数) 指定要同时验证的索引数量。默认为 0,这意味着使用整个 snapshot_meta 线程池。
meta_thread_pool_concurrency
(可选,整数) 指定同时执行的快照元数据操作的最大数量。默认为 0,这意味着一次最多使用 snapshot_meta 线程池的一半。
index_snapshot_verification_concurrency
(可选,整数) 指定在每个索引验证中同时验证的索引快照的最大数量。默认为 1
max_failed_shard_snapshots
(可选,整数) 限制在完整性验证期间跟踪的分片快照失败的数量,以避免过度使用资源。如果您的存储库包含超过此数量的分片快照失败,则验证将失败。默认为 10000
verify_blob_contents
(可选,布尔值) 指定是否验证存储库中每个数据块的校验和。默认为 false。如果启用此功能,Elasticsearch 将读取整个存储库内容,这可能会非常慢且代价高昂。
blob_thread_pool_concurrency
(可选,整数) 如果 ?verify_blob_contentstrue,则此参数指定一次验证多少个块。默认为 1
max_bytes_per_sec
(可选,大小单位) 如果 ?verify_blob_contentstrue,则此参数指定 Elasticsearch 每秒将从存储库读取的最大数据量。默认为 10mb

响应体

编辑

响应公开了分析的实现细节,这些细节可能会因版本而异。因此,响应体格式不被认为是稳定的,在较新的版本中可能会有所不同。

log

(数组) 报告分析进度的一系列对象。

log 的属性
timestamp_in_millis
(整数) 此日志条目的时间戳,表示为自 Unix纪元以来的毫秒数。
timestamp
(字符串) 此日志条目的时间戳,表示为根据 ISO 8601 格式化的字符串。仅当设置了 ?human 标志时才包含。
snapshot
(对象) 如果日志条目与特定快照有关,则快照将在此对象中进行描述。
index
(对象) 如果日志条目与特定索引有关,则索引将在此对象中进行描述。
snapshot_restorability
(对象) 如果日志条目与索引的可恢复性有关,则详细信息将在此对象中进行描述。
anomaly
(字符串) 如果日志条目与存储库内容中的异常有关,则此字符串将描述该异常。
exception
(对象) 如果日志条目与 Elasticsearch 在验证期间遇到的异常有关,则详细信息将包含在此对象中。
results

(对象) 描述分析最终结果的对象。

results 的属性
status
(对象) 分析任务的最终状态。
final_repository_generation
(整数) 分析结束时的存储库生成。如果在分析期间对存储库进行了任何写入,则此值将与任务状态中报告的 generation 不同,并且分析可能由于并发写入而检测到虚假异常,甚至可能未能检测到存储库内容中的一些异常。
total_anomalies
(整数) 在分析期间检测到的异常总数。
result
(字符串) 分析的最终结果。如果存储库内容似乎完整无缺,则这将是字符串 pass。如果此字段缺失或包含其他值,则存储库内容未完全验证。
exception
(对象) 如果分析遇到阻止其成功完成的异常,则该异常将在此处报告。