首页 > 解决方案 > Elasticsearch 快照失败 - 无法恢复

问题描述

我正在尝试将数据从一个实例移动到另一个弹性搜索实例。我已经创建了此处提到的角色和 s3 存储桶。

我已经在两个实例中注册了存储库,快照创建成功,s3 有新对象。但是当我运行恢复命令时。我收到如下错误

:[{"type":"snapshot_restore_exception","reason":"[test:sample5/xcMBVd21SQky8E2TX8Z76xf] index [example] wasn't fully snapshotted - cannot restore"}]

我使用 python 脚本创建了一个快照,

path = '_snapshot/test/' + sampe_snap
url = host + path
payload = {
  "indices": "example",
  "include_global_state": False
}

r = requests.put(url, json=payload, auth=awsauth) 

返回

{"accepted":true}

为了调试,我使用了 Kibana 并搜索了快照。它显示如下

GET _snapshot/test/sampe_snap
    ....
    "indices" : [ "example" ],
    "include_global_state" : false,
    "state" : "PARTIAL",
    "start_time" : "2021-02-04T11:14:22.153Z",
    "start_time_in_millis" : 1612437262153,
    "end_time" : "2021-02-04T11:14:22.554Z",
    "end_time_in_millis" : 1612437262554,
    "duration_in_millis" : 401,
    "failures" : [ {
      "index" : "example",
      "index_uuid" : "example",
      "shard_id" : 3,
      "reason" : """java.nio.file.NoSuchFileException: Blob object [indices/TJz0FNoGQUfvJ5pbTFLyQ/3/index-f16nCDQoiRl4UV8vCFSA] not found: The specified key does not exist.
    (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey...;

为什么会失败?

标签: amazon-web-serviceselasticsearchamazon-s3aws-elasticsearch

解决方案


这里的问题是快照以PARTIAL状态而不是SUCCESS状态结束。

快照以 PARTIAL 状态结束的原因是由于索引内的 S3 存储库index-f16nCDQoiRl4UV8vCFSA文件中的某些问题(shard 3索引TJz0FNoGQUfvJ5pbTFLyQ的快照索引 id example)丢失。这是存储库损坏的明显案例。

  "reason" : """java.nio.file.NoSuchFileException: Blob object [indices/TJz0FNoGQUfvJ5pbTFLyQ/3/index-f16nCDQoiRl4UV8vCFSA] not found: The specified key does not exist.

当集群负载很重(JVM > 80% 或 CPU 利用率 >80%)并且很少有节点从集群中退出时,会观察到这种存储库损坏。

解决此问题的一种方法是删除所有引用 index 的快照:example。这将清理索引的 S3 快照文件,example现在当您拍摄新快照时,一切都会重新开始。

为了更安全,我建议联系 AWS 支持来修复这种类型的存储库损坏。


推荐阅读