提示:对于一些日志类的数据,我们常用到es作为存储,数据量过大时,可能会用到索引切分,这里可以参考
在生产项目中,由于ElasticSearch单个索引数据量大,索引中部分数据不常用,在搜索和写入文档时,效率较低。为了减小单个索引的数据量,提升搜索和文档写入效率,将大索引根据一定的规则拆分为小的索引。
直接上干货,不多bb(记得点赞,收藏,是我最大的动力)
PUT _ilm/policy/das_v5_policy
{
"policy":{
"phases": {
"hot": {
"actions": {
"set_priority": {
"priority": 100
},
"rollover": {
"max_age": "1d",
"max_docs": 1,
"max_size": "5gb"
}
}
}
}
}
}
GET _ilm/policy
PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"3s"
}
}
说明:创建索引模板,具体的_mapping根据审计日志确定
das_v5_policy 为指定 策略名称
das_v5_index 滚动触发的别名
PUT _template/das_v5_template
{
"index_patterns":["das_v5_*"],
"settings":{
"number_of_shards":2,
"number_of_replicas":0,
"index.lifecycle.name":"das_v5_policy",
"index.lifecycle.rollover_alias":"das_v5_index "
},
"mappings": {
"properties": {
"name":{
"type":"keyword"
},
"age":{
"type":"long"
}
}
}
}
说明:创建索引,指定别名,允许索引写入数据
PUT das_v5_20210121-000001
{
"aliases": {
"das_v5_index": {
"is_write_index":true
}
}
}
说明:每次put数据,会产生一个新的索引
POST das_v5_index/_doc
{
"name":"yxd",
"age":17
}
第一次put数据
策略配置3秒检测一次,所以3秒后再次put结果:
索引自动滚动,验证成功,由 03 变成 04
仔细研究,发现存在一个问题
① 创建日期模板 YYYYMM 日期替换
PUT _template/das_v5_template_YYYYMM
{
"index_patterns":["das_v5_YYYYMM*"],
"settings":{
"number_of_shards":2,
"number_of_replicas":0,
"index.lifecycle.name":"das_v5_policy",
"index.lifecycle.rollover_alias":"das_v5_index_YYYYMM"
},
"mappings": {
"properties": {
"name":{
"type":"keyword"
},
"age":{
"type":"long"
}
}
}
}
② 创建该日期符合索引模板的索引,并配置日期格式别名
PUT das_v5_YYYYMM-000001
{
"aliases": {
"das_v5_index_YYYYMM": {
"is_write_index":true
}
}
}
③ 使用别名插入当天数据
POST das_v5_index_YYYYMM/_doc
{
"name":"yxd",
"age":17
}
④ 如果索引模板多了,可删除N天之前的模板
DELETE _Template/ das_v5_index_YYYYMM
备注:重复put索引,产生异常,可能导致策略无法维护索引,集群部署状态下,可能要考虑相关问题
该方案为:
创建一个独立公用的索引模板
使用日期滚动创建索引,并使用别名(一次可创建多个索引/别名,未来几天的)
实现:可通过定时任务,每天凌晨执行,创建未来几天要用到的索引
代码每次提交写入es数据之后, Rollover 检测滚动一次
代码如下(示例):
说明:定时任务,执行创建日期-索引并使用日期别名,查询也可使用日期别名
说明:程序插入数据,只需要使用日期别名,插入数据到es即可,历史数据使用历史当天日期的别名插入
第一种:
每次数据插入提交之后,可代码手动rollover一次
第二种:
定时任务管理rollover,查询最近几天的索引,定时检测切分,可每10分钟一次(一二种,可同时用)
推荐使用方案二:
优点: