近日接到联想公司小伙伴消息,因为安全原因需要把两套 ES 5 集群迁移升级到 ES 7 集群。我们一起梳理了需求和方案,决定采用 INFINI Console 加 INFINI Gateway 进行数据迁移,这个方案的好处如下:
- UI 界面操作,方便、快捷
- 支持目的端索引改名
- 支持复制源索引的 mapping 和 setting
- 对于大数据量的索引,可以 range 迁移,还可以 partition 分区。将大的迁移任务拆分成多个小任务,便于并发处理和错误重试
- 一键写入优化,为了加快迁移速度,可以一键给目标端索引设置写入优化参数
- 迁移时处理 type 问题,改成 _doc
- 集成了数据比对功能,增强迁移信心




当然,迁移过程中还遇到了一些其他问题:
- mapping.nested_fields.limit 超限,因为在 ES 5 中这个是不做限制的,在 ES 7 中默认限制 100000。导数前先修改,确保导入不报错。
- 有些数据中有"\n"特殊符号,导致 bulk 写入报错。这个提前让开发进行数据修复,去掉特殊字符。
- 报错"body size exceeds the given limit",修改 ES http.max_content_length 大小。
最后还有个问题,源端和目标端不在一个机房,对比数据因为 scroll 拉去数据不全,总是失败,怎么办?
哈哈,下次分解。