通过搜索引擎内部支持的Reindex指令进行数据迁移,也是一种常见的云搜索数据迁移场景。
Reindex方式适用场景
- 源云搜索实例和目标搜索实例网络互通。
- 无需引入额外外部工具,仅仅依靠API即可实现。
- 对迁移速度没有过高要求。
- 可以按条件筛选进行数据迁移,查询筛选语句、painless脚本全支持。
适配性
Elasticsearch版本间,除了Elasticsearch8.X向Elasticsearch7.X迁移,其余均支持。
Elasticsearch数据往OpenSearch2.9.版本迁移,全部支持。
待迁移集群版本 | Elasticsearch7.10.2 | OpenSearch2.9.0 |
---|---|---|
Elasticsearch6.x | √ | √ |
Elasticsearch7.x | √ | √ |
Elasticsearch8.x | × | √ |
使用方式
如您需要使用该方式进行实例迁移,请在官网提报工单,由工程师为您进行相关配置处理。
示例说明
我们以数据从Elasticsearch7.10.2往OpenSearch2.9.0迁移为例,将geonames索引迁移。
- 我们会在目标实例的OpenSearch的config/opensearch.yml里添加远端的IP白名单配置。
reindex.remote.whitelist: ["IP_source:9200"]
- 我们在目标实例创建index(如果没有额外的分片和mapping的设置,可以跳过)。
- 在目标实例上进行Reindex操作:
POST /_reindex?wait_for_completion=false
{
"source": {
"remote": {
"host": "http://IP_source:9200",
"username": "{username}",
"password": "{password}"
},
"index": "geonames",
"size": 10000
},
"dest": {
"index": "geonames"
}
}
Reindex性能调优
- 增加batch_size:默认1000条为一个batch,一般一个batch在5M-15M数据时,性能比较好。您可根据文档特性,合理修改batch_size。
- 底层调用scroll:slices大小的设置可以手动指定,或者设置slices为auto,auto的含义是:针对单索引,slices大小=分片数;针对多索引,slices=分片的最小值。
- 可以先设置replica为0,后续再修改setting。
- 大量写入情况下,先禁止refresh。设置refresh{ "refresh_interval": -1 },迁移完成后,再打开。