当前位置: 首页 > article >正文

Elasticsearch数据冷热分离

1. 节点属性配置

在 Elasticsearch 的每个节点的配置文件(elasticsearch.yml)中,为节点分配自定义属性:

# 热节点(性能较高的节点)
node.attr.data_tier: hot

# 温节点(性能适中的节点)
node.attr.data_tier: warm

# 冷节点(性能较低的节点,用于索引归档)
node.attr.data_tier: cold
2. 配置 ILM

ILM 可以自动管理数据的生命周期,包括将索引从热节点迁移到温节点、冷节点,或最终删除。

创建一个生命周期策略:

PUT _ilm/policy/log_data_policy

{
  "policy": {
    "description": "Hot-Warm-Cold ILM",
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_age": "1d",
            "max_size": "50gb"
          }
        }
      },
      "warm": {
        "min_age": "1d",
        "actions": {
          "allocate": {
            "require": {
              "data_tier": "warm"
            }
          },
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "cold": {
        "min_age": "7d",
        "actions": {
          "allocate": {
            "require": {
              "data_tier": "cold"
            }
          },
          "forcemerge": {
            "max_num_segments": 1
          },
          "freeze": {}
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

这个策略分为四个阶段:

  1. 热(hot)阶段:索引会在热节点上存储,支持高频访问。
  2. 温(warm)阶段:1 天后,索引被迁移到温节点,减少资源消耗。
  3. 冷(cold)阶段:7 天后,迁移到冷节点,冻结索引,仅用于低频访问。
  4. 删除(delete)阶段:30 天后,删除索引以释放存储空间。
3.创建索引模板并绑定 ILM 策略
PUT _template/log_template
{
  "index_patterns": [
    "*-log-data-*"
  ],
  "order": 0,
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.routing.allocation.require.data_tier": "hot",
    "index.lifecycle.name": "log_data_policy",
    "index.lifecycle.rollover_alias": "log_alias"
  },
  "aliases": {
    "app_log": {}
  },
  "mappings": {
    "dynamic": false,  
    "properties": {
      "@timestamp": {
        "type": "date"
      },
      "application": {
        "type": "keyword",
        "ignore_above": 30
      },
      "class": {
        "type": "keyword",
        "index": false,
        "ignore_above": 256
      },
      "client_ip": {
        "type": "ip"
      },
      "original_ip": {
        "type": "ip"
      },
      "level": {
        "type": "keyword",
        "ignore_above": 10
      },
      "message": {
        "type": "text",
        "analyzer": "standard"
      },
      "response_time": {
        "type": "integer",
        "index": false
      },
      "servlet_path": {
        "type": "keyword",
        "ignore_above": 50
      },
      "status": {
        "type": "integer"
      },
      "thread": {
        "type": "keyword",
        "index": false,
        "ignore_above": 30
      },
      "logtime": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    }
  }
}
配置解释:

热阶段(hot phase)

  • min_age: "0ms" 表示索引刚创建时就进入热阶段,存储当天的数据。
  • rollover 操作:当索引达到 max_age: "1d" 或者 max_size: "50gb" 时,会触发索引的滚动,创建新的索引并继续写入数据。max_age: "1d" 确保热节点只存储当天的索引。

温阶段(warm phase)

  • min_age: "1d" 表示数据在热阶段存储 1 天后转到温阶段,存储1天外至7天内的数据。
  • allocate 操作:将索引迁移到标记为 warm 的节点上,可以在温节点上做段合并(forcemerge),提高查询效率。

冷阶段(cold phase)

  • min_age: "7d" 表示数据在7天后进入冷阶段,存储7天外至30天内的数据。
  • allocate 操作:将索引迁移到标记为 cold 的节点上。
  • freeze 操作:将冷数据冻结,这会显著减少存储需求,但会降低查询性能,因为冻结后的索引不能被写入,只能读取。

删除阶段(delete phase)

  • min_age: "30d" 表示在数据存储超过30天后将其删除,防止过期数据占用过多存储空间。

freeze 操作

  • 在冷阶段使用 freeze 操作将索引冻结。冻结索引在读取时更节省空间,但不能进行写入或更新操作。适用于存储不再活跃、且访问频率低的历史数据。

forcemerge 操作

  • 在温节点和冷节点阶段进行段合并,减少索引中的段数量,从而提高查询效率和减少存储空间占用。确保该操作只应用于只读索引。

delete 操作

  • 设置为30天后删除数据,防止数据积累过多。可以调整 min_age 来控制删除数据的时间窗口。

http://www.kler.cn/a/417899.html

相关文章:

  • LeetCode-315. Count of Smaller Numbers After Self
  • Java 解析离线 MySQL binlog 文件
  • Rust vs Java:后端开发应该选哪个?
  • springboot366高校物品捐赠管理系统(论文+源码)_kaic
  • 【Android】组件化嘻嘻嘻gradle耶耶耶
  • 基于树莓派的安保巡逻机器人--项目介绍
  • IDEA全局设置-解决maven加载过慢的问题
  • 【经典】星空主题的注册界面HTML,CSS,JS
  • Java全栈开发:旅游网站设计与实现
  • C++类中多线程的编码方式
  • Java代码操作Zookeeper(使用 Apache Curator 库)
  • HarmonyOS4+NEXT星河版入门与项目实战(24)------Stage模型
  • Flink CDC 使用实践以及遇到的问题
  • 基于VUE3集成天地图
  • 【Golang TCP应用】
  • 指针与引用错题汇总
  • upload-labs 靶场(11~21)
  • 网络安全之访问控制
  • 你的网站真的安全吗?如何防止网站被攻击?
  • 【AI】JetsonNano启动时报错:soctherm OC ALARM
  • 【ETCD】etcd中配置参数详解
  • 高级java每日一道面试题-2024年11月29日-JVM篇-常见调优工具有哪些?
  • org.apache.commons.lang3包下的StringUtils工具类的使用
  • Maven 内置绑定到底怎么回事?
  • QT 实现QStackedWidget切换页面开门动画
  • Linux如何安装git