问题描述
我正在尝试将数据从一个实例移动到另一个 elasticsearch 实例。我已经创建了 here 中提到的角色和 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}
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...;
为什么会失败?
解决方法
错误信息非常清楚:
索引 [示例] 未完全快照 - 无法恢复
这意味着您尝试恢复的索引没有完全快照,因此无法恢复。
从快照详情中可以看出,它有一个state PARTIAL
,这意味着并非索引的所有分片都可以成功快照。在您的情况下,example
索引的分片 #3 未成功快照,因此,在 S3 存储桶中找不到该分片的段(即 index-f16nCDQoiRl4UV8vCFSA
),因此索引不能恢复。
您可以尝试通过设置 partial: true
来恢复该部分快照,但所有丢失的分片都为空,因此您可能缺少一些数据。
也许可以尝试另一个之前或之后创建的快照。
,这里的问题是快照以 PARTIAL
状态而不是 SUCCESS
状态结束。
快照以PARTIAL状态结束的原因是由于索引index-f16nCDQoiRl4UV8vCFSA
的{{1}}内的S3存储库shard 3
文件中的一些问题(索引{{1}的快照索引ID }) 不见了。这是存储库损坏的明显案例。
TJz0FNoGQUfvJ5pbTFLyQ
当集群负载很重(JVM > 80% 或 CPU 利用率 >80%)并且很少有节点退出集群时,会观察到这种存储库损坏。
解决此问题的一种方法是删除所有引用索引 :example
的快照。这将清除索引 "reason" : """java.nio.file.NoSuchFileException: Blob object [indices/TJz0FNoGQUfvJ5pbTFLyQ/3/index-f16nCDQoiRl4UV8vCFSA] not found: The specified key does not exist.
的 S3 快照文件,现在当您拍摄新快照时,一切都会重新开始。
为了更安全,我建议联系 AWS 支持以修复此类存储库损坏。