1 安装
下载对应版本的tar文件
https://www.elastic.co/cn/downloads/past-releases#logstash
解压
tar -zvxf logstash-6.8.23-linux-x86_64.tar.gz
2 配置
修改Logstash的堆内存使用
vi config/jvm.options,修改Logstash配置文件config/jvm.options,增加-Xms2g和-Xmx2g。
修改Logstash批量写入记录条数,可以加快集群数据的迁移效率
vi config/pipelines.yml
pipeline.batch.size从125改为5000
3 创建迁移文件
配置logstash
进入到安装目录下
cd /export/server/logstash/confing/
创建vi es2es_all.conf文件
input {
elasticsearch {
hosts => "http://ip:9200" ##源es集群
user => "用户名" ##认证信息
password => "密码"
index => "索引名称" ##⽀持通配符,* 表⽰所有索引,如果索引多数据量⼤可以分开配置
query => '{ "sort": [ "_doc" ] }'
slices => 4 ##是否使⽤slice scroll加速迁移,值不超过单索引shard数
scroll => "5m" ##scroll session保持时间
size => 1000
docinfo => true
ssl => false ##是否使⽤ssl
}
}
filter {
# 去掉一些Logstash自己加的字段。
mutate {
remove_field => ["@timestamp", "@version"]
}
}
output {
elasticsearch {
hosts => "http://ip:9200" ##目的 es集群
user => "用户名"
password => "密码"
index => "索引名称" #与源es索引保持一致即可
#index => "%{[@metadata][_index]}" #根据原来的信息填写对端的信息
document_type => "%{[@metadata][_type]}" #目标端索引type,以下配置表示索引类型与源端保持一致
document_id => "%{[@metadata][_id]}" #目标端数据的id,如果不需要保留原id,可以删除以下这行,删除后性能会更好
ssl => false #关闭ssl
ssl_certificate_verification => false
ilm_enabled => false
manage_template => false
}
}
4 执行命令,并观察日志
启动Logstash全量迁移任务
nohup bin/logstash -f config/es2es_all.conf >es_all.log 2>&1 &
查看es_all.log日志是否有迁移报错,如果没有则执行以下命令,检查源索引和迁移后的目标索引大小是否一致
tail -f 100 es_all.log
检查数据是否迁移成功
curl -X GET http://ip:9200/_cat/indices?v
5 特殊情况
5.1 如果es开启了https和证书认证
hosts => "https://ip:9200" 改为https的方式
cacert => "/app/logstash-6.8.23/config/CloudSearchService.cer" 配置证书存放路径
ssl => true ssl改为true
5.2 部分数据迁移
query => '{"query":{"bool":{"must":[{"range":{"start_time.keyword":{"from":"2023-10-02 00:00:00","to":"2023-11-01 23:59:59","include_lower":true,"include_up
per":true,"format":"yyyy-MM-dd HH:mm:ss","boost":1.0}}}],"boost":1.0}},"sort":["_doc"]}'
query内写查询匹配条件
参考博文:elasticsearch数据迁移之logstash-优快云博客