You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ES 1.7.1同一集群用Logstash替代_reindex实现索引复制

ES 1.7.1同集群内索引复制的Logstash配置方案

没问题,针对你在ES 1.7.1集群内执行索引复制的需求,我帮你完善Logstash配置并说明关键要点:

完整的logstash.conf配置

input { 
  # 从原索引读取数据
  elasticsearch { 
    hosts => "myhost" 
    port => "9200" 
    index => "my_index" 
    size => 500 
    scroll => "5m" 
    docinfo => true 
  } 
} 

output { 
  # 写入同集群的新索引
  elasticsearch { 
    hosts => "myhost" 
    port => "9200" 
    index => "my_index_new"  # 替换成你想要的新索引名
    document_id => "%{[@metadata][_id]}"  # 保留原文档ID,避免生成新ID
    document_type => "%{[@metadata][_type]}"  # 保留原文档的type(ES 1.7需要)
    flush_size => 500  # 和input的size对应,批量写入
  } 

  # 可选:开启stdout输出查看进度,调试完成后可以注释掉
  stdout { 
    codec => rubydebug 
  } 
}

关键配置说明

  • Input部分:

    • scroll和size:通过scroll API批量读取原索引数据,size控制每次读取的文档数,scroll设置会话有效期,确保在数据读取完成前会话不失效。
    • docinfo => true:开启后会获取原文档的元数据(_id、_type等),这是保留原文档信息的核心配置。
  • Output部分:

    • index:指定新的索引名称,必须和原索引区分开。
    • document_id:使用原文档的ID,避免Logstash自动生成新ID导致数据重复或索引结构不一致。
    • document_type:ES 1.7中索引有type概念,保留原type能保证数据结构和原索引一致。

操作注意事项

  1. 提前创建新索引:建议先手动创建新索引,并复制原索引的mapping和settings,避免Logstash自动生成的mapping不符合预期。创建命令示例:
    curl -XPUT 'http://myhost:9200/my_index_new' -d '{
      "settings": {
        # 复制原索引的settings
      },
      "mappings": {
        # 复制原索引的mappings
      }
    }'
    
  2. 调整批量参数:根据你的集群硬件性能,适当调整size和flush_size,平衡复制速度和集群负载。
  3. 监控复制进度:可以通过ES的_cat/count API查看新旧索引的文档数,确认复制是否完成:
    curl -XGET 'http://myhost:9200/_cat/count/my_index?v'
    curl -XGET 'http://myhost:9200/_cat/count/my_index_new?v'
    
  4. 运行Logstash:进入Logstash安装目录,执行启动命令:
    bin/logstash -f logstash.conf
    

内容的提问来源于stack exchange,提问作者letsc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:28:07