当需要将一个 Elasticsearch 实例的自动快照备份数据恢复到同地域、同账号下的另一个实例时,可通过设置跨集群 OSS 仓库实现。该功能在目标端实例中创建对源端实例快照仓库的引用,随后通过 Kibana Dev Tools 执行恢复命令完成数据迁移。
添加OSS仓库引用
跨集群 OSS 仓库设置功能只支持高版本实例引用相同或低版本实例的仓库,不支持低版本实例引用高版本仓库。当高版本实例引用低版本实例的仓库时,需要注意数据格式兼容性。例如,5.5.3 版本支持多类型索引,而 6.7.0 版本不支持,此类索引恢复可能会出现问题。如果源端和目标端实例版本都是商业版 6.7.0,需确保两个实例的内核版本都是最新或者目标端的内核版本比源端高。
在左侧导航栏,单击Elasticsearch实例。
在顶部菜单栏处,选择资源组和地域。
在Elasticsearch实例中单击目标实例 ID。
在左侧导航栏,单击数据备份。
在跨集群OSS仓库设置区域,单击立即创建。如果不是首次添加仓库引用,需要单击创建OSS引用仓库。
在创建OSS引用仓库页面,选择源端实例。源端实例需满足以下条件:与目标端实例在相同地域、归属于相同账号,且源端实例版本低于或等于目标端实例版本。
单击确认,添加成功后,源端实例显示在当前页面,并显示引用仓库的状态。
添加引用仓库后,目标端实例可能会短暂进入生效中状态,期间无法修改实例配置(包括 Kibana 白名单等)。等待实例状态恢复为正常后再执行后续操作。
仓库列表通过访问对应实例获取,当实例在变更中、不健康或者负载特别高时,可能无法获取仓库信息。此时可在源端实例的 Kibana 控制台中执行
GET _snapshot命令获取所有仓库的地址。
恢复索引数据
跨集群 OSS 仓库设置只实现了实例间仓库的引用,不会自动恢复数据。需要在目标端实例的 Kibana 控制台上手动执行恢复命令。具体步骤请参见通过Kibana连接集群
在 Kibana 控制台左侧导航栏,单击Dev Tools。
查询引用仓库中的所有快照信息。
以下示例中
aliyun_snapshot_from_es-cn-a为引用仓库名称,替换为实际的引用仓库名称。GET /_cat/snapshots/aliyun_snapshot_from_es-cn-a?v该请求返回指定仓库下所有快照信息。
根据上一步获取的快照 ID,执行以下命令恢复指定索引。
确保指定索引在目标端实例中处于关闭状态或不存在,否则恢复时会报同名索引冲突错误。恢复
.开头的系统索引可能会导致 Kibana 访问失败,建议不要恢复系统索引。恢复单个索引
POST _snapshot/aliyun_snapshot_from_es-cn-a/<快照ID>/_restore {"indices": "file-2019-08-25"}恢复多个索引
POST _snapshot/aliyun_snapshot_from_es-cn-a/<快照ID>/_restore {"indices": "kibana_sample_data_ecommerce,kibana_sample_data_logs"}恢复所有索引(排除系统索引)
POST _snapshot/aliyun_snapshot_from_es-cn-a/<快照ID>/_restore {"indices":"*,-.monitoring*,-.security*,-.kibana*,-.apm*,-.ds-ilm-history-*,-.tasks","ignore_unavailable":"true"}以上排除模式为常见系统索引示例。不同版本的集群可能包含其他系统索引,需根据实际集群中的系统索引调整排除列表。通过以下命令查询当前集群中以
.开头的系统索引,据此完善排除列表:GET _cat/indices/.*?v