🗺️博客地图
一、项目背景
由于项目升级需要将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传输之前。当导入

最低0.47元/天 解锁文章
7448

被折叠的 条评论
为什么被折叠?



