通过设置跨集群OSS仓库,您可以将已进行了自动快照备份的源Elasticsearch实例仓库中的数据,恢复到目标端Elasticsearch实例中。例如有两个6.7.0版本的Elasticsearch实例,ID分别为es-cn-a和es-cn-b,其中es-cn-a已经开通了自动快照备份功能,且已经进行过一次快照。如果es-cn-b想从es-cn-a的自动快照恢复数据,那么需要设置跨集群OSS仓库。
背景信息
ES数据备份与恢复依赖于elasticsearch-repository-oss插件,阿里云ES实例默认已安装该插件且不可卸载。关于该插件的详细信息,请参见elasticsearch-repository-oss。
前提条件
源端实例与目标端实例需要满足以下条件:
相同地域。
归属于相同账号。
源端实例的版本低于或等于目标端实例的版本。
如果源端和目标端实例的版本都是商业版6.7.0,请确保两个实例的内核版本都是最新或者目标端的内核版本比源端高。
重要跨集群OSS仓库设置功能只支持高版本的实例引用相同版本或低版本的仓库,不支持低版本实例引用高版本仓库。
当高版本的实例引用低版本实例的仓库时,需要注意高版本的实例对低版本实例的数据格式可能存在不兼容的情况。例如,从5.5.3版本的实例恢复数据到6.7.0版本的实例,对于单类型的索引,5.5.3版本的实例支持恢复数据到6.7.0版本;对于多类型索引,由于5.5.3版本的实例只支持多类型索引,而6.7.0版本不支持多类型索引,所以恢复可能会出现问题。
添加OSS仓库引用
- 登录阿里云Elasticsearch控制台。
- 在左侧导航栏,单击Elasticsearch实例。
- 进入目标实例。
- 在顶部菜单栏处,选择资源组和地域。
- 在Elasticsearch实例中单击目标实例ID。
在左侧导航栏,单击数据备份。
在跨集群OSS仓库设置区域,单击立即创建。
说明如果不是首次添加仓库引用,需要单击创建OSS引用仓库。
在创建OSS引用仓库页面,选择源端实例。
重要所选实例与当前实例需要满足上文的前提条件。
单击确认。
添加成功后,源端实例显示在当前页面,并显示引用仓库的状态。
重要由于仓库列表是通过访问对应实例获取到的,因此当实例在变更中、不健康或者负载特别高时,可能无法获取仓库情况。此时,您可以在源端实例的Kibana控制台中,执行
GET _snapshot
命令,获取所有仓库的地址。恢复索引。
跨集群OSS仓库设置功能只是实现了实例间仓库的引用,并不会自动进行数据的恢复。您可以按照需求在目标端Elasticsearch实例的Kibana控制台上执行对应命令,恢复需要的索引数据。例如,从实例es-cn-a恢复file-2019-08-25索引,操作步骤如下:
登录目标端Elasticsearch实例的Kibana控制台。
具体步骤,请参见登录Kibana控制台。
说明 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。在左侧导航栏,单击Dev Tools。
在Console中,执行以下命令,查询指定实例仓库中的所有快照信息。
GET /_cat/snapshots/aliyun_snapshot_from_es-cn-a?v
该请求会返回指定仓库下所存储的所有快照信息。
说明aliyun_snapshot_from_es-cn-a为添加OSS仓库引用中的引用仓库名称。
根据上一步获取的快照id,执行以下命令恢复该快照下的指定索引。
重要请确保指定索引在目标端Elasticsearch实例中处于关闭状态,或者没有该索引。如果在执行恢复索引命令之前,目标端Elasticsearch实例中已有相同名称的索引,并且处于开启状态,那么在执行恢复索引命令时会报错。
恢复
.
开头的系统索引可能会导致Kibana访问失败,建议不要恢复系统索引。
恢复单个索引
POST _snapshot/aliyun_snapshot_from_es-cn-a/es-cn-a_20190705220000/_restore {"indices": "file-2019-08-25"}
恢复多个索引
POST _snapshot/aliyun_snapshot_from_es-cn-a/es-cn-a_20190705220000/_restore {"indices": "kibana_sample_data_ecommerce,kibana_sample_data_logs"}
恢复所有索引(除过
.
开头的系统索引)POST _snapshot/aliyun_snapshot_from_es-cn-a/es-cn-a_20190705220000/_restore {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}