目录

阿里云ElasticSearch数据同步至自建ElasticSearch

OSS 快照迁移

购买OSS实例并创建bucket

在阿里云ElasticSearch上创建仓库my_backup

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
PUT _snapshot/my_backup/
{
    "type": "oss",
    "settings": {
        "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxxxx",
        "bucket": "xxxxxx",
        "compress": true,
        "chunk_size": "500mb",
        "base_path": "snapshot/"
    }
}
参数 说明
endpoint OSS Bucket的内网访问域名。获取方式,请参见访问域名和数据中心。
access_key_id 用于标识用户。获取方式,请参见获取AccessKey。
secret_access_key 用于验证用户的密钥。获取方式,请参见获取AccessKey。
bucket OSS Bucket的名称,需要一个已经存在的Bucket。获取方式,请参见创建存储空间。
compress 打开快照文件的压缩功能。
true: 打开压缩功能,仅应用于元数据文件(索引映射和设置)。
false(默认值): 不打开压缩功能,数据文件未压缩。
chunk_size 当您上传的数据非常大时,配置此参数可以限制快照过程中分块的大小。超过这个大小,数据将会被分块上传到OSS中。
base_path 仓库的起始位置,默认为根目录

快照指定索引

默认行为是备份所有打开的索引。不过如果你在用 Kibana,你不是真的想要把所有诊断相关的 .kibana 索引也备份起来。可能你就压根没那么大空间备份所有数据。

这种情况下,你可以在快照你的集群的时候指定备份哪些索引:

1
2
3
4
PUT _snapshot/my_backup/snapshot_1
{
    "indices": "index_1,index_2"
}

这个快照命令现在只会备份 index1 和 index2 了。

获取仓库信息

  • 获取所有仓库信息
    1
    
    GET _snapshot
    
  • 获取指定仓库信息
    1
    
    GET _snapshot/my_backup
    

创建快照

  • 为全部索引创建快照
    1
    
    PUT _snapshot/my_backup/snapshot_1
    
    以上命令会为所有打开的索引创建名称为snapshot_1的快照,并保存到my_backup仓库中。该命令会立刻返回,并在后台执行备份任务。如果您希望任务执行完成后再返回,可通过添加wait_for_completion实现。该参数会阻塞调用直到备份完成,如果是大型快照,需要很长时间才能返回。
    1
    
    PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
    

在自己ElasticSearch上恢复快照

一旦你备份过了数据,恢复它就简单了:只要在你希望恢复回集群的快照 ID 后面加上 _restore 即可:

1
POST _snapshot/my_backup/snapshot_1/_restore

默认行为是把这个快照里存有的所有索引都恢复。如果 snapshot_1 包括五个索引,这五个都会被恢复到我们集群里。和 snapshot API 一样,我们也可以选择希望恢复具体哪个索引。

还有附加的选项用来重命名索引。这个选项允许你通过模式匹配索引名称,然后通过恢复进程提供一个新名称。如果你想在不替换现有数据的前提下,恢复老数据来验证内容,或者做其他处理,这个选项很有用。让我们从快照里恢复单个索引并提供一个替换的名称:

1
2
3
4
5
6
POST /_snapshot/my_backup/snapshot_1/_restore
{
    "indices": "index_1", <1>
    "rename_pattern": "index_(.+)", <2>
    "rename_replacement": "restored_index_$1" <3>
}
  • <1> 只恢复 index_1 索引,忽略快照中存在的其余索引。
  • <2> 查找所提供的模式能匹配上的正在恢复的索引。
  • <3> 然后把它们重命名成替代的模式。

这个会恢复 index_1 到你及群里,但是重命名成了 restored_index_1 。

在自建Es上安装oss插件

  • 下载阿里云oss插件
    1
    
    wget https://github.com/aliyun/elasticsearch-repository-oss/releases/download/v7.4.0/elasticsearch-repository-oss-7.4.0.1.zip
    
  • 安装阿里云oss插件
    1
    2
    
    mkdir -pv /usr/local/elasticsearch
    unzip elasticsearch-repository-oss-7.4.0.1.zip -d /usr/local/elasticsearch/plugs/
    
  • 重启elasticsearch
    1
    2
    
    ps aux |grep elas|awk '{print $2}'|xargs kill -9 -
    su - elasticsearch && /usr/local/elasticsearch/bin/elastricsezrch -d
    

在自建Es上创建相同仓库my_backup

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
PUT _snapshot/my_backup/
{
    "type": "oss",
    "settings": {
        "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxxxx",
        "bucket": "xxxxxx",
        "compress": true,
        "chunk_size": "500mb",
        "base_path": "snapshot/"
    }
}

从快照恢复

  • 恢复所有索引(除.开头的系统索引)
    1
    2
    
    POST _snapshot/my_backup/snapshot_1/_restore 
    {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}