Elasticsearch Index按日期切割并使用ILM Rollover

一、背景

项目中一个大约33G的单个索引,出现搜索缓慢的问题,需要先切割,后优化搜索;本次先处理切割问题,使用ILM按模板生成滚动索引

二、基本步骤

1. 通过Java程序启动切割

1.1 按日期生成index
  • 生成 date math 类型,index 名称,方便rollover 时 按index provider_name 向后滚动index 名称
  • 格式如:下
    • /<index-prefix-{now/d-1d{8yyyy-MM-dd}}-000001>:index-prefix-2021-12-02-000001
    • /<index-prefix-{now/d-2d{8yyyy-MM-dd}}-1>:index-prefix-2021-12-01-000001
1.2 通过Reindex 迁移数据
POST _reindex
{
  "source": {
    "index": "source-index",
    "type": "_doc",
    "query": {
      "bool": {
        "filter":{"range":{"startTime":{"gte":日期开始时间,"lte":日期结束时间}}}
      }
    }
  },
  "dest": {
    "index": "index-prefix-2021-12-02-000001"
  }
}

2. 备份源索引(可选)

2.1 Reindex方式
  • 创建新索引
  • 使用Redinx API 将所有数据备份到新索引

3. 删除源索引

DELETE /source_index_name

4. 新索引设置别名

该步骤主要用于,使用原来的查询方式查询index ,不用修改相关逻辑
其中最新一个日期索引,需要设置is_write_index:true

POST _aliases

POST _aliases

{
  "actions": [
    {
      "add": {
        "index": "index-prefix-2012-11-23-000001",
        "alias": "index-alias",
        "is_write_index":false
      }
    },
    {
      "add": {
        "index": "index-prefix-2012-11-24-000001",
        "alias": "index-alias",
        "is_write_index":false
      }
    },
    {
      "add": {
        "index": "index-prefix-2012-11-25-000001",
        "alias": "index-alias",
        "is_write_index":false
      }
    },
    {
      "add": {
        "index": "index-prefix-2012-11-26-000001",
        "alias": "index-alias",
        "is_write_index":true
      }
    }
  ]
}

5. 添加ILM策略

5.1 添加策略

该策略不是100%严格,ES6.8通过后台定时任务触发,数据上会有偏差,定时任务10分钟,未查到相关配置

PUT _ilm/policy/index_policy
{
  "policy" : {
      "phases" : {
        "hot" : {
          "actions" : {
            "rollover" : {
              "max_size" : "10gb",  #单个索引超过10GB开始分片
              "max_age" : "1d"   #单个索引保留数据时间超过1天开始分片
              "max_docs":100000  #单个索引条数超过100000开始分片
            }
          }
        }
      }
    }
}
5.2. 最近日期索引应用policy
PUT index-prefix-2012-11-26-000001
{
  "settings": {
    "index.lifecycle.name": "index_policy",
    "index.lifecycle.rollover_alias": "index-alias"
  }
}
5.3 template添加lifecycle管理
  • 如果有源模板,则获取源模板配置
  • GET _template/index_template
  • 模板配置中增加ILM的相关设置,lifecyle.name,lifecycle.rollover_alias
PUT _template/bizseer-forest-forest_event

{
  "index_patterns": [
    "index_prefix*"
  ],
  "settings": {
    "index": {
      "number_of_shards": "3",
      "number_of_replicas": "1",
      "lifecycle.name": "index_policy",
      "lifecycle.rollover_alias": "index-alias"
    }
  },
  "mappings": {
    "_doc": {
      "dynamic": false,
      "properties": {
        "starTime": {
          "type": "long"
        },
        ......
       }
    }
  }

6 policy执行情况

执行过程中可通过一下方式查看策略执行的情况

GET index-prefix-2021-*/_ilm/explain

可以重新执行失败的策略

POST index-prefix-2021-11-26-000001/_ilm/retry

7 策略定时周期修改

PUT _cluster/settings
{
    "transient": {
      "indices.lifecycle.poll_interval": "10s"
    }

注意事项

模板不能设置policy中相同的Rollover alias,否则Rollover失败

切割后最新index,需要设置"is_write_index":true,否则滚动失败

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值