Elasticsearch使用reindex增加分片数

    当索引建好后,需要修改分片的时候,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、内存飙升和服务中断,请尽量避免使用高峰期操作

你可能感兴趣的:(Elasticsearch,Elasticsearch)