Logstash迁移ES集群

红米2年前技术文章1488

一、背景介绍

   logstash 支持从一个 ES 集群中读取数据然后写入到另一个 ES 集群,因此可以使用 logstash 进行数据迁移,使用 logstash 进行迁移前,需要注意以下几点:

  • 需要在和云上的 ES 集群相同的 VPC 下创建 服务器,部署 logstash,同时保证该 服务器能够访问到源 ES 集群。

  • 用于部署 logstash 的 服务器最好选择比较高的配置

  • logstash 应该和目标 ES 集群的主版本号相同,例如目标 ES 集群为6.8.2版本,则 logstash 也需要使用6.8版本。

  • 需要特别注意索引 type 的问题,因为 ES 的不同版本对索引 type 的约束不同,跨大版本迁移 ES 集群时可能出现因为索引的 type 而导致写入目标集群失败等的问题。

二、全量同步数据

一个常用的使用 logstash 进行跨集群数据迁移的配置文件如下:

input {
  elasticsearch {
    hosts => "1.1.1.1:9200"
    index => "*"
    docinfo => true
    size => 5000
    scroll => "5m"
    }
}

output {
  elasticsearch {
    hosts => ["[http://2.2.2.2:9200]"]
    user => "elastic"
    password => "your_password"
    index => "%{[@metadata][_index]}"
    document_type => "%{[@metadata][_type]}"
    document_id => "%{[@metadata][_id]}"
  }
}

上述配置文件将源 ES 集群的所有索引同步到目标集群中,同时也可以设置只同步指定的索引,利用 logstash 进行迁移的更多功能可查阅 logstash-input-elasticsearch 和 logstash-output-elasticsearch

三、 增量同步数据

input {
    elasticsearch {
        hosts => "1.1.1.1:9200"
        index => "es-runlog-2019.11.20"
        #查询这个索引前5分钟的5000条数据
        query => '{"query":{"range":{"@timestamp":{"gte":"now-5m","lte":"now/m"}}}}'
        size => 5000
        scroll => "5m"
        docinfo => true
        schedule => "* * * * *" #定时任务,每分钟执行一次
      }
}
filter {
     mutate {
   remove_field => ["source", "@version"]
 }
}
output {
    elasticsearch {
        hosts => ["http://2.2.2.2:9200"]
        index => "%{[@metadata][_index]}"
        document_type => "%{[@metadata][_type]}"
        document_id => "%{[@metadata][_id]}"
        pipeline => "timezone-pipeline"
    }
}

每分钟执行一次,从源集群中拉取5分钟前到当前分钟的所有数据,同步到新的集群中;因为查询的粒度为分钟,所以每次执行定时任务查询时会有一部分重叠的数据,所以需要在output中配置document_id参数避免重复写入到新集群中。

实施过程中遇到的问题有:

a.用于运行logstash的机器的规格要比较大,因为logstash比较消耗内存和cpu,机器性能不够,很可能出现数据同步延迟增大

b.可以通过比较新旧集群当天的索引每分钟doc数据量,判断同步的延迟情况,如果延迟较大,可以通过调整logstash配置或者使用更大的机器运行logstash确保同步过程顺利进行


相关文章

Flume使用案例之Flume与Flume之间数据传递,多Flume汇总数据到单Flume

目标:flume11监控文件hive.log,flume-22监控某一个端口的数据流,flume11与flume-22将数据发送给flume-33,flume33将最终数据写入到HDFS。分步实现:1...

CDP实操--配置HBase的Ranger策略验证(三)

CDP实操--配置HBase的Ranger策略验证(三)

1.1HBase的Ranger策略验证确保HBase的配置页面里已经勾选了“Ranger Service”在terminal中,kerberos登录到hbase,用如下命令登录hbase shellc...

K8S中 CNI 插件的解读

K8S中 CNI 插件的解读

一.CNI是什么首先我们介绍一下什么是 CNI,它的全称是 Container Network Interface,即容器网络的 API 接口。它是 K8s 中标准的一个调用网络实现的接口。Kubel...

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(3)

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(3)

4.0 SpringBoot 后端代码进行打包上传服务器        将 SpringBoot 项目进行打包:      &nb...

企业级大数据安全架构(十一)

企业级大数据安全架构(十一)

一、Kerberos接入dophinscheduler建议将dophinscheduler集成到Ambari安装部署,在Ambari上面开启kerberos1.安装准备编译从GitHub获取dolph...

arm环境安装达梦数据库

arm环境安装达梦数据库

一、安装前准备1、创建用户和用户组groupadd dinstall useradd -g dinstall -m -d /home/dm...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。