zoukankan      html  css  js  c++  java
  • ES7中,冷热分离和索引生命周期的简单实践

    个人学习笔记,谢绝转载!!!

    原文:https://www.cnblogs.com/wshenjin/p/15161861.html


    索引生命周期管理的本质--RollOver

    当现有索引被认为太大或太旧时,滚动索引API将别名滚动到新索引。
    该API接受一个别名和一个条件列表。别名必须只指向一个索引。如果索引满足指定条件,则创建一个新索引,并将别名切换到指向新索引的位置。

    ES索引生命周期管理分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作,warm、cold、delete分别对rollover后的数据进一步处理

    • hot: 主要处理时序数据的实时写入,该阶段可以根据索引的文档数、大小、时长决定是否调用rollover API来滚动索引
    • warm: 可以用来查询,但是不再写入
    • cold: 索引不再有更新操作,并且查询也会很少
    • delete: 数据将被删除

    注意:上述四个阶段不是必须同时存在(除hot阶段,其他为非必须)


    一个简单的需求:将实时写入的索引写入到高性能但容量较小的节点,将不更新的历史索引转移到大容量性能不高的节点,并删除一段时间之前的索引。

    配置两个节点(hot/warn)的ES集群

    在配置文件中给ES节点打标签,用于区分冷热节点:

    node.attr.node_type: hot    //热节点
    node.attr.node_type: warn   //冷节点
    

    效果:

    GET /_cat/nodeattrs?v&h=node,attr,value
    node       attr              value
    es-node-01 node_type         hot
    es-node-02 node_type         warn
    ......
    

    配置索引模板

    创建message-logs-*索引模板,并设置索引落到 hot 节点

    PUT/_template/template_message_logs {
      "index_patterns": ["message-logs-*"],
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 0,
        "routing.allocation.require.node_type": "hot"
      }
    }
    

    配置定时任务

    ## 每天1点将前一天的日志转移到warn节点
    00 01 * * * curl -XPUT -H 'Content-Type: application/json' "http://127.0.0.1:9200/message-logs-$(date +\%Y\%m\%d -d'1 day ago')/_settings?pretty" -d '{"index.routing.allocation.require.node_type": "warn"}' >/dev/null 2>&1
    
    ## 每天2点将7天前的日志删除
    00 02 * * * curl -XDELETE "http://127.0.0.1:9200/message-logs-$(date +\%Y\%m\%d -d'7 day ago')" >/dev/null 2>&1
    

    这样message-logs-yyyymmdd索引就实现了冷热分离。当天的索引写入hot节点,定时任务将前一天的所以转移到warn节点,超过7天的自动删除。

    看看效果:


    使用ilm策略管理索引生命周期

    定义httpd日志的冷热策略

    10min进行rollover,之后1h后的索引进入warm只读阶段,3h后的索引删除

    PUT /_ilm/policy/policy_httpd_logs {
      "policy": {
        "phases": {
            "hot": {
                "actions": {
                    "rollover": {
                        "max_age": "10ms"
                    }
                }
            },
            "warm": {
                "min_age": "1h",
                "actions": {
                    "allocate": {
                        "require": {
                            "node_type": "warm"
                        }
                    },
                    "readonly": {}
                }
            },
            "delete": {
                "min_age": "3h",
                "actions": {
                    "delete": {}
                }
            }
        }
      }
    }
    

    配置索引模板,将策略应用到模板

    PUT /_template/template_httpd_logs {
      "index_patterns": ["httpd-logs-*"],
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 0,
        "index.lifecycle.name": "policy_httpd_logs",           
        "index.lifecycle.rollover_alias": "httpd-logs-alias",  
        "routing.allocation.require.node_type": "hot"          
      }
    }
    
    • index.lifecycle.name, 使用该模版创建的索引统一用“policy_httpd_logs”策略
    • index.lifecycle.rollover_alias, 使用该模版创建的索引统一用“httpd-logs-alias”的别名进行管理
    • index.routing.allocation.require.{attribute}, 使用该模版创建的索引统一分配在hot节点

    手动创建第一个索引,并设置别名

    索引创建的名称应该是以 “-00001”等可自增长的字段结尾,否则策略不生效

    PUT/httpd-logs-000001 {
      "settings" : {
         "number_of_shards":3,
         "number_of_replicas":0
      },
      "aliases": { 
        "httpd-logs-alias" : {
            "is_write_index": true
        }
      }
    }
    

    看看效果:


    学习参考

    https://www.cnblogs.com/runnerjack/p/12758658.html
    https://www.cnblogs.com/mikelaowang/p/13345318.html
    https://www.cnblogs.com/small-k/p/8872423.html
    https://blog.csdn.net/wwd0501/article/details/105118113/
    https://blog.csdn.net/jiao_fuyou/article/details/50511255

  • 相关阅读:
    从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
    Linux命令学习
    Linux企业运维人员最常用150个命令汇总
    理解Docker
    理解Docker(8):Docker 存储之卷(Volume)
    理解Docker(7):Docker 存储
    理解Docker(6):若干企业生产环境中的容器网络方案
    理解Docker(5):Docker 网络
    理解Docker(4):Docker 容器使用 cgroups 限制资源使用
    理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境
  • 原文地址:https://www.cnblogs.com/wshenjin/p/15161861.html
Copyright © 2011-2022 走看看