ElasticSearchSRE磐石Base

ES索引生命周期管理

2019-09-18  本文已影响0人  康小为6840

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
上一篇下一篇

猜你喜欢

热点阅读