freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ElasticSearch必知必会-Reindex重建索引
2023-03-14 11:36:17
所属地 四川省

作者:京东物流 康睿

1.重建索引需求背景

1.1 集群版本升级

ES版本兼容性

  1. 同一大版本范围内升级,索引读写兼容
  2. 不同大版本升级,索引读写不兼容,需要重建索引

1678765705_640fee89744a15ac183b9.png!small?1678765706163

1.2 集群迁移

集群索引迁移

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

1.3 索引分片数量调整

分片数量变更

  1. 原有分片数量太少,重建变多
  2. 原有分片数量太多,重建变少
  3. ES索引分片,一旦创建,原索引是不能修改分片数量的

1678765719_640fee97425332855f4bc.png!small?1678765719774

1.4 索引文档结构变更

文档结构变更

  1. 字段类型变更,已有索引字段类型是不可以修改的
  2. 字段属性变更,历史数据的字段属性是不会刷新的
  3. 文档对象结构变更

1678765731_640feea3b7013019dbbf7.png!small?1678765732457

2.常用重建索引方式

2.1 Reindex初识

索引重建说明

  1. 重建是创建新索引,原有索引保留
  2. 原有索引_source必须开启,否则找不到原始数据
  3. 索引重建建议,严格业务场景,目标索引mapping结构建议先创建好,不使用es动态推测字段类型的方式。
POST_reindex
{
  "source": {
    "index": "原始索引"
  },
  "dest": {
    "index": "新目标索引"
  }
}

2.2 Url参数解读

URL参数

  1. refresh,目标索引是否立即刷新
  2. waif_for_active_shards, 重建索引分片响应设置
  3. Scroll, 快照查询时间
  4. slicing, 重建并行任务切片
  5. Max_docs , 单次最大数据量,条数
  6. requests_per_second . 单次执行的重建文档数据量

2.3 Request body参数解读

请求参数

  1. confilicts, 索引数据冲突如何解决,直接覆盖还是中断
  2. source: 原索引配置信息
  3. dest,新索引配置信息
  4. script,脚本处理,修改原索引信息后再写入新索引

1678765748_640feeb4ea53d98f8d06e.png!small?1678765749625

2.4 Response 参数解读

响应参数

  1. 成功数
  2. 更新数
  3. 新增数
  4. 失败数

1678765760_640feec08bf3437633b5f.png!small?1678765761264

2.5 重建索引任务管控

任务管控必要性

  1. 重建索引是一个异步任务,由ES后台进程完成调度执行,集群可能有并行其他异步任务,有时需要中断停止或查看进度

任务管控API

  1. _tasks,服务端API

1678765774_640feece1b42e1498cecf.png!small?1678765774774

3.高级索引重建方式

3.1 单秒数据量阈值控制

单秒数据量控制

  1. requests_per_second
  2. 默认1000,设置-1则不限制
  3. 生产重建时,建议控制范围500-1000左右
  4. 控制重建速度,防止集群瞬间IO过大

1678765790_640feede43831e57e583f.png!small?1678765791769

3.2人工切片

数据切片应用

  1. 人为指定切片数量,并行任务
  2. 用于降低索引redinx速度
POST_reindex
{
  "source": {
    "index": "my-index-000001",
    "slice": {
      "id": 0,  // 执行下标,从0开始,即0切第一批数据做迁移,1切第二批数据做迁移
      "max": 2  // 切分分片数
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

1678765808_640feef051a474d998f72.png!small?1678765808894

3.3 自动切片

自动切片

  1. 仅需指定自动切片大小即可,后续的调度由es完成
POST_reindex?slices=5&refresh
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}



3.4 限制reindex重建数据的范围

3.4.1 query

限制查询条件

  1. 基于DEL语言规则编写,可以任意复杂,限制数据范围
POST_reindex
{
  "source": {
    "index": "my-index-000001",
    "query": {
      "term": {
        "user.id": "kimchy"
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

3.4.2 max docs

限制数据条数

  1. 限制重建数据总条数,默认全部
POST_reindex
{
  "max_docs": 1,
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

3.5 多索引重建

多索引重建

  1. ES也支持将多个索引数据合并到一个索引里面去
  2. 若多个索引数据ID相同,则会相互覆盖
POST_reindex
{
  "source": {
    "index": ["my-index-000001", "my-index-000002"]
  },
  "dest": {
    "index": "my-new-index-000002"
  }
}

3.6 限制重建索引数据字段

限制重建索引数据字段

  1. source filter
  2. 原有数据字段过多,需要限制筛选部分进行重建
POST_reindex
{
  "source": {
    "index": "my-index-000001",
    "_source": ["user.id", "_doc"]
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

3.7 字段重命名

字段名重命名

  1. 原有的数据字段名称不合理,重新按照新字段命名
  2. 基于脚本机制修改
  3. ES字段名称原始是不允许修改的,但通过脚本可以操作

1678765827_640fef039defba18d601c.png!small?1678765828881

3.8 修改原始文档数据

修改原始文档数据

  1. 基于脚本

1678765839_640fef0f026ad9faec213.png!small?1678765839906

4.跨集群索引重建

跨集群操作

  1. 基于集群通信,类同远程机制
  2. 需设置跨集群白名单,配置在dist集群

1678765852_640fef1cd99d62ddcb8e9.png!small?1678765853684

5.索引重建注意事项

5.1 数据量阈值控制

控制好索引重建速率,防止过快

5.2 索引访问交叉影响

建议先新建好dist索引

# 数据安全 # ElasticSearch # Elasticsearch数据库 # Kubernetes安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录