Rollover详解

Rollover详解Rollover滚动过渡。可以通过配置索引的时间段、文档数量、索引大小满足条件则自动过渡到新索引。当rollover触发时,将通过目标索引的命名规则生成新的索引。作用:比如有些索引数据只需要保存前几个月的数据,之前的可以删除或者压缩做为冷索引,不再更新索引,很少查询。信息仍然需要可搜索。ES定

大家好,欢迎来到IT知识分享网。Rollover详解"

      Rollover 滚动过渡。可以通过配置索引的时间段、文档数量、索引大小满足条件则自动过渡到新索引。当rollover 触发时,将通过目标索引的命名规则生成新的索引。

      作用:比如有些索引数据只需要保存前几个月的数据,之前的可以删除或者压缩做为冷索引,不再更新索引,很少查询。信息仍然需要可搜索。ES定义索引有4个生命周期:

      Hot(一般常用的生命周期,活跃更新与搜索)
      Warm(只读模式,可以搜索)
      Cold(也是可以搜索但是比Warm搜索速度要慢,即将删除)
      Delete(不在需要,删除索引)

      提高存储分配的效率、高效管理时序数据

      使用rollover api 要满足它的索引命名规则,通常以数字结尾

1、创建符合rollover规则的索引
2、新建is_write_index=true的别名
3、通过别名调用rollover api

  rollover api 的请求参数

dry_run:默认false,去检测是否满足rollover 条件,只是检测不会执行rollover操作
wait_for_active_shards:默认1,执行rollover操作之前至少有多少个acive shard, 可看:active shard
master_timeout:默认:30s,连接master节点的超时时间
timeout:默认:30s,请求的超时时间

   请求体参数:

aliases:别名对象
conditions: 这个就是rollover的条件,是个json对象,有3个属性:max_age(这个就是时间段的参数)、max_docs(这个是文档数)、max_size(索引大小)
mappings:和创建索引一样
settings:和创建索引一样

       一般来说,rollover 都配合索引模板(template)使用,因为rollover 一般索引的字段类型都一样。在调用rollover api的时候,就不需要带mappingsettings信息了

PUT /_index_template/test_template
{
    "index_patterns" : ["test*","topic*"],
    "template":{
        "settings": {
            "number_of_shards": 1,
            "number_of_replicas": 1
        },
        "mappings": {
            "properties": {
                "update_time": {
                    "type": "date",
                    "format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd'T'HH:mm:ss.SSS || yyyy-MM-dd || epoch_millis"
                },
                "create_time": {
                    "type": "date",
                    "format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd'T'HH:mm:ss.SSS || yyyy-MM-dd || epoch_millis"
                },
                "user_id": {
                    "type": "long"
                },
                "is_del": {
                    "type": "boolean"
                },
                "location": {
                    "type": "geo_point",
                    "ignore_malformed": "true"
                },
                "id": {
                    "type": "keyword"
                },
                "title": {
                    "type": "keyword"
                },
                "content": {
                    "term_vector": "with_positions_offsets",
                    "search_analyzer": "ik_smart",
                    "type": "text",
                    "analyzer": "ik_max_word"
                },
                "status": {
                    "type": "short"
                }
            }
        }
    },
    "priority": 200
}

  满足在索引名称最后面以数字结尾,比如可以是yourIndexName-1yourIndexName-001yourIndexName-000001之类的,后面触发rollover之后会在后面的数字基础上+1操作,长度为6,不够6位都用零填充。

PUT /test-01

 创建索引别名

POST /_aliases
{
  "actions": [
        {
            "add": {
                "index": "test-01",
                "alias": "test",
                "is_write_index": true
            }
        }
    ]
}

        is_write_index 的意思是使别名具有写索引,别名一次只能有一个写索引

rollover过渡索引

PUT /test-01/_doc/1
{
  "content":"小明",
  "id":"123",
  "create_time":"2022-08-09 01:00:00",
  "is_del":false,
  "status":1,
  "title":"jim",
  "update_time":"2022-08-09 01:00:01",
  "user_id":2
}

       存入几条数据,然后可以使用 dry_run参数检测是否满足rollover条件

POST /test/_rollover?dry_run=true
{
  "conditions": {
    "max_age": "1d",
    "max_docs": 1,
    "max_size": "5gb"
  }
}

------响应-----
{
  "acknowledged" : false,
  "shards_acknowledged" : false,
  "old_index" : "test-01",
  "new_index" : "test-000002",
  "rolled_over" : false,
  "dry_run" : true,
  "conditions" : {
    "[max_age: 1d]" : false,
    "[max_docs: 1]" : false,
    "[max_size: 5gb]" : false
  }
}

      文档数满足了,返回true。之后真正请求rollover

POST /test/_rollover
{
  "conditions": {
    "max_age": "1d",
    "max_docs": 3,
    "max_size": "5gb"
  }
}

返回
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "old_index" : "test-01",
  "new_index" : "test-000002",
  "rolled_over" : true,
  "dry_run" : false,
  "conditions" : {
    "[max_age: 1d]" : false,
    "[max_docs: 3]" : true,
    "[max_size: 5gb]" : false
  }
}

  之后生成新的索引:test-000002,当Rollover 成功的时候,使用别名进行插入数据的时候,就是新索引进行写入了。这样就起到数据过渡到新索引的作用了。因为多个索引使用同一个别名所以查询的时候还是可以查询到之前索引的数据,当之前索引的数据不需要,就可以删除了。

  

         

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33537.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信