【问题标题】:Elasticsearch Snapshot Failing in AWS, preventing upgradeAWS 中的 Elasticsearch 快照失败,阻止升级
【发布时间】:2021-05-21 02:32:37
【问题描述】:

我在Elasticsearch 中的增量Snapshots 现在失败了。我什么都没碰,好像什么都没变,不知道哪里出了问题。

我通过以下方式检查了我的SnapshotsGET _cat/snapshots/cs-automated?v&s=id 并找到了失败的详细信息:

GET _snapshot/cs-automated/adssd....

这显示了这个堆栈跟踪:

java.nio.file.NoSuchFileException: Blob object [YI-....] not found: The specified key does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey; Request ID: 21...; S3 Extended Request ID: zh1C6C0eRy....)
    at org.elasticsearch.repositories.s3.S3RetryingInputStream.openStream(S3RetryingInputStream.java:92)
    at org.elasticsearch.repositories.s3.S3RetryingInputStream.<init>(S3RetryingInputStream.java:72)
    at org.elasticsearch.repositories.s3.S3BlobContainer.readBlob(S3BlobContainer.java:100)
    at org.elasticsearch.repositories.blobstore.ChecksumBlobStoreFormat.readBlob(ChecksumBlobStoreFormat.java:147)
    at org.elasticsearch.repositories.blobstore.ChecksumBlobStoreFormat.read(ChecksumBlobStoreFormat.java:133)
    at org.elasticsearch.repositories.blobstore.BlobStoreRepository.buildBlobStoreIndexShardSnapshots(BlobStoreRepository.java:2381)
    at org.elasticsearch.repositories.blobstore.BlobStoreRepository.snapshotShard(BlobStoreRepository.java:1851)
    at org.elasticsearch.snapshots.SnapshotShardsService.snapshot(SnapshotShardsService.java:505)
    at org.elasticsearch.snapshots.SnapshotShardsService.access$600(SnapshotShardsService.java:114)
    at org.elasticsearch.snapshots.SnapshotShardsService$1.doRun(SnapshotShardsService.java:386)
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractPrioritizedRunnable.doRun(ThreadContext.java:763)
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

不知道如何解决这个问题我现在可以再升级我的索引,我检查了这个页面:Resolve snapshot error in .. 但仍然在挣扎。我试过删除一大堆索引。我可以尝试恢复旧的Snapshot。我还删除了一些用于跟踪 ILM 的 .opendis.. 索引和一个 .lock 索引,但没有任何帮助。很烦人。

根据 cmets 的要求:

GET /_cat/repositories?v
id           type
cs-automated   s3

GET /_cat/snapshots/cs-automated 生成大量快照,所有这些快照的状态均为PARTIAL

2020-09-08t01-12-44.ea93d140-7dba-4dcc-98b5-180e7b9efbfa PARTIAL 1599527564 01:12:44 1599527577 01:12:57 13.4s  84 177 52 229
2021-02-04t08-55-22.8691e3aa-4127-483d-8400-ce89bbbc7ea4 PARTIAL 1612428922 08:55:22 1612428957 08:55:57   35s 208 793 31 824
2021-02-04t09-55-16.53444082-a47b-4739-8ff9-f51ec038cda9 PARTIAL 1612432516 09:55:16 1612432552 09:55:52 35.6s 208 793 31 824
2021-02-04t10-55-30.6bf0472f-5a6c-4ecf-94ba-a1cf345ee5b9 PARTIAL 1612436130 10:55:30 1612436167 10:56:07 37.6s 208 793 31 824
2021-02-04t11-......

【问题讨论】:

  • 您能否检查指定的存储桶密钥是否存在于您的 S3 存储库中?可能不是,但无论如何都值得检查
  • 我以为自动增量快照不在您拥有的存储桶中,而是从您那里抽象出来的?这不是我设置的存储库,这是您开箱即用的默认 14 天公司快照。
  • 运行GET /_cat/repositories?v 并最终运行GET /_cat/snapshots/&lt;repo-id-from-previous-command&gt;?v 时会得到什么
  • 我已经更新(;
  • PARTIAL 表示某些索引的某些分片由于给定原因无法被快照。在恢复操作期间,您仍然可以通过setting partial:true 恢复它们

标签: elasticsearch amazon-elasticsearch


【解决方案1】:

快照以 PARTIAL 状态结束的原因是由于 S3 存储库中的某些问题 YI-.... 文件丢失。 这是存储库损坏的明显案例

java.nio.file.NoSuchFileException:找不到 Blob 对象 [YI-....]: 指定的键不存在。 (服务:Amazon S3;状态代码: 404;错误代码:NoSuchKey;请求 ID:21...; S3 扩展请求 ID: zh1C6C0eRy....)

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

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

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

Elasticsearch 参考在 elasticsearch 7.8 及更高版本中修复的类似问题:https://github.com/elastic/elasticsearch/issues/57198

【讨论】:

  • 感谢您的建议,我可以删除所有快照,所以我可能会在联系他们之前先尝试一下。
  • 无论如何,不​​要完全依赖 AWS ES 的自动备份。对于 AWS ES,建议您拥有自己的手动快照。我按照以下步骤来实现它:medium.com/swlh/…
  • 我不同意胡安。 AWS ES 自动快照非常可靠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多