如何将AWS OpenSearch手动快照复制到新S3桶并恢复至其他集群?
AWS OpenSearch跨集群快照恢复(复制到新S3桶)解决方案
核心结论
不需要共享原S3桶,将快照复制到新S3桶是完全可行的跨集群恢复方案。当前的403错误和快照不可见问题,主要源于快照仓库配置、元数据同步、权限配置三个环节的疏漏,以下是分步解决方法:
1. 确保目标集群快照仓库配置正确
直接复制文件后,目标集群需要先创建指向新S3桶的专属快照仓库,不能复用源集群的仓库名称(即使名称相同,底层桶不同也会导致识别失败)。执行以下命令创建仓库:
PUT /_snapshot/target_s3_repo { "type": "s3", "settings": { "bucket": "你的目标S3桶名称", "region": "你的AWS区域(如us-east-1)", "role_arn": "目标集群用于访问S3的IAM角色ARN" } }
- 注意:该IAM角色必须拥有目标S3桶的读写权限(
s3:ListBucket、s3:GetObject、s3:PutObject等),且信任策略需允许OpenSearch服务(es.amazonaws.com)扮演该角色。
2. 同步快照元数据,让目标集群识别快照
直接复制S3文件后,OpenSearch不会自动感知新快照,需手动触发元数据同步:
- 确认已将源S3桶中的所有快照相关文件复制到目标桶,包括根目录的
index.latest文件、每个快照对应的snapshot-<快照名>文件夹,以及meta文件夹下的元数据文件。 - 在目标集群执行同步命令:
POST /_snapshot/target_s3_repo/_sync
- 同步完成后,执行以下命令验证快照是否可见:
GET /_snapshot/target_s3_repo/_all
3. 修复403权限错误
(1)OpenSearch内部权限配置
admin用户需要拥有快照恢复相关的集群权限,执行以下命令创建并映射权限角色:
# 创建快照恢复角色 PUT /_plugins/_security/api/roles/snapshot_restore_role { "cluster_permissions": [ "cluster:admin/snapshot/restore", "cluster:admin/snapshot/get" ] } # 将admin用户映射到该角色 PUT /_plugins/_security/api/rolesmapping/snapshot_restore_role { "users": ["admin"] }
(2)IAM权限验证
检查目标集群的快照IAM角色权限策略,确保包含以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket", "s3:GetBucketLocation"], "Resource": "arn:aws:s3:::你的目标S3桶名称" }, { "Effect": "Allow", "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::你的目标S3桶名称/*" } ] }
4. 执行正确的恢复命令
确认快照可见且权限配置完成后,用目标仓库名称执行恢复:
POST /_snapshot/target_s3_repo/snapshot-2022-11-15-11-01-59/_restore { "indices": "*", "ignore_unavailable": true, "include_global_state": false }
include_global_state: false用于避免覆盖目标集群的全局配置(如安全设置、索引模板等),可根据实际需求调整。
内容的提问来源于stack exchange,提问作者Staggerlee011
相关产品推荐
相关产品推荐

