在Elasticsearch环境中,数据迁移是一个常见的任务,例如在升级版本、调整集群配置或复制数据集时。如何迁移ES中的索引数据,是一个经常遇到的问题。看到网上写了很多的数据迁移攻略,例如通过Kinaba、索引重建(reindex)、python代码等。但是在受到网络限制的离线环境下,就有点麻烦。很多时候我们都很着急。这里我测试了集中方法。
- 通过Kinaba,网上的教程步骤多,操作复杂
- 索引重建(reindex)需要配置ES的白名单,不适合ES云实例
- python代码,通过跳板机部署环境太麻烦
elasticdump是一个强大的工具,它允许我们方便地导入和导出Elasticsearch的数据。在这篇博文中,我们将探讨离线环境如何使用elasticdump来迁移数据。
实验环境
- windows可联网电脑一台
- windows虚拟机一台(只能通过vpn连接,且无法访问互联网,可以连接内网es)
- Elasticsearch7.4 实例 2个
部署elasticdump
- 部署node.js
elasticdump由于需要在node.js环境下使用,需要先部署node.js。直接在官网进行下载即可。下载后,两台windows电脑上安装一样的版本即可。本人使用15.14.0。
- 部署elasticdump
elasticdump是需要通过npm install安装的,由于windows虚拟机上无法联网。在可以联网windows上创建文件夹,然后执行下面的命令
npm init # 执行初始化
cnpm install elasticdump --save # 将elasticdump 安装在当前文件夹内
然后压缩整个文件夹,拷贝到windows虚拟机上,解压文件夹。
在\node_modules\.bin
目录下,就可以找到elasticdump的可执行程序
执行数据迁移
在windows的虚拟机上,使用cmd命令窗口,定位到\node_modules\.bin
目录下,使用下面的命令进行迁移
elasticdump --input=http://<源ES用户名>:<源ES用密码>@<源ESip地址>:<源ES端口号>/<源ES索引名> --output=http://<目标ES用户名>:<目标ES主机名>@<目标ES端口号>:<目标ES端口号>/<目标ES索引名>
# 示例
elasticdump --input=http://root:123456@192.168.2.3:9200/cat_data --output=http://root:123456@192.168.2.96:9200/cat_data
也可以不使用用户名或者密码,也可以迁移全部索引,但是没有测试过
总结
通过这种方式,部署方便,操作简洁,只需要一行命令,不需要额外复杂的操作。