单刀直入
ElasticSearch不同服务器之间的数据迁移方案!
1.迁移方式有如下几种
Elasticsearch-Dump迁移
Elasticsearch-Exporter迁移(凉凉)
Logstash定向索引迁移
Elasticsearch-Migration迁移
2.准备工作
2.1.确定要迁移的索引(Docker版ES7.7.0)
amazon_email_original_message 迁移到 amazon_email_original_message_copy
2.2.检查索引中有数据
3.第一种工具迁移(ElasticDump)
3.1.安装基础操作工具
// 安装源
1) yum install epel-release
2) yum install nodejs
3) yum install npm
// 安装elasticdump
4) npm install elasticdump
// 进入elasticdump安装目录
5) cd node_modules/elasticdump/bin
elasticdump安装中遇到问题
根据提示内容
1.我们缺少一个文件名为package.json的系统文件
执行命令:npm init -y
执行完成后再次执行上述命令。
3.2.执行命令拷贝数据
逐个执行如下命令;
1.拷贝映射
./elasticdump --input=http://[来源IP地址]:9200/[来源索引] --output=http://[目标IP地址]:9200/[目标索引] --type=mapping
2.拷贝数据
./elasticdump --input=http://[来源IP地址]:9200/[来源索引] --output=http://[目标IP地址]:9200/[目标索引] --type=data
3.拷贝analyzer如分词(需要分词器,可能不成功,不影响复制)
./elasticdump --input=http://[来源IP地址]:9200/[来源索引] --output=http://[目标IP地址]:9200/[目标索引] --type=analyzer
成功结果如图:
遇到的问题
1.analyzer拷贝结果如图
dump ended with error (get phase) => BAD_REQUEST
action_request_validation_exception
Validation Failed: 1: no settings to update
说明:这是权限验证失败,需要账号密码
此时需要配置安全验证,增加账户
curl -XPUT -u admin:admin http://[IP地址]:9200/_xpack/security/user/elastic/_password -H "Content-Type: application/json" -d '{ "password": "admin" }'
命令执行后提示如下:
要求ES开启安全配置
编辑ElasticSearch.yml文件,增加如下项重启即可
xpack.security.enabled: true
4.第二种工具迁移(ElasticSearch-Exporter)
4.1.安装基础操作工具
// 操作工具
1) npm install nomnom
2) npm install colors
3) npm install elasticsearch-exporter --production
4.2.工具使用命令如下
# 一定要进入node_modules下的elasticsearch-exporter包目录中,可见到exporter.js才行,否则执行命令坑死人
node exporter.js -a <source hostname> -b <target hostname> -p <s port> -q <t port> -i <s index> -j <t index>
命令执行:node exporter.js --help
结果展示:
Elasticsearch Exporter - Version 1.4.0
Usage: exporter [options]
Options:
-a <hostname>, --sourceHost <hostname> 迁移源机器地址
-b <hostname>, --targetHost <hostname> 迁移目的机器地址(如果没有设置索引,目的地址需要有别于源地址)
-p <port>, --sourcePort <port> 源机器的ES的端口,9200(一般)
-q <port>, --targetPort <port> 目标机器的ES的端口,9200(一般)
-i <index>, --sourceIndex <index> 源ES待导出的索引,如果该值不设定,整个的数据库都会导出。
-j <index>, --targetIndex <index>目标机器ES的索引,如果源索引设定,该值必须填写。
可能存在问题
Cannot find module ‘/root/exporter.js’
这个是提示什么就是缺少什么包,重新安装一下就好:npm install xxx
实在不行就用淘宝的库安装:cnpm i xxx
错误:npm WARN deprecated nomnom@1.8.1: Package no longer supported. Contact support@npmjs.com for more info.
原因:包更新了,不再被支持,个人建议不要使用前端工具,很恶心!实在想用就去官方网站找原因吧!
居然说没有数据可导
Reading source statistics from ElasticSearch
The source driver has not reported any documents that can be exported. Not exporting.
出现这种问题,不好处理,放弃吧!!!
依旧解决不了问题,就果断放弃吧!
5.第三种工具迁移(Logstash)
5.1.安装基础操作工具
环境配置教程参考
链接:服务器基础环境安装教程
5.2.工具使用命令如下
进入logstash的config目录下,增加一个配置:logstash-es2es.conf
input {
elasticsearch {
hosts => [ "192.168.1.248:9200" ]
index => "amazon_email_original_message"
size => 1000
scroll => "5m"
docinfo => true
scan => true
}
}
# filter {
# json {
# source => "message"
# remove_field => ["message"]
# }
# mutate {
# # 此处可以重命名字段
# rename => { "_id" => "wid" }
# }
# }
output {
elasticsearch {
hosts => [ "192.168.1.248:9200" ]
document_type => "docxinfo"
index => "amazon_email_original_message_copy"
}
stdout {
codec => "dots"
}
}
迁移成功结果
迁移可能遇到的问题
原因:Unknown setting ‘scan’ for elasticsearch
删除配置中的“scan”即可
6.第四种工具迁移(Elasticsearch-Migration)
6.1.迁移工具说明
支持多个版本间的数据迁移,使用scroll+bulk
1.版本支持1.x,2.x.5.0 (0.x未测试)
2.支持http basic auth 认证的es集群
3.支持导入覆盖索引名称(目前只支持单个索引导入的情况下可指定)
4.支持index setting和mapping的同步(相关es大版本,2.x和5.0之间不支持)
5.支持dump到本地文件
6.支持从dump文件加载导入到指定索引
6.2.工具使用命令如下
工具来源GitHub,链接:ESM工具源码
1.下载工具
wget https://github.com/medcl/esm/releases/download/v0.5.0/linux64.tar.gz
后面可加 -O [重命名文件名称] // 修改文件下载的默认名称
2.解压缩
tar -zxvf 文件名称
3.进入bin目录
/home/esm/bin/linux64
4.执行命令迁移
./esm -s http://192.168.1.248:9200 -d http://192.168.1.248:9200 -x amazon_email_original_message -y amazon_email_original_message_esm_copy -w=5 -b=100
迁移结果
7.总结
以上就是在下整理的ES数据迁移工具,不同环境个人自行选择!