reindex索引是干什么的 (reindex传输用的什么协议)

1、日志迁移实操

//创建临时索引
PUT log_tmp
{
    "mappings" : {
      "dynamic" : "true",
      "properties" : {
        "data" : {
          "type" : "text"
        }
      }
    }
}

//记录原总数:
GET /log_source/_count

//同步:
POST _reindex
{
  "source": {
  "index": "log_source",
  "size":1000
  },
  "dest": {
  "index": "log_tmp"
  }
}

//检测进度:
GET /log_tmp/_count
 
//迁移完成,删除原索引:
DELETE /log_source
//检测删除情况:
GET /log_source/_mapping


//重建原索引
PUT log_dest
{
 "settings": {
    "index": {
      "refresh_interval" : "5s",
      "number_of_shards": "5",
      "number_of_replicas": "1"
    },
    "mappings" : {
      "dynamic" : "true",
      "properties" : {
       "data" : {
          "type" : "keyword"
        }
    }
}
 
//同步:
POST _reindex
{
  "source": {
  "index": "log_tmp",
  "size":1000
  },
  "dest": {
  "index": "log_dest"
  }
}
 
//检测进度:
GET /log_dest/_count
 
//迁移完成,删除临时索引:
DELETE /log_tmp
//检测删除情况:
GET /log_tmp/_mapping

2、reindex问答

  • 重建索引的前提

答:reindex重建索引创建新索引,原有索引【source】"_source"必须开启。

  • 重复执行是否会产生重复数据?

答:不会,重复执行会基于id进行更新。

  • 源索引【source】一直在新增,目的索引同步到一定量怎么停止?

答:reindex同步是一个异步任务,终止任务即可。

  • 只想同步指定范围数据,怎么处理?

reindex传输用的什么协议,reindexlevel参数

答:在source中添加,query查询。

  • 只想同步到指定分片,怎么处理?

答:在dest中添加,routing:路由到指定分片。

  • 怎么控制同步速度,避免造成集群io压力太大?

答:在source中添加,,Max_docs:单次最大数据条数,requests_per_second:每秒数据量阈值控制,默认是-1(不限制)。

  • 针对dest一遍新增数据,一遍reindex同步,会影响dest数据一致性吗?

答:不会,只要_id不一致就可以。

3、reindex常用场景

  • 集群版本升级

同一大版本升级(如6.1.x->6.8.x或7.1.x->7.8.x),索引读写兼容,不需要重建索引;不同版本升级(如6.1.x->7.1.x),索引读写不兼容,需要重建索引。

  • 远程迁移

集群迁移,索引服务不停机,数据提前迁移。

  • 分片数量调整

分片数量由少变多,由多变少。

  • 文档结构变更

字段类型,字段属性变更、文档对象结构变更。

  • 索引碎片垃圾处理

索引频繁更新,产生很多内存碎片垃圾。