通过搜索引擎内部支持的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索引迁移。
在配置管理页面配置Reindex索引迁移的远程访问地址白名单,具体可参考修改配置文件默认参数,改动如下:
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 },迁移完成后,再打开。