环境
- windows
- 单节点es集群
分析大分片索引的处理方式
- 直接删除
- 对应的业务系统已经下线
- 索引数据已经过期或者不重要
- 删除索引数据
- 索引存在无意义的数据,可以进行条件删除,并创建定期删除计划
- 拆分索引
- 索引数据不更新,可以将索引拆分成多个索引,利用别名查询
- 索引数据每天都在新增,如时间序列数据,可以使用索引生命周期策略管理索引
具体实现
删除索引
删除单个索引
DELETE /index-name
删除前缀为index-prefix的索引
DELETE index-prefix*
删除索引数据
POST /index-name/_delete_by_query
{
"query": {
"range": {
"message_time": {
"gte": "2022-07-01T00:00:00" ,
"lte": "2022-07-20T23:59:59"
}
}
}
}
出现响应502时可以使用以下方法删除
POST /index-name/_delete_by_query?conflicts=proceed&wait_for_completion=false
{
"query": {
"range": {
"message_time": {
"gte": "2022-07-01T00:00:00" ,
"lte": "2022-07-20T23:59:59"
}
}
}
}
#查看任务
GET /_tasks/task:id
#取消任务
POST _tasks/task:id/_cancel
执行上面的操作只是将文档标记为已删除,需要使用强制合并segment将已标记的删除文档从屋里上删除
#查找存在删除文档的索引
GET _cat/indices?v&s=docs.deleted:desc
# 强制合并
POST /ops/_forcemerge?only_expunge_deletes=true&max_num_segments=1
# 查看segment情况
GET /_cat/segments/index-name/?v&s=prirep,shard
GET /_cat/segments/ops?v&s=docs.deleted:desc,segment
拆分索引
拆分索引,利用别名查询
暂无实践
使用生命周期管理策略重建索引
对于不断增长时序类数据,如日志、监控信息等,会随着时间的积累数据量越来越大,且查询、写入都是近期的数据,历史数据意义不大,可以使用ILM定期将数据滚动至新的索引,防止因数据量大影响查询效率和成本。
- 创建临时索引temp,mappings数据结构与待重建索引my-index一致
PUT /temp
{
"mappings":{}
}
- 将my-index数据同步至temp
POST /_reindex?wait_for_completion=false
{
"source": {
"index": "my-index",
"size":5000
},
"dest": {
"index": "temp",
"op_type": "create"
},
"conflicts": "proceed"
}
GET /_tasks/task:id
- source.size: 批次大小设置,默认为1000
3. 定义数据的冷热策略
PUT /_ilm/policy/policy_my_index
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "7d" ,
"max_size": "50G"
},
"set_priority": {
"priority": 100
}
}
},
"warm": {
"actions": {
"forcemerge" : {
"max_num_segments": 1
},
"allocate": {
"number_of_replicas": 0
},
"shrink": {
"number_of_shards":1
},
"readonly": {},
"set_priority": {
"priority": 50
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
| 参数 | 说明 |
|---|---|
| hot | 索引滚动跟新(rollover)触发条件:使用超过7天(max_age)、数据写入达到50G(max_size)。此时系统将创建一个新索引,该索引将重新启动策略,而旧索引将在滚动更新后进入warm阶段。 |
| warm | 索引进入warm阶段后,ILM会将索引收缩到1个分片,将索引强制合并为1个段。完成该操作后,索引将在30天(从滚动更新时算起)后进入delete阶段。 |
| cold | 无 |
| delete | 索引进入delete阶段 |
- 删除my-index
DELETE /my-index
- 创建索引模板
PUT _template/template_my-index
{
"index_patterns": ["my-index-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "policy_my-index",
"index.lifecycle.rollover_alias": "my-index"
},
"mappings" : {}
}
#指定索引新建时所分配的节点(此项不指定会默认分配到所有节点)多节点有效 "routing.allocation.require.box_type": "hot"
- 创建用于ILM的初始索引
PUT my-index-000001
{
"aliases": {
"my-index": {
"is_write_index": true
}
}
}
aliases 与 上面模板设置的一致
- 将temp数据同步至my-index
- 与步骤2类似