#第一种办法:elasticdump
#先升级elasticdump 参考https://www.dianjilingqu.com/634305.html
1.下载node.js的安装包
http://wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.gz
2.解压安装包
tar xf node-v10.13.0-linux-x64.tar.gz
mv node-v10.13.0-linux-x64 /usr/local
修改文件夹名称
mv /usr/local/node-v12.18.3-linux-x64 /usr/local/nodejs
设置环境变量
echo export NODEJS_HOME=/usr/local/nodejs
echo export PATH=$PATH:$NODEJS_HOME/bin
echo export NODEJS_PATH=$NODEJS_HOME/lib/node_modules
使生效
source /etc/profile
创建软链接(也可以不创建)
ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm
验证是否安装成功
npm -v
node -v
通过npm 安装 elasticdump
npm install elasticdump -g (-g全局可用)
进入
cd /usr/local/nodejs/lib/node_modules/elasticdump/bin
可以看到两个命令
elasticdump -> ../lib/node_modules/elasticdump/bin/elasticdump
multielasticdump -> ../lib/node_modules/elasticdump/bin/multielasticdump
#导出
elasticdump --input=http://'admin:passwd'@172.16.0.118:9200/flyby_hotel_v7 --output=./xiecheng-mapping.json --type=settings --ignore-errors
elasticdump --input=http://'admin:passwd'@172.16.0.118:9200/flyby_hotel_v7 --output=./xiecheng-mapping.json --type=mapping --ignore-errors
elasticdump --input=http://'admin:passwd'@172.16.0.118:9200/flyby_hotel_v7 --output=./xiecheng-mapping.json --type=data --ignore-errors
#导入
elasticdump --input=./xiecheng-settings.json --output=http://'admin:passwd'@172.16.0.118:9200/flyby_hotel_v7 --type=settings --ignore-errors
elasticdump --input=./xiecheng-mapping.json --output=http://'admin:passwd'@172.16.0.118:9200/flyby_hotel_v7 --type=mapping --ignore-errors
elasticdump --input=./xiecheng-mapping.json --output=http://'admin:passwd'@172.16.0.118:9200/flyby_hotel_v7 --type=data --ignore-errors
#第二种方法:logstash(推荐)
[root@ES-TEST-A4 ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.5.tar.gz
[root@ES-TEST-A4 ~]# tar xf logstash-6.8.5.tar.gz
[root@ES-TEST-A4 ~]# cd logstash-6.8.5
#修改Logstash的堆内存使用。
Logstash默认的堆内存为1 GB,您需要根据ECS规格配置合适的内存大小,加快集群数据的迁移效率。
进入Logstash的安装目录下,修改Logstash配置文件config/jvm.options,增加-Xms8g和-Xmx8g。
[root@ES-TEST-A4 logstash-6.8.5]# cd config/
#全量迁移
[root@ES-TEST-A4 config]# cat a.conf
input{
elasticsearch{
# 源端ES地址。
hosts => ["http://localhost:9200"]
# 安全集群配置登录用户名密码。
user => "elastic"
password => "passwd"
# 需要迁移的索引列表,多个索引以英文以逗号(,)分隔。
index => "flyby_hotel_v*" #这里可以使用正则。匹配多个索引
# 以下三项保持默认即可,包含线程数和迁移数据大小和Logstash JVM配置相关。
docinfo=>true
slices => 5
size => 5000
}
}
filter {
# 去掉一些Logstash自己加的字段。
mutate {
remove_field => ["@timestamp", "@version"]
}
}
output{
elasticsearch{
# 目标端ES地址,可在阿里云Elasticsearch实例的基本信息页面获取。
hosts => ["123.60.137.89:9200"]
# 安全集群配置登录用户名密码。
user => "elastic"
password => "passwd"
# 目标端索引名称,以下配置表示索引与源端保持一致。
index => "%{[@metadata][_index]}"
# 目标端索引type,以下配置表示索引类型与源端保持一致。
document_type => "%{[@metadata][_type]}"
# 目标端数据的id,如果不需要保留原id,可以删除以下这行,删除后性能会更好。
document_id => "%{[@metadata][_id]}"
ilm_enabled => false
manage_template => false
}
}
#数据同步
[root@ES-TEST-A4 config]# cat a.conf
input{
elasticsearch{
# 源端ES地址。
hosts => ["http://localhost:9200"]
# 安全集群配置登录用户名密码。
user => "xxxxxx"
password => "xxxxxx"
# 需要迁移的索引列表,多个索引使用英文逗号(,)分隔。
index => "kibana_sample_data_logs"
# 按时间范围查询增量数据,以下配置表示查询最近5分钟的数据。
query => '{"query":{"range":{"@timestamp":{"gte":"now-5m","lte":"now/m"}}}}'
# 定时任务,以下配置表示每分钟执行一次。
schedule => "* * * * *"
scroll => "5m"
docinfo=>true
size => 5000
}
}
filter {
# 去掉一些Logstash自己加的字段.
mutate {
remove_field => ["@timestamp", "@version"]
}
}
output{
elasticsearch{
# 目标端ES地址,可在阿里云Elasticsearch实例的基本信息页面获取。
hosts => ["http://es-cn-zvp2m4bko0009****.elasticsearch.aliyuncs.com:9200"]
# 安全集群配置登录用户名密码.
user => "elastic"
password => "xxxxxx"
# 目标端索引名称,以下配置表示索引与源端保持一致。
index => "%{[@metadata][_index]}"
# 目标端索引type,以下配置表示索引类型与源端保持一致。
document_type => "%{[@metadata][_type]}"
# 目标端数据的id,如果不需要保留原id,可以删除以下这行,删除后性能会更好。
document_id => "%{[@metadata][_id]}"
ilm_enabled => false
manage_template => false
}
}
#执行
[root@ES-TEST-A4 config]# cd ../
[root@ES-TEST-A4 config]# nohup ./bin/logstash -f ./config/a.conf >/dev/null 2>&1 &
#查看日志
[root@ES-TEST-A4 config]# cd ../logs
[root@ES-TEST-A4 logs]# tail -f logstash-plain.log
[2023-04-23T18:16:03,762][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x7ba0801f run>"}
[2023-04-23T18:16:03,824][INFO ][logstash.inputs.elasticsearch] Slice starting {:slice_id=>0, :slices=>5}
[2023-04-23T18:16:03,824][INFO ][logstash.inputs.elasticsearch] Slice starting {:slice_id=>2, :slices=>5}
[2023-04-23T18:16:03,825][INFO ][logstash.inputs.elasticsearch] Slice starting {:slice_id=>3, :slices=>5}
[2023-04-23T18:16:03,832][INFO ][logstash.inputs.elasticsearch] Slice starting {:slice_id=>4, :slices=>5}
[2023-04-23T18:16:03,843][INFO ][logstash.inputs.elasticsearch] Slice starting {:slice_id=>1, :slices=>5}
[2023-04-23T18:16:03,872][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2023-04-23T18:16:04,634][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
[2023-04-23T18:21:33,009][FATAL][logstash.runner ] An unexpected error occurred! {:error=>#
#详解
https://help.aliyun.com/document_detail/418418.html#section-gj2-zuc-nrm
https://support.huaweicloud.com/bestpractice-css/css_07_0009.html
#注意
logstash版本最好跟elasticsearch对应。不同版本的logstash版本,conf的字段支不支持也就不一定。根据报错。
[ERROR][logstash.inputs.elasticsearch] Unknown setting 'slices' for elasticsearch
就是不支持slices这个字段。注释或者修改字段重新运行。
如果是全部迁移。不要用*。如果数据出问题。目标es会报错。导致密码失效。需要去掉密码认证。删除所有索引。在开启密码认证。修改密码。才能使用。
如果索引数据很大。建议最好一个一个迁移。如果一次性迁移过多。中途断掉。再次迁移,会造成数据重复。
#第三种方案:先使用elasticdump迁移索引的settings和mapping。然后使用logstash迁移索引的数据。如果直接logstash迁移。可能会因为参数原因导致迁移中断。
[root@elasticsearch-test bin]# elasticdump --input=http://'admin:passwd'@es-cn-09k1ymh6l001wqa2m.public.elasticsearch.aliyuncs.com:9200/shiji_hotel_detail --output=http://'admin:passwd'@172.16.0.118:9200/shiji_hotel_detail --type=settings --ignore-errors
Thu, 08 Jun 2023 08:28:24 GMT | starting dump
(node:2939) NOTE: We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check the migration guide at https://a.co/7PzMCcy
Thu, 08 Jun 2023 08:28:24 GMT | got 1 objects from source elasticsearch (offset: 0)
Thu, 08 Jun 2023 08:28:24 GMT | sent 1 objects to destination elasticsearch, wrote 1
Thu, 08 Jun 2023 08:28:24 GMT | got 0 objects from source elasticsearch (offset: 1)
Thu, 08 Jun 2023 08:28:24 GMT | Total Writes: 1
Thu, 08 Jun 2023 08:28:24 GMT | dump complete
[root@elasticsearch-test bin]# elasticdump --input=http://'admin:passwd'@es-cn-09k1ymh6l001wqa2m.public.elasticsearch.aliyuncs.com:9200/shiji_hotel_detail --output=http://'admin:passwd'@172.16.0.118:9200/shiji_hotel_detail --type=mapping --ignore-errors
Thu, 08 Jun 2023 08:28:30 GMT | starting dump
(node:2955) NOTE: We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check the migration guide at https://a.co/7PzMCcy
Thu, 08 Jun 2023 08:28:30 GMT | got 1 objects from source elasticsearch (offset: 0)
Thu, 08 Jun 2023 08:28:30 GMT | got 0 objects from source elasticsearch (offset: 1)
Thu, 08 Jun 2023 08:28:30 GMT | Total Writes: 0
Thu, 08 Jun 2023 08:28:30 GMT | dump complete
标签:--,08,elasticsearch,2023,迁移,elasticdump,logstash
From: https://www.cnblogs.com/anslinux/p/17474444.html