最近开始升级ElasticSearch的版本,这次升级跨度比较大,从5.5.2
升级到了当前最新稳定版7.8
,不过大体差别不是很大,迁移过程中注意一下两点即可:
- 5.5.2索引中的
type
已经废弃,在7.8创建索引的时候需要删除 - 索引中的的
mapping
需要修改为mappings
升级完成后,创建对应的索引,然后进行数据迁移。由于业务对ES的需求还未完善,所以可以先停止ES的数据更新,因为这两个集群在同一个机房部署,所以这里我采用了elasticsearch-dump
的方式来迁移。
elasticsearch-dump
比较适合数据量不大,迁移索引个数不多的场景,所以如果您的索引较多,并且索引内数据量较大,还是采用`snapshot`方式更为合适。因elasticsearch-dump
采用nodejs开发,所以需要先安装好`nodejs`,然后执行如下命令进行安装:
npm install elasticdump -g
针对这个工具,其主要参数如下:
- –input: 源地址,可为ES集群URL、文件或stdin,可指定索引,格式为:{protocol}://{host}:{port}/{index}
- –input-index: 源ES集群中的索引
- –output: 目标地址,可为ES集群地址URL、文件或stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index}
- –output-index: 目标ES集群的索引
- –type: 迁移类型,默认为data,表明只迁移数据,可选settings, analyzer, data, mapping, alias
- –limit: 限制数,每次写入的数据条数,最大值为10000,默认为100
例如:
elasticdump --input=http://10.10.100.208:9200/th11_entry_qtty_peak_dectm_2017 --output=http://10.40.60.13:9200/th11_entry_qtty_peak_dectm_2017 --type=settings elasticdump --input=http://10.10.100.208:9200/th11_entry_qtty_peak_dectm_2017 --output=http://10.40.60.13:9200/th11_entry_qtty_peak_dectm_2017 --type=mapping elasticdump --input=http://10.10.100.208:9200/th11_entry_qtty_peak_dectm_2017 --output=http://10.40.60.13:9200/th11_entry_qtty_peak_dectm_2017 --type=data
因这次是跨版本迁移,所以我已经通过脚本创建好了对应的索引,这里我采用只迁移数据的方式:
elasticdump --input=http://10.10.100.208:9200/th11_entry_qtty_peak_dectm_2017 --output=http://10.40.60.13:9200/th11_entry_qtty_peak_dectm_2017 --type=data --limit=10000
注意,最好加上--limit
参数,并且我设置为最大值,这样每秒5000-10000
的样子。如果是同一个版本之间的迁移,也可以使用如下方式将所有索引的迁移过去:
elasticdump --input=http://10.10.100.208:9200/ --output=http://10.40.60.13:9200/
也可以根据查询结果写入:
elasticdump --input=http://10.10.10.10:9200/test_2022 --output=http://10.10.10.11:9200/test_2022 --type=data --limit=10000 --searchBody='{\"query\":{\"bool\":{\"must\":[{\"term\":{\"stat_dt\":{\"value\":\"20220301\"}}}]}}}'
1