更新时间:2026-01-28 GMT+08:00

切换OpenSearch集群冷热数据

在OpenSearch集群中,切换冷热数据是一种通过将数据按使用频率分配到不同性能节点的策略,以优化存储成本和查询性能。
  • 热数据:高频访问的实时数据,使用高性能硬件(如SSD)确保快速读写和检索。
  • 冷数据:低频访问的历史数据,使用低成本硬件(如HDD)降低存储成本。

切换冷热数据适用于日志分析、监控数据归档等场景,通过动态分配数据节点,平衡性能与成本。

功能介绍

图1 切换冷热数据原理
切换冷热数据的核心是通过节点标签和索引分配策略实现数据分区:
  • 节点标签:
    • 数据节点(hot):默认存储实时数据(热数据),支持高并发读写。
    • 冷数据节点(cold):存储历史数据(冷数据),硬件成本较低,查询性能较弱。
  • 索引分配策略:通过配置索引模板或直接设置索引属性,指定数据存储到数据节点或冷数据节点。

切换流程:启用冷数据节点,通过模板或索引设置分配数据,集群自动切换数据。

冷数据节点的查询性能低于数据节点,建议根据业务需求权衡使用。

切换冷热数据

  1. 确认集群是否启用冷数据节点。

    1. 登录云搜索服务管理控制台
    2. 在左侧导航栏,选择“集群管理 > OpenSearch”
    3. 在集群列表,单击目标集群名称,进入集群详情页。
    4. 选择“概览”页签,查看“节点信息”中是否有冷数据节点的信息。
      图2 查看冷数据节点
      • 是,集群存在冷数据节点,则执行下一步。
      • 否,集群不存在冷数据节点,需要先给集群添加冷数据节点再执行下一步。添加冷数据节点的操作指导请参见添加节点类型

  2. 登录OpenSearch Dashboards操作页面。

    1. 在集群详情页,单击页面右上方的“Dashboards”,登录OpenSearch Dashboards。
    2. 在OpenSearch Dashboards左侧导航栏选择“Dev Tools”,进入操作页面。

      控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。

  3. 在OpenSearch Dashboards中,配置集群索引的冷热数据切换策略。

    支持通过配置索引模板或直接设置索引属性,指定数据存储到数据节点或冷数据节点。

    • 配置索引模板
      通过设置集群模板将满足匹配模式的新建索引数据存储到冷热数据节点上。例如,执行如下命令设置Template将新建的以“myindex”开头的索引存储到冷数据节点上。
      PUT _template/{template_name}
      {
        "order": 1,
        "index_patterns": "myindex*",
        "settings": {
          "refresh_interval": "30s",
          "number_of_shards": "3",
          "number_of_replicas": "0",
          "routing.allocation.require.box_type": "cold"
        }
      }
      表1 关键参数说明

      参数

      类型

      说明

      index_patterns

      String

      定义索引名称的匹配模式。

      支持通配符*(匹配任意字符),如“myindex*”表示匹配所有以myindex开头的索引。

      routing.allocation.require.box_type

      String

      指定分片分配的节点类型。

      取值范围:

      • cold:分片分配到冷数据节点。
      • hot:分片分配到数据节点。

      未指定时,分片默认随机均衡分布在冷数据节点和数据节点中。

    • 直接设置索引属性

      当需要调整已有索引的存储节点时,则执行以下命令:

      PUT {index_name}/_settings   
      { 
              "index.routing.allocation.require.box_type": "cold"
      }
      表2 关键参数说明

      参数

      类型

      说明

      index_name

      String

      指定索引名称。

      • 单个索引:直接输入索引名称(如“my_index”)。
      • 多个索引:用英文逗号分隔多个索引(如“my_index1,my_index2”)。
      • 通配符:支持通配符 *(匹配任意字符),如“myindex*”表示匹配所有以myindex开头的索引。

      routing.allocation.require.box_type

      String

      指定分片分配的节点类型。

      取值范围:

      • cold:分片分配到冷数据节点。
      • hot:分片分配到数据节点。

      未指定时,分片默认随机均衡分布在冷数据节点和数据节点中。

  4. 验证冷热数据切换结果。

    执行以下命令查看索引分片分布:
    GET _cat/shards/{index_name}?v

    当数据量大时,数据切换过程较长,索引分片的分布情况可能存在中间态,即一部分数据在冷数据节点一部分数据在数据节点。

    如下所示,表示索引myindex的分片都存储在冷数据节点css-e668-ess-cold-esn-1-1中。

    index    shard prirep state       docs  store ip             node
    myindex 1     p      STARTED 14085446 17.8gb 192.168.91.188 css-e668-ess-cold-esn-1-1
    myindex 2     p      STARTED 14094005 17.9gb 192.168.91.188 css-e668-ess-cold-esn-1-1
    myindex 0     p      STARTED 14094742 17.8gb 192.168.91.188 css-e668-ess-cold-esn-1-1

  5. 回退冷热数据切换配置。

    如果需要取消冷热数据切换,则执行以下命令删除冷热数据的切换配置。

    PUT {index_name}/_settings    
    {
            "index.routing.allocation.require.box_type": null
    }

    回退冷热数据切换配置后,索引数据会被当成普通索引,随机均衡分布在冷数据节点和数据节点中。

相关操作

  • 冷数据节点支持节点数量扩缩容、磁盘存储容量的扩容或动态添加冷数据节点,具体操作请参见扩缩容OpenSearch集群
  • 如果集群未启用冷数据节点,可以通过存算分离功能优化存储成本,具体操作请参见配置OpenSearch集群存算分离