更新时间:2025-07-29 GMT+08:00

切换Elasticsearch集群冷热数据

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

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

原理介绍

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

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

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

约束限制

  • 仅支持创建集群时启用冷数据节点的集群,已建集群不支持后续添加冷数据节点。
  • 冷数据节点查询性能低于数据节点,建议根据业务需求权衡使用。

切换冷热数据

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

    1. 登录云搜索服务管理控制台。
    2. 在左侧导航栏,选择“集群管理 > Elasticsearch”
    3. 在集群列表,选择目标集群,单击集群名称进入集群详情页,查看“节点信息”中是否有冷数据节点的信息。
      图2 查看冷数据节点
      • 是,集群存在冷数据节点,则执行下一步。
      • 否,集群不存在冷数据节点,则不支持切换集群的冷热数据。

  2. 登录Kibana操作页面。

    1. 在Elasticsearch集群列表,选择目标集群,单击操作列的“Kibana”,登录Kibana。
    2. 在Kibana左侧导航栏选择“Dev Tools”,进入操作页面。

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

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

    • 配置索引模板

      通过设置集群模板将相应的索引数据存储到冷热数据节点上。例如,执行如下命令设置Template将以“myindex”开头的索引存储到冷数据节点上(根据Elasticsearch版本选择命令示例)。

      • Elasticsearch版本大于或等于6.x
        PUT _template/test
        {
          "order": 1,
          "index_patterns": "myindex*",
          "settings": {
            "refresh_interval": "30s",
            "number_of_shards": "3",
            "number_of_replicas": "0",
            "routing.allocation.require.box_type": "cold"
          }
        }
      • Elasticsearch版本小于6.x
        PUT _template/test
        {
            "order": 1,
            "template": "myindex*",
            "settings": {
                "index": {
                    "refresh_interval": "30s",
                    "number_of_shards": "3",
                    "number_of_replicas": "0",
                    "routing.allocation.require.box_type": "cold"
                }
            }
        }
      参数说明:
      • template或index_patterns:匹配索引名称的规则(如“myindex*”)。
      • box_type:分配节点类型,cold表示分配到冷数据节点,hot表示分配到数据节点。
    • 直接设置索引属性

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

      PUT myindex/_settings   
      { 
              "index.routing.allocation.require.box_type": "cold"
      }
      参数说明:
      • myindex:目标索引名称。
      • box_type:分配节点类型,cold表示分配到冷数据节点,hot表示分配到数据节点。

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

    执行以下命令查看索引分片分布:
    GET _cat/shards/myindex?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 myindex/_settings    
    {
            "index.routing.allocation.require.box_type": null
    }

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

相关操作