ES索引生命周期管理

作者: 康小为6840 | 来源:发表于2019-09-18 18:51 被阅读0次

    1.什么是索引周期管理

    定义:以时间为导向对数据进行应用策略操作。
    索引管理流程:热数据->暖数据->冷数据->数据归档->数据删除
    索引策略动作:优先级、重索引、分片分配、只读、合并、收缩、冻结、删除

    2.如何做索引生命周期管理

    2.1设计策略

    针对索引根据时间、空间、类型、优先级进行不同种类的管理策略。

    示例:
    a. 我需要将tdx_索引自动关闭30天前的数据,自动删除180天前的数据;
    b. 我需要将jty_
    索引每达到100g新生成一个新的二级索引;
    c. 我需要将ths_和jty_索引在进行段合并时,第一优先顺序为ths索引,第二优先顺序为jty索引;

    2.2设计动作

    针对索引根据不同策略,进行相关的规则设计以及阶段设计

    示例:
    针对tdx_索引,我需要先合并,再收缩,再关闭,再删除;
    针对jty_
    索引,我需要增加副本,再关闭,再删除

    2.3执行动作

    针对每个动作,编写索引的实际操作脚本
    合并:

    ##################### ForceMerge###################################
    actions:
      1:
      action: forcemerge
      description: >- #默认合并2天之前的ES集群监控索引
      options:
        max_num_segments: 1
        delay: 0
        timeout_override:
        continue_if_exception: True
        disable_action: False
    
      filters:
        -filtertype: pattern
        kind: regex
        value: '^(\.monitoring-(es|kibana|beats|logstash)-6-).*$'
        exclude:
    
        -filtertype: age
        source: creation_date
        direction: older
        unit: days
        unit_count: 1
    
        -filtertype: forcemerged
        max_num_segments: 1
    

    关闭:

    [####################Close ###################################]
    actions:
      1:
        action: close
        description: >-
          #默认close7天之前的ES集群监控watch索引
        options:
          ignore_empty_list: True
          continue_if_exception: True
          disable_action: False
    
        filters:
        - filtertype: pattern
          kind: prefix
          value: .watcher-history-9-
          exclude:
    
        - filtertype: age
          source: creation_date
          direction: older
          unit: days
          unit_count: 7
    

    2.4完成策略

    针对每个策略,调用系统定时任务进行循环操作

    3.用什么来做索引管理

    ES7.0版本提供ILM策略进行es-stack的组件生命周期管理功能;
    ES6.x及以下版本使用elasticsearch-curator进行索引策略动作;
    使用ILM策略优先级比使用curator优先级更高,为了避免冲突,使用ILM进行索引管理后尽量避免使用curator再次进行管理;

    3.1Index lifecycle management

    通过将生命周期策略附加到用于创建索引模板的索引模板来控制索引在老化时的处理方式。您可以更新策略以修改新索引和现有索引的生命周期。

    对于时间序列索引,索引生命周期中有四个阶段:
    •热- 索引正在积极更新和查询。
    •暖- 索引不再更新,但仍需要查询。
    •冷- 索引不再被更新,且很少被查询。数据仍然需要搜索,但如果这些查询速度较慢也没关系。
    •删除- 不再需要索引,可以安全删除。

    生命周期策略控制索引如何在这些阶段中转换以及在每个阶段对索引执行的操作。该政策可以指定:
    •要转移到新索引的最大空间或时间。
    •索引不再更新和主分片的数量可以减少。
    •强制合并以永久删除标记为删除的文档。
    •索引可以移动到性能较低的硬件。
    •可用性不那么重要的索引和副本的数量可以减少。
    •索引需要进行安全删除。

    例如,如果要将一组ATM中的度量标准数据编入索引到Elasticsearch,则可以定义一个策略:
    1.当索引达到50GB时,转到新索引。
    2.将旧索引移动到暖数据阶段,将其标记为只读,并将其合并缩小为单个分片单个数据段。
    3.7天后,将索引移至冷数据阶段并将其移至较便宜的硬件。
    4.达到所需的30天保留期后,删除索引。

    3.2Elasticsearch-curator

    Curator安装

    Centos7
    wget https://packages.elastic.co/curator/5/centos/7/Packages/elasticsearch-curator-5.7.6-1.x86_64.rpm

    Centos6
    wget https://packages.elastic.co/curator/5/centos/6/Packages/elasticsearch-curator-5.7.6-1.x86_64.rpm

    rpm -ivh elasticsearch-curator*.rpm

    软件安装完毕后,得到安装目录:/opt/elasticsearch-curator
    安装完毕后,需要新建一个主配置文件curator.yml:

    ################ Curator #########
    client:
    hosts:
        -rjjd-node01.xx.com
        -rjjd-node02.xx.com
        -rjjd-node03.xx.com
    port: 9200
    url_prefix:
    use_ssl: False
    timeout: 60
    master_only:
    logging:
    loglevel: INFO
    logfile: /var/log/curator.log
    logformat: json
    blacklist: ['elasticsearch', 'urllib3']
    

    Curator策略编写

    官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/actions.html

    目前支持的策略动作有:
    Alias(重新别名)
    Allocation(分配分片)
    Close(关闭索引)
    Cluster Routing(集群路由)
    Create Index(创建索引)
    Delete Indices(删除索引)
    Delete Snapshots(删除快照)
    Forcemerge(段合并)
    Index Settings(索引设置)
    Open(打开索引)
    Reindex(重新索引)
    Replicas(副本分配)
    Restore(重新存储)
    Rollover(滚动索引)
    Shrink(收缩索引)
    Snapshot(索引快照)

    单个策略有以下几部分组成:
    a.动作名称,例如close,open,shrink,
    官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/actions.html

    b.动作参数,例如忽略空索引,第一个执行错误继续执行后面的动作,
    官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/options.html

    c.过滤器,例如按照时间,按照空间,按照分片等维度类型来过滤,
    官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/filters.html

    d.过滤参数,例如设置时间大小,空间大小,索引状态模式进行过滤器的增强参数,
    官方链接:
    https://www.elastic.co/guide/en/elasticsearch/client/curator/current/filter_elements.html

    示例:关闭索引策略

    #################### Close  ###################################
    actions:
      1:
      action: close            #动作类型
      description: ‘默认close7天之前的ES集群监控watch索引’  #动作描述
      options:
        ignore_empty_list: True      #忽略空索引
        continue_if_exception: True  #发生错误后继续执行
        disable_action: False        #启用动作
    
      filters:                   
        -filtertype: pattern            #过滤类型1
        kind: prefix            #类型模式使用前缀
        value: .watcher-history-9-      #前缀名称
        exclude:                      #是否排除
        -filtertype: age                #过滤类型2,按照时间
        source: creation_date        #时间选择参数,按照索引生成时间
        direction: older              #时间模式
        unit: days                  #时间单位
        unit_count: 7                #时间具体值
    
    2:
      action: close            #动作类型
      description:  ‘默认关闭30天前的大于100g的通达信索引’  #动作描述
      options:
        ignore_empty_list: True      #忽略空索引
        continue_if_exception: True  #发生错误后继续执行
        disable_action: False        #启用动作
      filters:                   
        -filtertype: pattern            #过滤类型1
        kind: prefix            #类型模式使用前缀
        value:‘tdx_’            #前缀名称
        exclude:                      #是否排除
        -filtertype: age                #过滤类型2,按照时间
        source: creation_date        #时间选择参数,按照索引生成时间
        direction: older              #时间模式
        unit: days                  #时间单位
        unit_count: 30                #时间具体值
        - filtertype: space            #过滤类型3
        disk_space: 100            #类型大小
          threshold_behavior: less_than  #判断条件,大于或者小于
          reverse: True                #是否反向判断
    

    Curator启动

    命令启动:
    curator –config curator.ymlconfig/close.yml &
    配置定时任务:
    Crontab -e

    0 22 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/close.yml
    0 2 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/forcemerge.yml

    4.实际使用示例

    请编写一个索引管理策略文件和定时任务,需求:

    1.针对通达信索引tdx_*(按月生成),每天凌晨2点开始进行段合并,每个分片合并成3个段;

    actions:
      1:
        action: forcemerge
        description: “针对通达信索引tdx_*(按月生成),每天凌晨2点开始进行段合并,每个分片合并成3个段”
        options:
          max_num_segments: 3
          continue_if_exception: True
          disable_action: False
        filters:
        - filtertype: pattern
            kind: prefix
            value: tdx_
            timestring:"%Y.%m"
        - filtertype: age
            source: creation_date
            direction: older
            unit: months
            unit_count: 1
        - filtertype: forcemerged
            max_num_segments: 3
    
    #定时任务          
    0 2 * * * /usr/bin/curator –config  /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/tdxmerger.yml
    

    2.针对金太阳索引jty_(按小时生成),每天凌晨3点开始进行关闭,关闭40天前的索引,且保留大于50gb的索引,同时排除掉jty_app索引;

    actions:
      1:
        action: close            
        description:  “针对金太阳索引jty_*(按小时生成),每天凌晨3点开始进行关闭,关闭40天前的索引,且保留大于50gb的索引,同时排除掉jty_app*索引”
        options:
          ignore_empty_list: True      
          continue_if_exception: True   
          disable_action: False        
        filters:                      
        - filtertype: pattern            
            kind: prefix                 
            value: jty_                  
            timestring:"%Y.%m.%d.%H"    
            exclude: False
        - filtertype: pattern            
            kind: prefix                 
            value: jty_app                  
            exclude: True                   
        - filtertype: age                
            source: creation_date         
            direction: older              
            unit: hours                  
            unit_count: 40*24               
        - filtertype: space            
            disk_space: 50            
            threshold_behavior: more_than  
            reverse: True                
    
    #定时任务          
    0 3 * * * /usr/bin/curator –config  /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/jtyclose.yml
    

    3.针对君泓索引jh_*(按天生成),每天22点开始进行索引分片合并,将小于1gb的索引的分片数量调整为1个分片;

    actions:
      1:
        action: forcemerge
        description: "针对君泓索引jh_*(按天生成),每天22点开始进行索引分片合并,将小于1gb的索引的分片数量调整为1个分片"
        options:
          max_num_segments: 1
          continue_if_exception: True
          disable_action: False
        filters:
        - filtertype: pattern
            kind: prefix
            value: jh_
            timestring:"%Y.%m.%d"
        - filtertype: age
            source: creation_date
            direction: older
            unit: days
            unit_count: 1
        - filtertype: space
            disk_space: 1
            threshold_behavir: less_than
        - filtertype: forcemerged
            max_num_segments: 1
    
    #定时任务          
    0 22 * * * /usr/bin/curator –config  /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/jhmerger.yml
    

    4.针对tomcat索引tomcat_*(按小时生成),每天21点开始自动创建未来1天的索引;

    actions:
      1:
        action: create_index
        description: "针对tomcat索引tomcat_*(按小时生成),每天21点开始自动创建未来1天的索引"
        options:
          name: '<tomcat_{now/H+1d}>'
          extra_settings:
            settings:
              number_of_shards: 24
              number_of_replicas: 0
          disable_action: False
          continue_if_exception: True
          ignore_empty_list: True
        - filtertype: period
          period_type: relative
          source: name
          range_from: -1
          range_to: -1
          timestring: '%Y.%m.%d.%H'
          unit: hours
          
    #定时任务          
    0 21 * * * /usr/bin/curator –config  /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/tomcatcreate.yml
    

    5.针对nginx索引(nginx_jty_,nginx_jty48_,nginx_jty48_log_),代表每天自动生成时间戳,需要使用一个action动作完成以上3种索引的关闭动作,自动关闭10天前的以上索引;

    actions:
      1:
        action: close             
        description:  “针对nginx索引(nginx_jty_*,nginx_jty48_*,nginx_jty48_log_*),*代表每天自动生成时间戳,需要使用一个action动作完成以上3种索引的关闭动作,自动关闭10天前的以上索引”   
        options:
          ignore_empty_list: True      
          continue_if_exception: True   
          disable_action: False        
        filters:                      
        - filtertype: pattern            
            kind: prefix                 
            value: nginx_jty48_log_               
            timestring:"*"
        - filtertype: pattern            
            kind: prefix                 
            value: nginx_jty48_                
            timestring:"*"
        - filtertype: pattern            
            kind: prefix                 
            value: nginx_jty_                  
            timestring:"*"        
        - filtertype: age                
            source: creation_date         
            direction: older              
            unit: days                   
            unit_count: 10               
    
    #定时任务          
    59 23 * * * /usr/bin/curator –config  /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/nginxclose.yml
    

    相关文章

      网友评论

        本文标题:ES索引生命周期管理

        本文链接:https://www.haomeiwen.com/subject/kpbkuctx.html