文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

三种常用的 Elasticsearch 数据迁移方案

2024-12-02 04:51

关注

如果准备将自建的 elasticsearch 迁移上云,或者的迁移到其他es集群内,可以根据自己的业务需要选择合适的迁移方案。​如果业务可以停服或者可以暂停写操作​,可以使用以下几种方式进行数据迁移:

各种迁移方式的对比如下:

迁移方式

适用场景

COS 快照

​数据量大​​​的场景(GB、TB、PB 级别)对​​迁移速度要求较高​​的场景

logstash

​迁移全量​​​或​​增量数据​​,且对实时性要求不高的场景需要对迁移的数据通过 es query 进行简单的过滤的场景需要对迁移的数据进行复杂的过滤或处理的场景版本跨度较大的数据迁移场景,如 5.x 版本迁移到 6.x 版本或 7.x 版本

elasticsearch-dump

​数据量较小​​的场景

一、COS 快照

基于 COS 快照的迁移方式是使用 ES 的 ​​snapshot api​​ 接口进行迁移,基本原理就是从源 ES 集群创建索引快照,然后在目标 ES 集群中进行恢复。通过 snapshot 方式进行数据迁移时,特别需要注意 ES 的版本问题:

目标 ES 集群的主版本号(如5.6.4中的5为主版本号)要大于等于源 ES 集群的主版本号。
1.x 版本的集群创建的快照不能在 5.x 版本中恢复。

在源 ES 集群中创建 repository

创建快照前必须先创建 repository 仓库,一个 repository 仓库可以包含多份快照文件,repository 主要有以下几种类型。

如果需要从自建 ES 集群迁移至腾讯云的 ES 集群,可以直接使用 COS 类型仓库。但需要先在自建 ES 集群上安装 cos-repository 插件(安装插件后需要重启集群才能使用),先把自建 ES 集群中的数据先备份到 COS,然后在腾讯云上的 ES 集群中恢复出来,以完成数据的迁移。

如果自建 ES 的集群不方便安装 cos-repository 插件,但是已经安装 repository-s3 或者 repository-hdfs 插件,则可以先把数据备份到 S3 或者 HDFS 中,然后把 S3 或者 HDFS 中备份好的文件上传到腾讯云 COS 中,之后在腾讯云上的集群中进行恢复。

通过 COS 快照进行数据迁移时,需要先创建 COS 仓库,您可以通过如下命令创建仓库:

PUT _snapshot/my_cos_backup
{
"type": "cos",
"settings": {
"app_id": "xxxxxxx",
"access_key_id": "xxxxxx",
"access_key_secret": "xxxxxxx",
"bucket": "xxxxxx",
"region": "ap-guangzhou",
"compress": true,
"chunk_size": "500mb",
"base_path": "/"
}
}

在源 ES 集群中创建 snapshot

调用 snapshot api 创建快照以备份索引数据,创建快照时可以指定只对部分索引进行备份,也可以备份所有的索引,具体的 api 接口参数可以查阅 官方文档。

备份所有索引

将源 ES 集群中的所有索引备份到 ​​my_cos_backup​​​ 仓库下,并命名为 ​​snapshot_1​​:

PUT _snapshot/my_cos_backup/snapshot_1

这个命令会立刻返回,并在后台异步执行直到结束。如果希望创建快照命令阻塞执行,可以添加 ​​wait_for_completion​​ 参数:

PUT _snapshot/my_cos_backup/snapshot_1?wait_for_completion=true

命令执行的时间与索引大小相关。

备份指定索引

您可以在创建快照的时候指定要备份的索引:

PUT _snapshot/my_cos_backup/snapshot_2
{
"indices": "index_1,index_2"
}

参数 indices 的值为多个索引的时候,需要用​​,​​隔开且不能有空格。

查看快照状态

通过以下命令检查快照是否备份完成,返回结果中的​​state​​​字段为​​SUCCESS​​则说明快照已经备份成功:

GET _snapshot/my_cos_backup/snapshot_1

在目标 ES 集群中创建 repository

在目标 ES 集群中创建仓库和在源 ES 集群中创建仓库完全相同。

从快照恢复

将快照中备份的所有索引都恢复到 ES 集群中:

POST _snapshot/my_cos_backup/snapshot_1/_restore

如果 snapshot_1 包括5个索引,则这5个索引都会被恢复到 ES 集群中。您还可以使用附加的选项对索引进行重命名。该选项允许您通过模式匹配索引名称,并通过恢复进程提供一个新名称。如果您想在不替换现有数据的前提下,恢复旧数据来验证内容或进行其他操作,则可以使用该选项。从快照里恢复单个索引并提供一个替换的名称:

POST /_snapshot/my_cos_backup/snapshot_1/_restore
{
"indices": "index_1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}

查看索引恢复状态

您可以通过调用 ​​_recovery​​ API,查看指定索引恢复的进度:

GET index_1/_recovery

另外可以通过调用以下 API,查看指定索引的状态,返回结果中 ​​status​​​ 为 ​​green​​,则说明索引已经完全恢复:

GET _cluster/health/index_1

二、logstash

logstash 支持从一个 ES 集群中读取数据然后写入到另一个 ES 集群,因此可以使用 logstash 进行数据迁移,使用 logstash 进行迁移前,需要注意以下几点:

一个常用的使用 logstash 进行跨集群数据迁移的配置文件如下:

input {
elasticsearch {
hosts => "1.1.1.1:9200"
index => "*"
docinfo => true
size => 5000
scroll => "5m"
}
}

output {
elasticsearch {
hosts => ["http://2.2.2.2:9200"]
user => "elastic"
password => "your_password"
index => "%{[@metadata][_index]}"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
}
}

上述配置文件将源 ES 集群的所有索引同步到目标集群中,同时也可以设置只同步指定的索引,利用 logstash 进行迁移的更多功能可查阅 logstash-input-elasticsearch 和 logstash-output-elasticsearch[4]

三、elasticsearch-dump

elasticsearch-dump 是一款开源的 ES 数据迁移工具,github 地址[5]

  1. 安装 elasticsearch-dump

    elasticsearch-dump 使用 node.js 开发,可使用 npm 包管理工具直接安装:

    npm install elasticdump -g
  2. 主要参数说明

    --input: 源地址,可为 ES 集群 URL、文件或 stdin,可指定索引,格式为:{protocol}://{host}:{port}/{index}
    --input-index: 源 ES 集群中的索引
    --output: 目标地址,可为 ES 集群地址 URL、文件或 stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index}
    --output-index: 目标 ES 集群的索引
    --type: 迁移类型,默认为 data,表明只迁移数据,可选 settings, analyzer, data, mapping, alias
  3. 如果集群有安全认证,可以参照下面的方法使用 reindex 集群鉴权。在对应的 http 后面,添加 user:password@ 参考样例 ​​elasticsearch-dump --input=http://192.168.1.2:9200/my_index --output=http://user:password@192.168.1.2:9200/my_index --type=data​​。

  4. 迁移单个索引

    以下操作通过 elasticdump 命令将集群172.16.0.39中的 companydatabase 索引迁移至集群172.16.0.20。


    第一条命令先将索引的 settings 先迁移,如果直接迁移 mapping 或者 data 将失去原有集群中索引的配置信息如分片数量和副本数量等,当然也可以直接在目标集群中将索引创建完毕后再同步 mapping 与 data。

    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settings
    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mapping
    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data
  5. 迁移所有索引

    以下操作通过 elasticdump 命令将集群172.16.0.39中的所有索引迁移至集群172.16.0.20。


    此操作并不能迁移索引的配置,例如分片数量和副本数量,必须对每个索引单独进行配置的迁移,或者直接在目标集群中将索引创建完毕后再迁移数据。

    elasticdump --input=http://172.16.0.39:9200 --output=http://172.16.0.20:9200

四、总结

  1. elasticsearch-dump 和 logstash 做跨集群数据迁移时,都要求用于执行迁移任务的机器可以同时访问到两个集群,因为网络无法连通的情况下就无法实现迁移。而使用 snapshot 的方式则没有这个限制,因为 snapshot 方式是完全离线的。因此 elasticsearch-dump 和 logstash 迁移方式更适合于源 ES 集群和目标 ES 集群处于同一网络的情况下进行迁移。而需要跨云厂商的迁移,可以选择使用 snapshot 的方式进行迁移,例如从阿里云 ES 集群迁移至腾讯云 ES 集群,也可以通过打通网络实现集群互通,但是成本较高。
  2. elasticsearch-dump 工具和 MySQL 数据库用于做数据备份的工具 mysqldump 类似,都是逻辑备份,需要将数据一条一条导出后再执行导入,所以适合数据量小的场景下进行迁移。
  3. snapshot 的方式适合数据量大的场景下进行迁移。

参考资料

[1]repository-s3: ​​https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-s3.html​​​

[2]cos-repository: ​​https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html​​​

[3]cos-repository: ​​https://github.com/tencentyun/elasticsearch-repository-cos​​​

[4]repository-s3: ​​https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html​​​

[5]elasticsearch-dump: ​​https://github.com/taskrabbit/elasticsearch-dump​​​

来源:奇妙的Linux世界内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯