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同步是一个异步任务,终止任务即可。
- 只想同步指定范围数据,怎么处理?

答:在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),索引读写不兼容,需要重建索引。
- 远程迁移
集群迁移,索引服务不停机,数据提前迁移。
- 分片数量调整
分片数量由少变多,由多变少。
- 文档结构变更
字段类型,字段属性变更、文档对象结构变更。
- 索引碎片垃圾处理
索引频繁更新,产生很多内存碎片垃圾。