当索引建好后,需要修改分片的时候,ES是不支持直接修改的,只能建一个新的索引,然后把原索引的数据reindex到新索引里面去,以达到修改的目的。
1、reindex的用法和操作
1.1、reindex用法
POST _reindex
{
"source": {
"index": "metricbeat-*"(老的索引名)
},
"dest": {
"index": "metricbeat"(新的索引名)
}
}
1.2、reindex操作
reindex实际上是用scroll对数据进行游标查询然后插入到新索引,操作如下:
1)数据迁移DSL
POST _reindex?slices=auto&wait_for_completion=false
{
"source": {
"index": "stock_preempt_fulfillsuborder",
"size": 5000,
"query": {
"term": {
"storeNo": {
"value": "1001"
}
}
}
},
"dest": {
"index": "stock_preempt_fulfillsuborder_new"
}
}
参数解释如下:
①slices:切片,表示查询的并行数,一般设置为auto,表示和索引的分片数相等
②size:一次scroll查询的数量,默认是1000,可以适当调大,根据cpu和内存使用情况调整到最优设置
③wait_for_completion:是否等待完成,一般如果删除数据的时间大于30秒(socket超时时间)的时候,kibana会显示超时,并且不会返回结果。这里设置为false,表示直接返回,不等待执行结果,这里会返回一个taskId,可以查看任务的执行情况和结果
④query:这个是可选项,表示从原索引查到的数据才会被导出,默认不加的话,是导出全部数据
2)根据taskId查询执行情况
上面会执行的语句会返回taskId,可以查看任务的执行情况和结果,直到任务完成
GET _tasks/dCNYPIg4RHm3ymBqyEjMwA:59386193
2、修改分片步骤
1)创建一个备份索引(修改后的索引结构),把原索引的数据reindex过去
2)删除原索引
3)创建一个和原索引名字一样的索引,但是索引结构是修改后的
4)把备份索引的数据reindex到新索引中
这个操作的缺点是会中断服务,所以需要在没有人使用该索引的情况下使用,如果需要无感知修改,则需要使用别名,这里不做详细说明
注意:
该操作会导致cpu、内存飙升和服务中断,请尽量避免使用高峰期操作