别慌!Elasticsearch 迁移 Easysearch,Logstash 方案一步一步教你做
通过本方案,我们成功实现了从 Elasticsearch 9.0.0 到 Easysearch 的平滑迁移,为后续的系统升级和优化奠定了坚实基础。作为 Elasticsearch 的兼容性分支,在保持核心功能兼容的同时, 提供了更好的本地化支持和性能优化,可以看做不错的。在多种迁移方案中(快照恢复、Reindex API、Logstash、第三方工具),本方案选择。:确保目标端文档 ID 与源端完
一、项目背景与目标
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 代码是整个迁移方案的核心,实现了以下功能:
-
元数据提取:从 Logstash 内部元数据路径
[@metadata][input][elasticsearch]中提取原始索引名和文档 ID -
数据映射:将提取的信息重新映射到输出阶段可用的元数据字段
-
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进阶助手

抢先一步学习进阶干货!
更多推荐



所有评论(0)