【elasticsearch私房菜 | 01】又要数据迁移?两种ES数据迁移方式最佳实践保你迁移无忧,强烈推荐reindex

🗺️博客地图

📍一、项目背景

📍二、elasticdump工具介绍及实践

🖈(一)elasticdump工具简介

🖈(二)elasticdump工具安装

🚩1、迁移工具离线准备

🚩2、迁移工具离线安装

🖈(三)参数说明

🖈(四)最佳实践

📍三、reindex API简介及实践

🖈(一)reindex简介

🖈(二)reindex实践

🚩1、基本使用方式

🚩2、使用分片进行reindex

🚩3、指定部分字段进行reindex

🚩4、指定部分文档进行reindex

🚩5、指定速率进行 reindex

🚩6、使用 script 进行 reindex

🚩7、多个源索引进行 reindex 到一个目标索引

🚩8、覆盖更新索引

🚩9、创建丢失的文档并更新旧版本的文档

🚩10、仅创建丢失的文档

🚩11、reindex超时情况

🚩12、从远程 ES 集群进行 reindex

🖈(三)最佳实践

🖈(四)Reindex 优化问题


一、项目背景

由于项目升级需要将es索引迁移,从es版本看是从elasticsearch-5.6.6版本迁移到elasticsearch-7.17.5版本中,因之前其他项目采用elasticdump工具迁移,有过成功经验,所以首先借鉴其经验采用elasticdump工具来实现。

注意:由于网络、服务器性能等的关系,elasticdump工具在索引doc数超过5千万可能会发生中断现象,并且在elasticsearch 6.0版本之后不支持offset参数进行断点续传,可以采用ES自带接口reindex(推荐指数:★★★★★方式进行迁移。

如果各位读者工作中项目比较着急,建议可以直接跳转【最佳实践】进行阅读实践

二、elasticdump工具介绍及实践

(一)elasticdump工具简介

首先先来简单认识一下elasticdump工具:

Elasticdump 是一个用于导入和导出 Elasticsearch 数据的命令行工具。它提供了一种方便的方式来在不同的Elasticsearch 实例之间传输数据,或者进行数据备份和恢复。

使用 Elasticdump,你可以将 Elasticsearch 索引中的数据导出为 JSON 文件,或者将 JSON 文件中的数据导入到 Elasticsearch 索引中。它支持各种选项和过滤器,用于指定源和目标,包括索引模式、文档类型、查询过滤器等等。

主要特征包括

  • 支持在Elasticsearch实例或者集群之间传输和备份数据。可以将数据从一个集群复制到另一个集群。
  • 支持不同格式的数据传输,包括JSON、NDJSON、CSV、备份文件等。
  • 可以通过命令行或者程序化的方式使用。命令行方式提供了便捷的操作接口。
  • 支持增量式同步,只复制目标集群中不存在的文档。
  • 支持各种认证方式连接Elasticsearch,如basic auth、Amazon IAM等。
  • 支持多线程操作,可以加快数据迁移的速度。
  • 开源免费,代码托管在GitHub上。

(二)elasticdump工具安装

1、迁移工具离线准备

a.准备elasticdump工具

  • 下载node安装包(有公网的服务器A)

wget https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.xz

b.安装node

  • 解压:

tar -xvf node-v16.14.0-linux-x64.tar.xz -C /usr/local

c.建立软链接

ln -s /usr/local/node-v16.14.0-linux-x64/bin/node /usr/bin/node

ln -s /usr/local/node-v16.14.0-linux-x64/bin/npm /usr/bin/npm

d.确认安装成功

node -v

npm -v

e.安装打包工具 npm-pack-all

npm install -g npm-pack-all

f.安装elasticdump

npm install elasticdump -g

g.打包elasticdump

cd /usr/local/node-v16.3.0-linux-x64/lib/node_modules/elasticdump

npm-pack-all --output build/elasticdump.tgz

#当前目录build/下生成elasticdump.tgz

2、迁移工具离线安装

a.将node安装包和elasticdump安装包复制到离线安装的服务器B

node-v16.14.0-linux-x64.tar.xz、elasticdump.tgz

b.在服务器B上部署elasticdump

tar -xvf node-v16.14.0-linux-x64.tar.xz -C /usr/local

tar -zxvf elasticdump.tgz -C /usr/local

ln -s /usr/local/node-v16.14.0-linux-x64/bin/node /usr/bin/node

ln -s /usr/local/node-v16.14.0-linux-x64/bin/npm /usr/bin/npm

ln -s /usr/local/package/bin/elasticdump /usr/bin/elasticdump

c.核对elasticdump是否安装成功

node -v

npm -v

elasticdump --version

d.验证elasticdump工具是否能正常使用

  • 库对文件

elasticdump --limit=10000 --input=http://elastic:elastic@10.5.3.5:9200/demo_2023-02 --output=/home/esjson/demo_2023-02.json

  • 库对库

elasticdump --input= --input=http://elastic:elastic@10.5.3.5:9200/demo_2023-02 --output= --input=http://elastic:elastic@10.5.3.6:9200/demo_2023-02 

(三)参数说明

● --input 源位置(必填)

● --input-index 来源索引和类型(默认值: all,示例: index/type)

● --output 目标位置(必填)

● --output-index 目标索引和类型(默认值: all,示例: index/type)

● --limit 每次操作批量移动多少个对象(docs)限制是文件流的近似值(默认值:100 )

● --size 要检索多少个对象(默认值:- 1 ->无限制)

● --debug 显示正在使用的elasticsearch命令debug日志(默认值:false)

● --quiet 禁止显示除错误之外的所有消息(默认值:false)

● --type 指定迁移的索引类型 (默认值: data, 选项: [data, settings, analyzer, mapping, alias])

● --delete 当文档被移动时,从输入中逐个删除它们,不会删除源索引 (默认值:false)

● --overwrite 如果存在,覆盖输出文件(默认:false)

● --bulkaction 设置准备发送给elasticsearch的请求体时使用的操作类型。(default:索引,选项:[索引,更新,删除,创建])

● --filtersystemtemplates 是否删除metrics--和logs--系统模板(默认:true)

● --templateRegex 用正则表达式在输出传输之前过滤模板(默认:(metrics|logs|..+)(-.+)?)

● --delete-with-routing 将路由查询参数传递给delete函数,实现将操作路由到特定的分片。(默认值:false)

● --skip-existing 跳过已经存在的异常资源,并成功退出(默认:false)

● --headers 为Elastisearch 请求添加自定义头(当 Elasticsearch 实例位于代理之后很有用)(默认值: ' {"User-Agent": "elasticdump"} ' )

● --params 添加自定义参数到 Elastisearch 请求 uri。例如:当希望使用elasticsearch首选项(默认值:null )

● --searchBody 根据搜索结果执行部分提取 (当 ES为输入时,默认值为: if ES > 5 '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }' else '{"query": { "match_all": {} }, "fields": ["*"], "_source": true }' [As of 6.68.0] 如果searchBody前面有@符号,elasticdump将在执行文件指定的位置查找。注意:文件必须包含有效的JSON

● --searchWithTemplate 启用---searchBody时使用搜索模板。如果使用Search Template,则searchBody必须由"id"字段和"params"对象组成。如果在Search Template中定义了"size"字段,则它将被--size parameter覆盖。

● --searchBodyTemplate 一个方法/函数,可以调用到searchBody。可以多次使用。 doc.searchBody = { query: { match_all: {} }, stored_fields: [], _source: true };

● --sourceOnly 仅输出document_source中包含的json(默认值:false) Normal: {"index":"","type":"","_id":"", "__source":{SOURCE}} sourceOnly: {SOURCE}

● --ignore-errors 写错误时是否继续读/写循环 (默认值: false)

● --ignore-es-write-errors 将对elasticsearch的写错误继续进行读写循环(默认值:true)

● --scrollId 从elasticsearch返回的最后一个滚动Id。允许使用最后一个滚动id并且scrollTime没有过期来恢复转储。

● --scrollTime 节点将按顺序保存请求的搜索时间(默认值:10m)

● --scroll-with-post 使用HTTP POST方法来执行滚动,而不是默认的GET方式(默认值:false)

● --maxSockets 可以同时处理多少个 HTTP 请求 (默认值:5 [node <= v0.10.x] |无限 [node >= v0.11.x] )

● --timeout 整数,包含在放弃请求之前等待请求响应的毫秒数,直接到请求库。当不太关心导入时是否丢失一些数据,而是希望有速度时使用。

● --offset 整数,包含要跳过的行数,在input传输之前。当导入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子Linux

各位看官老爷,行行好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值