下面介绍两个工具对Elasticsearch数据进行迁移:
- elasticdump
- elasticsearch-exporter
elasticdump
安装步骤
yum install epel-release yum install nodejs yum install nodejs npm npm install elasticdump
- 如果出现这个错误:
a、没有package.json
这个文件。可以使用npm init -f
命令生成一下
b、relocation error: npm: symbol SSL_set_cert_cb, version libssl.so.10 not defined in file libss
先安装openssl 命令:yum install -y openssl
然后安装ws 命令:npm install ws
如果安装成功,elasticdump
的默认路径在node_modules/elasticdump/bin
,首先打开目录
cd node_modules/elasticdump/bin
执行下面语句可以把数据迁移到目标机器
./elasticdump --input=http://192.168.1.1:9200/original --output=http://192.168.1.2:9200/newCopy --type=data
参数说明(可以访问https://www.npmjs.com/package/elasticdump查看)
这一步是迁移到新索引的命令,把192.168.1.1的original
索引迁移至192.168.1.2。 需要注意的是如果只使用这个命令的话,目的索引必须先手动创建一下mapping
,不然迁移过去类型会自动判断,date
类型判断成string等等
如果你很懒你不想自己创建索引,那么你可以在执行上述命令前执行以下命令:
./elasticdump --input=http://192.168.1.1:9200/original --output=http://192.168.1.2:9200/newCopy --type=mapping
不一样的地方就是--type=mapping
,意思是把原始索引original
的mapping
结构迁移给目标索引newCopy
。
如果索引很多,你还是懒得一个个去迁移,那么你可以改用这个命令:
./elasticdump --input=http://192.168.1.1:9200/ --output=http://192.168.1.2:9200/ --all=true
加个--all=true
,input
与output
里不需要把索引名加上,这样就可以自动把原机器上的所有索引迁移到目标机器
下面补充一个运行脚本,从192.168.1.10
把数据导入到192.168.1.11
- 导入索引
--type=mapping
for index in $(cat import_index.txt | awk '{print $1}' );do echo ${index} ./elasticdump --ignore-errors --input=http://192.168.1.10:9200/${index} --output=http://192.168.1.11:9200/${index} --type=mapping done
- 导入数据
--type=data
for index in $(cat import_index.txt | awk '{print $1}' );do echo ${index} ./elasticdump --limit=1000 --ignore-errors --input=http://192.168.1.10:9200/${index} --output=http://192.168.1.11:9200/${index} --type=data done
Elasticsearch-exporter
安装步骤:
npm install nomnom npm install colors npm install elasticsearch-exporter --production
然后执行命令脚本
node exporter.js -a <source hostname> -b <target hostname> -p <s port> -q <t port> -i <s index> -j <t index>