当您需要将自建Elasticsearch数据迁移至阿里云Elasticsearch时,可以使用OSS快照的方式进行迁移。即使用Elasticsearch的snapshot API,创建自建Elasticsearch数据的快照,并存储到OSS中,然后从OSS将快照数据恢复到阿里云Elasticsearch中。本文介绍具体的实现方法。
背景信息
操作流程
准备工作
步骤一:安装elasticsearch-repository-oss插件
步骤二:在自建Elasticsearch集群中创建仓库
连接自建Elasticsearch所在的ECS,执行如下命令创建仓库。
curl -H "Content-Type: application/json" -XPUT localhost:9200/_snapshot/es_backup -d' {"type": "oss", "settings": { "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com", "access_key_id": "your_accesskeyid", "secret_access_key":"your_accesskeysecret", "bucket": "es-backup-es", "compress": true }}'
参数 | 说明 |
---|---|
es_backup |
仓库名称,可自定义。 |
type |
仓库类型,请设置为oss 。
|
endpoint |
OSS Bucket的访问地址,请参见访问域名和数据中心获取。
说明 如果自建Elasticsearch所在ECS与您的OSS在同一区域,请使用内网地址,否则请使用外网地址。
|
access_key_id |
创建OSS Bucket的账号的AccessKey ID,获取方式请参见如何获取AccessKeyId和AccessKeySecret。 |
secret_access_key |
创建OSS Bucket的账号的AccessKey Secret,获取方式请参见如何获取AccessKeyId和AccessKeySecret。 |
bucket |
您创建的OSS Bucket名称。 |
compress |
是否压缩。 |
创建成功后,返回"acknowledge":true
。
步骤三:为指定索引创建快照
在自建Elasticsearch中创建一个快照,用来备份您需要迁移的索引数据。创建快照时,默认会备份所有打开的索引。如果您不想备份系统索引,例如以
.kibana
、.security
、.monitoring
等开头的索引,可在创建快照时指定需要备份的索引。
注意 建议您不要备份系统索引,因为系统索引会占用较大空间。
curl -H "Content-Type: application/json" -XPUT localhost:9200/_snapshot/es_backup/snapshot_1?pretty -d'
{
"indices": "index1,index2"
}'
index1
和index2
为您需要备份的索引名称。快照创建成功后,返回"accepted" : true
。
步骤四:在阿里云Elasticsearch上创建相同仓库
步骤五:在阿里云Elasticsearch上恢复快照
参见步骤四:在阿里云Elasticsearch上创建相同仓库,在Kibana控制台上执行以下命令,恢复快照中的所有索引(除过
.
开头的系统索引)。 POST _snapshot/es_backup/snapshot_1/_restore
{"indices":"*,-.monitoring*,-.security_audit*","ignore_unavailable":"true"}
命令执行成功,返回"accepted" : true
。
以上命令会恢复快照中的所有索引,您也可以选择需要恢复的索引。同时如果阿里云Elasticsearch集群中有同名索引,而您想在不替换现有数据的前提下,恢复旧数据来验证内容,或者处理其他任务,可在恢复过程中重命名索引。
POST _snapshot/es_backup/snapshot_1/_restore
{
"indices":"index1",
"rename_pattern": "index(.+)",
"rename_replacement": "restored_index_$1"
}
说明 更多快照和恢复命令请参见快照备份与恢复命令。
步骤六:查看快照恢复结果
参见步骤四:在阿里云Elasticsearch上创建相同仓库,在Kibana控制台上执行以下命令,查看恢复结果。
- 查看恢复的索引
GET /_cat/indices?v
- 查看恢复的索引数据
GET /index1/_search
执行成功后,返回结果如下。{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 1.0, "hits" : [ { "_index" : "index1", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "productName" : "testpro", "annual_rate" : "3.22%", "describe" : "testpro" } } ] } }