Elasticsearch数据冷热分离

1. 节点属性配置

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

yaml 复制代码
# 热节点(性能较高的节点)
node.attr.data_tier: hot

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

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

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

创建一个生命周期策略:

json 复制代码
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 策略
json 复制代码
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 来控制删除数据的时间窗口。
相关推荐
咕噜签名-铁蛋3 分钟前
大模型Token Plan详解:选型、优化与成本控制全攻略
大数据·运维·人工智能
互联网科技看点11 分钟前
诸葛智能入选IDC最新报告:以营销智能体驱动金融增长
大数据·人工智能·金融
tian_jiangnan13 分钟前
flink mysql集群增删改查
大数据·mysql·flink
xcbrand14 分钟前
工业制造品牌全案公司找哪家
大数据·人工智能·python·制造
Guheyunyi17 分钟前
无人机巡检系统,高效精准守护全场景安全
大数据·人工智能·科技·安全·架构·无人机
蓝耘智算22 分钟前
Token经济学:读懂AI时代的“新石油”
大数据·人工智能·ai·token·蓝耘
HoneyMoose31 分钟前
Jenkins 构建 VUE 前端提示 pnpm 错误
前端·vue.js·jenkins
上海达策TECHSONIC32 分钟前
汽车零配件 SAP 转型数字化标杆 上海达策实施 SAP Business One 赋能汽车底盘转向领域
大数据·运维·人工智能·汽车·运维开发·制造
Thomas214335 分钟前
pyspark 新接口 DataSource V2 写法 写入paimon为例
大数据·分布式·spark
武子康37 分钟前
大数据-268 实时数仓-ODS 层 Flink+Kafka+HBase实时流处理:Kafka数据写入维度表实战
大数据·后端·flink