如何用AWS Elasticsearch 6.0.1及Kibana在另一台机器恢复指定快照
如何将AWS Elasticsearch 6.0.1的指定快照恢复到另一台机器
我来帮你梳理下把指定快照恢复到另一台机器的完整步骤,结合你用AWS ES和Kibana 6.0.1的场景,分几个关键环节来操作:
前提准备
首先得确保目标机器的Elasticsearch环境满足两个核心条件:
- 版本和源集群保持一致(6.0.1),避免版本兼容问题;
- 目标集群能访问到快照所在的存储位置(AWS ES的快照默认存在S3桶里,所以要确保目标环境有权限访问这个S3桶)。
步骤1:配置目标集群的快照仓库
如果目标机器是AWS ES域:
- 给目标ES域的IAM角色添加访问快照所在S3桶的权限(权限配置要和源域的快照角色一致,确保能读写S3桶);
- 在目标域创建和源域同配置的快照仓库,执行命令:
curl -XPUT 'target-es-domain-endpoint/_snapshot/your-repo-name' -H 'Content-Type: application/json' -d '{ "type": "s3", "settings": { "bucket": "your-snapshot-s3-bucket", "region": "your-aws-region", "role_arn": "arn:aws:iam::your-account-id:role/your-es-snapshot-role" } }'
如果目标机器是自建Elasticsearch:
- 先安装S3仓库插件:
bin/elasticsearch-plugin install repository-s3; - 配置S3访问密钥(可以通过elasticsearch.yml或者API设置),然后创建快照仓库,命令和上面类似,只是不需要
role_arn,换成access_key和secret_key即可。
步骤2:验证目标集群能识别目标快照
执行你之前用过的命令,替换成目标集群的端点,确认能看到你要恢复的那个快照:
curl -XGET 'target-es-endpoint/_snapshot/your-repo-name/_all?pretty'
检查返回结果里是否有2018-04-08t04-43-08.c5da6a35-8158-4799-a58d-0baf0a432275这个快照。
步骤3:执行快照恢复操作
根据你的需求选择恢复方式:
方式1:恢复所有索引
如果要恢复快照里的全部索引(注意:目标集群里同名的索引会被删除后替换,操作前请确认):
curl -XPOST 'target-es-endpoint/_snapshot/your-repo-name/2018-04-08t04-43-08.c5da6a35-8158-4799-a58d-0baf0a432275/_restore'
方式2:恢复指定索引(可选重命名)
如果只需要恢复部分索引,或者想给恢复后的索引重命名避免冲突,比如只恢复test-index和.kibana,并把test-index改成restored-test-index:
curl -XPOST 'target-es-endpoint/_snapshot/your-repo-name/2018-04-08t04-43-08.c5da6a35-8158-4799-a58d-0baf0a432275/_restore' -H 'Content-Type: application/json' -d '{ "indices": "test-index,.kibana", "rename_pattern": "test-index", "rename_replacement": "restored-test-index" }'
步骤4:监控恢复进度
恢复过程中可以用以下命令查看状态:
- 查看详细恢复进度:
curl -XGET 'target-es-endpoint/_recovery?pretty'
- 查看集群健康状态,等恢复完成后集群会回到
green状态:
curl -XGET 'target-es-endpoint/_cluster/health?pretty'
额外注意事项
- 如果目标是AWS ES域,要确保目标域的节点规格、存储容量足够容纳恢复的索引数据,避免资源不足导致失败;
- 恢复
.kibana索引时,目标Kibana的版本必须和源版本一致(6.0.1),否则可能出现可视化面板无法正常加载的问题; - 操作前建议备份目标集群的现有数据,防止意外覆盖。
内容的提问来源于stack exchange,提问作者vinsent paramanantham




