elk笔记6--reindex 实践
1 reindex 介绍
reindex 用于提取源index的文档到目的index。可以根据需要拷贝所有文档到目的index,也可以按照条件拷贝匹配的一部分文档到目标索引。其既可以在同一个集群,也可以在不同集群之间操作,不同集群之间多用于索引迁移(如旧集群要下线的时候)。
2 reindex 实践
2.1 同集群内部reindex
将集群内部a index reindex 到同一个集群内的b index, 如果需要异步执行可以在PUT后加上 wait_for_completion=false 参数.
此处通过时间过滤,2019-10-30T00:00:00 之后的都进行index.
POST _reindex
{
"source":{
"index":"ksdf_0531",
"query":{
"range":{
"timestamp":{
"gte": "2019-10-30T00:00:00"
}
}
}
},
"dest":{
"index": "ksdf_0531-2"
}
}
放在后台执行的reindex可以通过 GET _tasks?detailed=true&actions=*reindex 来查看集群中的reindex任务, 可以通过 GET _tasks/task-id 来查看当前任务的进度
reindex 结果:
2.2. 跨集群reindex
将A集群内部a index reindex 到B集群内的b index.
- 设置白名单
在B集群的elasticsearch.yml 中添加 reindex.remote.whitelist: 10.120.75.102:9200, 并重启节点。 - 执行reindex 命令
将A 集群内kibana_sample_data_flights reindex到B集群ksdf_0531,过滤掉2019-10-31之前的数据. 若集群带认证,还需要在source中添加对应的username 和password字段。
reindex 结果:POST _reindex { "source": { "index": "kibana_sample_data_flights", "remote": { "host": "http://10.120.75.102:9200" }, "query": { "range": { "timestamp": { "gte": "2019-10-30T00:00:00" } } } }, "dest": { "index": "ksdf_0531" } }
3 常见问题|注意事项
- 在生产环境中,由于Reindex 并不从源index拷贝settings,也不会拷贝其对应的Mappings,shard数量,replicas数量等属性,因此实际执行_reindex之前需要先配置index的属性。
4 说明
测试使用的elk版本为6.8.8和7.2.0
elastic reindex-upgrade
elastic reindex-upgrade-remote
elastic reindex api