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 来控制删除数据的时间窗口。
相关推荐
AORO202527 分钟前
遨游科普:三防平板是指哪三防?有哪些应用场景?
大数据·网络·5g·智能手机·电脑·信息与通信
橙色云-智橙协同研发1 小时前
【PLM实施专家宝典】离散制造企业ECO管理优化方案:构建自动化、零错误的变更引擎
大数据·云原生·解决方案·数字化转型·plm·eco·云plm
星光一影1 小时前
基于SpringBoot智慧社区系统/乡村振兴系统/大数据与人工智能平台
大数据·spring boot·后端·mysql·elasticsearch·vue
e6zzseo4 小时前
独立站的优势和劣势和运营技巧
大数据·人工智能
chevysky.cn7 小时前
Jenkins自动部署CI/CD
运维·ci/cd·jenkins
wudl55668 小时前
flink 1.20 物化表(Materialized Tables)
大数据·flink·linq
InfiSight智睿视界9 小时前
AI 技术助力汽车美容行业实现精细化运营管理
大数据·人工智能
8K超高清11 小时前
高校巡展:中国传媒大学+河北传媒学院
大数据·运维·网络·人工智能·传媒
amhjdx11 小时前
政策东风下:卓玛儿童级健康腻子引领行业升级
大数据
TDengine (老段)11 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据