赞
踩
第一章 es集群搭建
第二章 es集群基本操作命令
第三章 es基于search-guard插件实现加密认证
第四章 es常用插件
第五章 es数据迁移之elasticdump
通过第五章内容,我们了解到了elasticdump工具只适合es数据量较小,且索引不是很多、很多的情况下适用,即大部分情况用于备份单个索引。但是在实际生产环境中,迁移整个es集群数据的次数也很多,因此elasticdump就很不适用,如果强硬使用还会导致服务器磁盘IO及CPU过高,容易产生告警,所以本篇文章再给大家推荐一个适用于生产环境的迁移工具logstash。
Logstash是具有实时流水线能力的开源的数据收集引擎。Logstash可以动态统一不同来源的数据,并将数据标准化到您选择的目标输出。它提供了大量插件,可帮助我们解析,丰富,转换和缓冲任何类型的数据
注意: 前提是源es要与目标es网络互通
下载合适的LogStash安装包并解压安装
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.0-linux-x86_64.tar.gz
tar -zvxf logstash-7.10.0-linux-x86_64.tar.gz
修改Logstash的堆内存使用
vi config/jvm.options,修改Logstash配置文件config/jvm.options,增加-Xms2g和-Xmx2g。
修改Logstash批量写入记录条数,可以加快集群数据的迁移效率
vi config/pipelines.yml
pipeline.batch.size从125改为5000
配置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 } }
启动Logstash全量迁移任务
nohup bin/logstash -f config/es2es_all.conf >es_all.log 2>&1 &
查看es_all.log日志是否有迁移报错,如果没有则执行以下命令,检查源索引和迁移后的目标索引大小是否一致
curl -X GET http://ip:9200/_cat/indices?v
注意: 前提是源es要与目标es网络互通
1、创建增量迁移文件 安装logstash及调整配置可见上述‘步骤二’ 说明: 8.5版本Logstash的配置参数有所调整,需要去掉document_type => "%{[@metadata][_type]}"。 按如下脚本修改Logstash配置文件后,开启Logstash定时任务即可触发增量迁移。 vim logstash/config/es_add.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://ip: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 } }
执行以下命令 nohup bin/logstash -f config/es_add.conf >es_add.log 2>&1 & 检查是否成功 curl -XGET http://localhost:9200/kibana_sample_data_logs/_search { "query": { "range": { "@timestamp": { "gte": "now-5m", "lte": "now/m" } } }, "sort": [ { "@timestamp": { "order": "desc" } } ] } 查看返回结果是否包含success字样,若包含则增量迁移成功。
本次分享的logstash迁移方法,最重要的一点就是源es和目标es网络要互相通,如果不通,这种方法会迁移失败。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。