冷热分离(公测中)

云原生多模数据库 Lindorm搜索引擎支持配置索引冷热属性,实现不同索引数据存储在不同存储介质上,结合时间分区使用实现数据按照时间冷热分离。新写入的数据随着时间推移,其查询频率可能越来越低,将低频查询数据从性能更好的存储(热存)转移至性能更差而成本更低的存储(下面统称为冷存),可以有效提高热存的存储利用率,优化存储成本。使用时间分区索引时,您可根据业务需求设置冷热分界线,指定某段时间以前的数据为低频查询数据,需要从热存转入冷存,系统将自动为您将低频查询数据转入冷存。

前提条件

  • 版本要求

    • 搜索引擎为3.9.30.2及以上版本,如何升级当前版本,请参见升级小版本

    • 底层存储为4.5.17.2及以上版本。

      • Lindorm实例(服务类型Lindorm):可在控制台配置信息中查看/升级底层存储的版本,如何升级当前版本,请参见升级小版本

      • Lindorm新版实例(服务类型Lindorm_V2):请联系Lindorm技术支持(钉钉号:s0s3eg3)获取当前版本号或升级版本。

      • 如何查看服务类型,请参见产品系列

  • 存储配置

    • 实例具有两种或两种以上不同类型的存储。

    • 若冷存选择容量型存储,需先开通容量型云存储

注意事项

  • 自动冷热分离能力仅支持基于时间分区索引实现:基于时间字段判断分区是否转冷,自动将其标记为冷索引,并迁移数据至冷存储。

  • 不同存储类型的限制,请参见下文对存储组合的说明。

存储组合说明

目前搜索引擎的冷热分离主要支持两种存储组合模式,分别对应两种不同的业务场景。在使用冷热分离能力前,请先根据业务场景进行评估,选择合适的存储组合。

组合模式

热存储介质

冷存储介质

读写支持

扩容方式

容量型云存储+热存储

标准型云存储、性能型云存储、本地SSD

容量型云存储

  • 已归档至容量型云存储的数据不支持读写操作。

  • 热存储可以用来存储高频读写的数据。

云存储按需扩容。

本地SSD盘+云存储

本地SSD

云存储

冷热数据均支持写入和查询。

  • 本地SSD盘:只能通过增加节点来扩容。

  • 云存储:支持通过增加单节点挂载的云盘存储量来扩容。

自动冷热分离(时间分区索引)

创建时间分区索引

以下示例从当前时间30天前起,每隔7天创建一个子索引(后续统称为分区索引)。数据根据createTime字段值归属对应分区索引。

PUT _index_template/cold-hot-test
{
  "index_patterns": "cold-hot-test",
  "data_stream": {
    "timestamp_field": {
      "name": "createTime"
    }
  },
  "template": {
    "settings": {
      "number_of_shards": 4,
      "index.mode": "time_partition",
      "index.partition.start": "30d",
      "index.partition.interval": "7d"
    }
  }
}

PUT _data_stream/cold-hot-test

设置冷热分界线

您可以根据数据量和查询时间段来设置冷热分界线,将指定时间范围的数据归档至冷存储中。在搜索引擎中,如果某个时间分区满足当前时间 - 时间分区的最后时间 >= 冷热分界线,则该时间分区的所有数据将被视为冷数据。

说明

冷热分界线的设置单位为秒(s)。

PUT /_data_stream/cold-hot-test/_settings 
{
  "index.partition.chs": "604800"
}

以上示例中,设置cold-hot-test时间分区的冷热分界线为7天(604800秒),当时间分区的分区索引存储的最新数据距离当前时间超过7天时,该分区索引将被自动转入冷存储。

您可通过以下命令,查看返回结果中的index_partition_range配置信息,确认该分区索引存储的数据对应的时间范围。

GET /<backIndexName>

<backIndexName>以 .ds 开头,例如.ds-cold-hot-test-2025.09.13-000111就是cold-hot-test时间分区的一个分区索引。

当冷存储选用容量型云存储时,分区索引启动转冷流程后将被禁写,即时间范围命中了冷存时间范围的写入请求会抛出异常,提示目标写入索引已经禁写。若分区索引转冷后,业务侧允许后续在该分区对应时间范围内的写入数据被忽略(例如写设置冷热分界线为1年,但写入了1年以前的日志数据),可以配置如下属性:

PUT /_data_stream/cold-hot-test/_settings 
{
  "index.partition.skip_write_cold": "true"
}

配置冷热存储介质定义

若实例的存储组合非容量型+热存储模式,或需调整冷热分界线并让冷数据自动回热时,则需配置如下属性:

说明

若您在下表中没找到您的实例存储类型对应的STORAGE_POLICY,请联系Lindorm技术支持(钉钉号:s0s3eg3)获取。

PUT /_data_stream/cold-hot-test/_settings 
{
  "index.partition.storage_policy": "{COLD_STORAGE}|{HOT_STORAGE}"
}

通过索引属性管理索引数据的存储介质

Lindorm搜索引擎支持通过Elasticsearch API变更索引属性(settings)来指定索引数据的存储,对应的配置项为 index.storage_policy,不同存储介质对应的取值如下:

存储介质(index.storage_policy

取值(STORAGE_POLICY

标准型云存储

STANDARD_CLOUD_STORAGE

性能型云存储

PERFORMANCE_CLOUD_STORAGE

容量型云存储

CAPACITY_CLOUD_STORAGE

本地SSD

LOCAL_SSD_STORAGE

说明

若上表未包含您购买的存储介质类型,请联系Lindorm技术支持(钉钉号:s0s3eg3)获取。

索引的存储类型支持创建时指定或创建后修改。若在索引创建后变更存储类型,服务端会异步迁移该索引的存量数据到指定存储上,后续新写入的数据则会直接存储在指定类型存储上。

# 创建索引时指定存储介质类型
PUT <indexName>
{
  "settings": {
    "index": {
      "number_of_shards": ...,
      "storage_policy": "{STORAGE_POLICY}"
    }
  }
}

# 如果需要设置索引存储介质类型为容量型云存储,需要先执行forcemerge
POST <indexName>/_forcemerge?max_num_segments=1

# 索引创建后更新存储介质类型
PUT <indexName>/_settings
{
  "index.storage_policy": "{STORAGE_POLICY}"
}
重要

如果您需要将索引存储介质类型设置为容量型云存储,需要先执行forcemerge操作,保证每个分片1segment。

如何判断索引已经转冷/热

您可通过控制台查看不同存储介质的存储占用变化来判断对应存储介质中是否已有数据。

image