暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

别慌!Elasticsearch 迁移 Easysearch,Logstash 方案一步一步教你做

一、项目背景与目标

1.1 迁移场景

本次迁移项目涉及从腾讯云服务器上的 Elasticsearch 9.0.0 版本迁移数据至 Easysearch 集群。

Easysearch 作为 Elasticsearch 的兼容性分支,在保持核心功能兼容的同时, 提供了更好的本地化支持和性能优化,可以看做不错的国产化 Elasticsearch替代方案。

1.2 迁移目标

  • 实现索引数据的完整迁移。
  • 保持文档 ID 的一致性,避免数据重复。
  • 确保迁移过程的数据完整性。
  • 最小化对业务的影响。
  • 完整视频解读

二、技术方案设计

2.1 方案选型:Logstash 方式

在多种迁移方案中(快照恢复、Reindex API、Logstash、第三方工具),本方案选择 Logstash 作为迁移工具。

主要优势如下:

(1)灵活性强:支持数据过滤、转换和处理。

(2)实时监控:可通过日志实时查看迁移进度。

(3)断点续传:支持 scroll 机制,大数据量迁移更稳定。

(4)跨版本兼容:能够处理不同版本间的差异。

2.2 架构设计

三、核心配置详解

3.1 Input 插件配置

input {
  elasticsearch {
    hosts => ["https://X.X.X.X:9200"]
    index => "product-index"
    user => "elastic"
    password => "changeme"
    ssl_enabled => true
    ssl_verification_mode => "none"
    docinfo => true
    size => 500
    scroll => "5m"
  }
}


配置要点说明:

参数
值
说明
hosts
https://X.X.X.X:9200
源端 ES 地址,使用 HTTPS 协议
index
product-index
指定迁移的索引名称
ssl_enabled
true
启用 SSL/TLS 加密传输
ssl_verification_mode
none
跳过证书验证(适用于自签名证书)
docinfo
true
关键配置
:保留文档元数据信息
size
500
每批次读取 500 个文档
scroll
5m
Scroll 上下文保持 5 分钟

3.2 Filter 插件配置

filter {
  ruby {
    code => '
      # 从元数据中提取索引名和文档 ID
      if event.get("[@metadata][input][elasticsearch][_index]")
        event.set("[@metadata][_index]", event.get("[@metadata][input][elasticsearch][_index]"))
        event.set("[@metadata][_id]", event.get("[@metadata][input][elasticsearch][_id]"))
      end
    '

  }
}


核心逻辑解析:

这段 Ruby 代码是整个迁移方案的核心,实现了以下功能:

  1. 元数据提取:从 Logstash 内部元数据路径 [@metadata][input][elasticsearch]
     中提取原始索引名和文档 ID
  2. 数据映射:将提取的信息重新映射到输出阶段可用的元数据字段
  3. ID 保持:确保目标端文档 ID 与源端完全一致,避免数据重复

3.3 Output 插件配置

output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    index => "%{[@metadata][_index]}"
    document_id => "%{[@metadata][_id]}"
    manage_template => false
    template_overwrite => false
    ilm_enabled => false
  }
}


配置要点说明:

参数
值
说明
hosts
http://127.0.0.1:9200
目标 Easysearch 地址
index
%{[@metadata][_index]}
动态引用源索引名
document_id
%{[@metadata][_id]}
使用源端文档 ID
manage_template
false
不自动管理索引模板
ilm_enabled
false
禁用索引生命周期管理

四、实施步骤

4.1 前期准备

1. 环境检查

(1)检查源端 Elasticsearch 连接



(2)检查目标端 Easysearch 连接

4.2 执行迁移

1. 启动 Logstash



.\logstash.bat -f "D:\software\logstash-9.0.0-windows-x86_64\logstash-9.0.0\config\migration.conf"








4.3 迁移验证

1. 数据完整性验证




经过上述充分验证,确保数据迁移前后一致!

五、关键技术点

5.1 文档 ID 保持机制

通过 docinfo => true
 和 Ruby 脚本配合,实现了文档 ID 的完整保持:

5.2 批量处理优化

  • size: 500:平衡了网络传输效率和内存占用
  • scroll: 5m:为大数据量迁移提供足够的处理时间
  • 可根据实际网络环境调整参数

5.3 SSL 连接处理

源端使用 HTTPS 协议,配置了:

  • ssl_enabled => true
    :启用 SSL
  • ssl_verification_mode => "none"
    :跳过证书验证(生产环境建议使用有效证书)

六、总结与展望


通过本方案,我们成功实现了从 Elasticsearch 9.0.0 到 Easysearch 的平滑迁移,为后续的系统升级和优化奠定了坚实基础。

该方案已在生产环境验证,具有较高的可靠性和实用价值。


更短时间更快习得更多干货!

和全球超2000+ Elastic 爱好者一起精进!

elastic6.cn——ElasticStack进阶助手


抢先一步学习进阶干货!

文章转载自铭毅天下Elasticsearch,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论