今天换了新集群,要把原集群的ES数据库的数据迁移到新的集群上,经过查找elasticdump使用的人不少,所以今天大家和我一起来学学elasticdump做数据迁移吧。
1、安装
官方提供了两种方式安装,一种是npm,另一种是docker。我们这里使用其中的一种npm安装。
## 安装npm
yum install npm
## 全局安装elasticdump
npm install elasticdump -g
为什么全局安装呢?当然是方便使用,如果你不想全局安装的话就去掉参数-g,那么你想使用elasticdump的话需要去安装路径下。这里推荐全局安装。
2、验证安装结果
elasticdump --version
如果能正确提示版本信息,那么恭喜你安装完毕。但是如果你的提示错误信息,如下:
SYNTAXERROR: UNEXPECTED IDENTIFIER
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:549:28)
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32)
at tryModuleLoad (module.js:453:12)
at Function.Module._load (module.js:445:3)
at Module.require (module.js:504:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/opt/node_modules/elasticdump/elasticdump.js:3:28)
这个错误是由于nodejs版本过低导致的,所以我们要升级nodejs的版本。
3、升级nodejs
如果上一步你的elasticdump没报错,请忽略此步,直接执行下一步。
npm install -g n
n latest
升级完成之后,再次重试
elasticdump --version
如果出现版本信息,那么接下来就可以大展身手了。
4、复制mapping
上一节Docker如何自定义host文件,我们提到我们的数据库都是部署在内网的,那么原来的es和新的es就无法直接连接。那么该怎么迁移呢?
公司的IP可以访问这两个集群的公网(公网可以针对某一IP放行)
那么elasticdump就可以安装在你公司的服务器上,执行以下命令
elasticdump --input=http://原ES的IP:9200/db_customer --output=http://新ES的IP:9200/db_customer --type=mapping
就只有内网可以访问,公网一点不开放
这种情况你就麻烦些了,首先得把原来的ES的数据导出成文件,然后把文件复制到新的ES所在集群,再执行导入操作。
# 原es的服务器 elasticdump --input=http://原ES的IP:9200/db_customer --output=/data/db_customer.json --type=mapping
将/data/my_index_mapping.json文件复制到新es
# 新es的服务器 elasticdump --input=./db_customer.json --output=http://新ES的IP:9200 --type=mapping
这种方式相对来说,比较麻烦,最好结合命令写脚本吧。如果你的索引比较多那不累死。
有密码的ES集群
以第一种方式为例。
创建认证文件auth.ini,内容如下
user=elastic password=password
执行命令
elasticdump --httpAuthFile auth.ini --input=http://原ES的IP:9200/db_customer --output=http://新ES的IP:9200/db_customer --type=mapping
也有人说可以直接在地址栏输入用户名密码,想连接数据库的url一样,我在浏览器测试是可以的。你们可以试一试。
elasticdump --input=http://elastic:password@原ES的IP:9200/db_customer --output=http://elastic:password@新ES的IP:9200/db_customer --type=mapping
5、复制data
将上述的type修改为data即可。
elasticdump --httpAuthFile auth.ini --input=http://原ES的IP:9200/db_customer --output=http://新ES的IP:9200/db_customer --type=data
6、其他类型
type | 说明 |
---|---|
settings | --type=settings |
alias | --type=alias |
analyzer | --type=analyzer |
template | --type=template |
写在最后
目测1s可以导100个文档,我这文档比较小,而且数据不多,因为我是两个服务器的公网导入,可能也受限于带宽。数据量大的话不知道效果怎么样,以后有机会对测试看看。
来都来了,点个赞再走呗!关注WangScaler,祝你升职、加薪、不提桶!