【扫盲】elasticsearch(四)— logstash数据同步篇

1,566 阅读1分钟

背景

对传统数据库来说,比如mysql,当需要数据迁移的时候,我们会有很多的方案可以实现,比如手动导出sql文件,再导入到新的数据库里;或者搭建主从复;或者直接使用mysql的dump命令来进行。那elasticsearch如果要进行数据迁移的时候,那要怎么进行呢?下面小编介绍一种方案,一起来看看吧。

方案

前期准备

源elasticsearch: 目标elasticsearch: logstash:

elasticsearch安装

可以参考我前面的文章:

单机安装:juejin.cn/post/707107…

集群安装:juejin.cn/post/707223…

logstash安装

下载

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz

解压

tar -zxvf logstash-6.2.4.tar.gz

创建logstash配置文件

cd logstash-6.2.4/config
vi logstash.conf

logstash.conf的配置如下:

#源elasticsearch
input {
 elasticsearch {
    hosts => "ip:port"
    index => "index_name"
    #此处是es查询所有的数据,可以根据具体业务进行修改
    query => '{ "query": { "match_all":{ }} }'
    size => 500
    scroll => "5m"
    docinfo => true
    codec => json
 }
 }

filter {
 mutate {
     rename => { 
         # 将字段http_referer重命名为http_source
         "createTime" => "created_at"
         "likeNum" => "like_counter"
     }
    # logstash 导出数据会产生一些特殊字段
     remove_tag => ["_grokparsefailure"]
     remove_field => ["@timestamp" , "@version"]
 }
# 导出数据可以添加一些过滤条件
 if[delete] == 1 {
 drop {}
 }
}
# 输出到目标elasticsearch
output {
     elasticsearch {
         #目标elasticsearch的ip和端口
         hosts => ["target_ip:target_port"]
         action => "update" #upsert 有则更新,无则插入
         document_type => "_doc" # 索引type
         document_id => "%{[@metadata][_id]}" # 索引对应的id 字段
         index => "target_index_name"  # 目标索引名称
         doc_as_upsert => true
     }
}

启动

bin/logstash -f config/file.conf

分析

启动之后,logstash就会根据input组件中query中的es语句,将源es的索引数据查询出来,将结果同步到目标es中,这样就完成了源es和目标es的数据同步。

结束

需要源码的可以关注公众号【温故知新之java】,更多干活与你分享。