Elasticsearch 数据迁移方案

这篇具有很好参考价值的文章主要介绍了Elasticsearch 数据迁移方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

倘若准备将自建的 elasticsearch 迁移K8s,或者的迁移到其他elasticsearch集群,可以根据自己的业务需要选择适当的迁移方案,针对业务可以停服或可以暂停写操作场景 ,可以使用以下几种方案完成数据迁移:

  • COS 快照,全程Cloud Object Storage
  • logstash
  • elasticsearch-dump

各种迁移方案对比如下:

迁移方方案 适用场景
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 主要有以下几种类型。

  • fs:共享文件系统,将快照文件存放于文件系统中;
  • s3:AWS S3 对象存储,快照存放于 S3 中,以插件形式支持,安装该插件请参考 repository-s3;
  • hdfs:快照存放于 hdfs 中,以插件形式支持,安装该插件请参考 repository-hdfs;
  • cos:快照存放于腾讯云COS对象存储中,以插件形式支持,安装该插件请参考 cos-repository;
    url:指定文件系统的 URL 路径,支持协议:http、https、ftp、file、jar。

如果需要从自建 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”: “/”
}
}
app_id:腾讯云账号 APPID。
access_key_id:腾讯云 API 密钥 SecretId。
access_key_secret:腾讯云 API 密钥 SecretKey。
bucket:COS Bucket 名字,不带 appId 后缀的 bucket 名。
region:COS Bucket 地域,必须与 ES 集群同地域。
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"
}
indices:只恢复 index_1 索引,忽略快照中存在的其他索引。
rename_pattern:查找所提供的模式能匹配上的正在恢复的索引。
rename_replacement:将匹配的索引重命名成替代的模式。
查看索引恢复状态
您可以通过调用 _recovery API,查看指定索引恢复的进度:

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

GET _cluster/health/index_1

二、logstash

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

需要在和腾讯云上的 ES 集群相同的 VPC 下创建 CVM,部署 logstash,同时保证该 CVM 能够访问到源 ES 集群。
用于部署 logstash 的 CVM 最好选择比较高的配置,例如 CPU 为16核,内存为32GB。
logstash 应该和目标 ES 集群的主版本号相同,例如目标 ES 集群为6.8.2版本,则 logstash 也需要使用6.8版本。
需要特别注意索引 type 的问题,因为 ES 的不同版本对索引 type 的约束不同,跨大版本迁移 ES 集群时可能出现因为索引的 type 而导致写入目标集群失败等的问题。具体可参考 logstash-output-elasticsearch 插件中对 document_type 参数的说明。

一个常用的使用 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]。

安装 elasticsearch-dump

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

npm install elasticdump -g
主要参数说明

–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
如果集群有安全认证,可以参照下面的方法使用 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。

迁移单个索引

以下操作通过 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
迁移所有索引

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

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

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

到了这里,关于Elasticsearch 数据迁移方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES elasticsearch-analysis-dynamic-synonym连接数据库动态更新synonym近义词

    修改源码实现连接数据库获取近义词汇 下载elasticsearch-analysis-dynamic-synonym打开项目(https://github.com/bells/elasticsearch-analysis-dynamic-synonym/tree/master) 引入依赖 将pom文件中的版本修改成跟你的es版本号一样的,比如我的是7.2.0 使用不同的版本对应的lucene包不同,某些代码略有不同,

    2024年02月04日
    浏览(55)
  • ​ES elasticsearch-analysis-dynamic-synonym​连接数据库动态更新synonym近义词

            在很多搜索场景中,我们希望能够搜索出搜索词相关的目标,同时也希望能搜索出其近义词相关的目标。例如在商品搜索中,搜索“ 瓠瓜 ”,也希望能够搜索出“ 西葫芦 ”,但“ 西葫芦 ”商品名称因不含有“ 瓠瓜 ”,导致无法搜索出来。         此时就

    2024年02月09日
    浏览(43)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

    2024年02月04日
    浏览(54)
  • elasticsearch es数据迁移es-dump

    由于现在接管了同事的代码,同事的代码操作es时,导致了线上问题,我又对es不熟悉,怕操作影响了其他线上业务,于是现在将es数据复制一版到本地来。 远程es服务elasticsearch.tencent.xxx.com:80 本地es服务192.168.9.102:9200 现在将远程转换为本地,我们采用【elasticdump工具】来进行

    2024年02月11日
    浏览(39)
  • 【Elasticsearch】小白实战!ES使用Reindex迁移数据

    文章有点长,如果你想认真阅读,建议到我语雀文档上观看,格式友好 - ES 迁移工作 最近有一个需求是需要我负责将服务器A里的 ES 数据迁移到服务器B上,但是由于环境不通,所以就先在公司的测试环境和我本地上进行测试,因为之前没有接触过 ES 数据的迁移,所以上手时

    2024年02月05日
    浏览(39)
  • Elasticsearch 数据迁移方案

    倘若准备将自建的 elasticsearch 迁移K8s,或者的迁移到其他elasticsearch集群,可以根据自己的业务需要选择适当的迁移方案, 针对业务可以停服或可以暂停写操作场景 ,可以使用以下几种方案完成数据迁移: COS 快照,全程Cloud Object Storage logstash elasticsearch-dump 各种迁移方案对比

    2024年02月16日
    浏览(36)
  • elasticsearch-dump 迁移es数据 (elasticdump)

    elasticsearch部分查询语句 # 获取集群的节点列表: curl ‘localhost:9200/_cat/nodesv’ curl ‘localhost:9200/_cat/indicesv’ 创建一个名为“customer”的索引,然后再查看所有的索引: curl -X PUT ‘localhost:9200/customerpretty’ curl ‘localhost:9200/_cat/indicesv’ 参考链接:https://blog.csdn.net/pilihaotian/ar

    2023年04月08日
    浏览(42)
  • elasticsearch7.5.2 数据迁移解决方案

    1. 迁移旧数据 a. 查看ES数据文件挂载目录位置 容器内路径: /usr/share/elasticsearch/data 如果没有挂载,需要将/usr/share/elasticsearch/data 压缩后,文件拷到宿主机上 bash # docker cp [容器名称:文件路径] [宿主机路径] b. 将data.tar.gz 上传至B服务器 迁移es数据文件至B服务器 /root 下 新增

    2024年02月12日
    浏览(57)
  • Elasticsearch Dump的详细安装和迁移es索引和数据的使用教程

    如果希望将数据导出到本地文件而不是通过编程方式处理,可以考虑使用Elasticsearch的导出工具,如 Elasticsearch Dump (Elasticdump)或 Elasticsearch Exporter 。这些工具可以将Elasticsearch索引中的数据导出为可用于后续处理的文件格式,如JSON或CSV,本文主要介绍使用Elasticsearch Dump进行索

    2024年02月14日
    浏览(49)
  • 【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

    这篇文章,主要介绍ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)。 目录 一、布尔查询 1.1、主键查询 1.2、两种查询方式 (1)路径参数查询 (2)请求体参数查询 1.3、match查询 (1)match (2)match_all 1.4、过滤字段 1.5、布

    2023年04月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包