一、项目背景与目标

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进阶助手

图片

抢先一步学习进阶干货!

Logo

电影级数字人,免显卡端渲染SDK,十行代码即可调用,工业级demo免费开源下载!

更多推荐