通过OpenStore智能混合存储实现海量数据存储

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

OpenStore智能混合存储引擎是阿里云Elasticsearch(简称ES)团队针对日志场景自研的弹性、高效、低成本的日志存储引擎。智能混合存储可突破传统冷热分离架构,大幅降低集群数据接入复杂度的同时,进一步降低云上海量数据的存储成本。本文介绍使用OpenStore智能混合存储实现海量数据存储的方法。

背景信息

在日志全观测场景下,通常因为业务场景或监管需求,需要长时间存储数据或归档审计。在使用开源Elasticsearch的过程中,需要进行集群冷热数据分离,将30天或者更长时间的数据通过集群快照的方式存储在其他存储介质上。该方式虽然能够实现长期日志数据归档,但是存储后不能直接进行查询,查询前需要调用相关API把快照信息恢复到集群中,等待快照中的索引初始化完成后再进行查询,面临着查询复杂度大、长时间存储成本高的问题。

OpenStore智能混合存储引擎是阿里云Elasticsearch 7.10内核增强版的重要功能,结合Indexing Service写入托管服务,满足用户在日志场景下低成本的高并发写入及长期数据存储需求。

使用限制

购买和使用OpenStore存储时,存在以下使用限制。

类别

限制说明

地域

目前仅开放以下地域(具体以控制台为准):

  • 华东2(上海)、华北3(张家口)、华东1(杭州)、华南 1(深圳)、华北 2(北京)

  • 新加坡、德国(法兰克福)、美国(弗吉尼亚)、日本(东京)

实例版本

仅7.10版本实例支持开启Openstore智能混合存储功能。

实例规格

仅支持选择OpenStore存储型8核64 GB、16核64 GB规格。

实例存储容量

单节点最大存储数据容量为30 TB。

说明

如果您有更大的单节点存储需求,请提交工单申请,最大支持50 TB。

shard副本数

开启OpenStore智能混合存储,shard副本数须大于等于1。

警告

多副本之间共享一份数据,不增加额外存储成本。多副本用于保证本地存储写入加速的可靠性,如果未设置多副本可能会导致部分实时写入数据的丢失,丢失后数据无法恢复。

索引模板

  • 内核1.8及以下版本,创建模板必须手动指定component-hybrid-openstore-index-template组合模板。

  • 1.9及以上内核无需手动指定组合模板。

详细信息,请参见通过OpenStore智能混合存储实现海量数据存储

说明

手动删除OpenStore存储索引时,需要将索引及索引对应的别名一起删除才可删除成功。

索引生命周期配置

不支持在索引生命周期中自定义freeze。

查询限制

  • 以下Agg查询类型仅内核1.9及以上版本支持,其他内核版本不支持。

    PercentilesAggregation、PercentileRanksAggregation、SamplerAggregation、DiversifiedAggregation、SignificantTextAggregation、GeoDistanceAggregation、GeoHashGridAggregation、GeoTileGridAggregation、GeoBoundsAggregation、GeoCentroidAggregation、ScriptedMetricAggregation。

  • 以下Agg查询类型暂不支持,不区分内核版本。

    FiltersAggregation、AdjacencyMatrixAggregation、ReverseNestedAggregation、CompositeAggregation。

集群分片数限制

建议80000以下。

节点分片数限制

建议3000以下。

单分片大小

建议40 G以下。

数据盘写入吞吐

数据盘实际使用水位在85%以下,300 MB/s。

数据盘实际使用水位在85%以上,100 MB/s。

操作步骤

步骤一:开启OpenStore存储

您可以在创建7.10内核增强版实例时,开启Openstore智能混合存储功能。

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. Elasticsearch实例页面,单击创建

  4. 在购买页面,实例类型选择内核增强版Elasticsearch版本选择7.10,在内核增强特性高级增强功能中选中Openstore智能混合存储(日志场景)

    说明

    除部分地域如德国(法兰克福)、美国(弗吉尼亚)、日本(东京)外,开启Openstore智能混合存储功能会同时开启Indexing Service索引构建服务,实际以控制台为准。

  5. 实例规格中,选中数据节点,选择OpenStore混合存储型规格族的规格,规格支持8核64G和16核64G两种。

    说明

    每个OpenStore节点的最大存储数据量为30 TB。如果您有更大的单节点存储需求,请提交工单申请,最大支持50 TB。

  6. 配置其他参数后,完成实例购买。

    说明

步骤二:管理OpenStore索引模板

如果您的业务存在频繁的Put Mapping操作,为避免消耗大量计算资源,对托管服务稳定性造成影响,建议您写数据前提前定义索引模板,降低Put Mapping操作影响集群稳定性。

方法一:通过控制台管理索引模板

  1. 进入已开启OpenStore存储的目标实例,在左侧导航栏选择配置与管理 > 索引管理中心

  2. 单击索引模板管理页签。

  3. 索引模板管理页面,管理您集群中的索引模板。

    阿里云Elasticsearch为您提供了OpenStore定制索引模板,您可以查看并修改OpenStore定制的索引模板和生命周期策略,将定制模板快速应用到您的业务索引上。您也可以创建自定义的索引模板,并配置生命周期策略。具体说明如下:

    说明
    • 由于OpenStore索引数据默认写入热节点,达到ILM周期后会迁移到OpenStore存储,因此不支持在OpenStore索引或模板中配置index.routing.allocation.require.box_type参数。

    • 如果您需要在控制台管理索引模板,例如修改Openstore定制索引模板、创建自定义组合模板:

      • 1.8及以下内核版本必须在索引模板配置 > 内容模板配置 > 组合内容模板中选中component-hybrid-openstore-index-template模板,确保数据默认写入OpenStore,避免业务数据量过大导致集群磁盘不够用。

      • 1.9及以上内核不需要手动指定component-hybrid-openstore-index-template模板,系统将自动应用相关配置。

    • 查看并修改OpenStore定制的索引模板和生命周期策略:

      1. 单击索引模板或生命周期策略名称,查看OpenStore定制的索引模板和生命周期策略。

        OpenStore智能混合存储对应的索引模板名称为hybrid_openstore_index_template,生命周期策略名称为hybrid_openstore_default_ilm_policy。

      2. 单击索引模板或生命周期策略右侧的修改,修改定制的索引模板和生命周期策略。

        定制化的OpenStore模板默认仅对log-service-*索引进行管理。修改时可将索引模式指定为业务索引名称,并开启创建数据流,定制模板即可快速应用到业务索引上。修改OpenStore定制模板

      3. 单击确认

    • 创建自定义索引模板,并配置生命周期策略:

      1. 单击创建索引模板

      2. 索引生命周期策略配置向导中,参考下图配置索引生命周期策略。

        OpenStore智能混合存储模板

        详细参数说明,请参见创建索引模板

        说明
        • Indexing Service实例建议开启滚动更新,保证数据滚动更新后自动取消云托管能力。

        • 当OpenStore存储类型为智能混合存储时,无冷阶段

        • 取消托管时间默认为3天,3天后自动退出Indexing Service写入托管服务,减少计费开销。如果您设置的时长超过冷阶段或删除阶段的开始时间,索引进入相应阶段后会自动取消托管。取消托管后索引变成只读,索引将不再通过Indexing Service进行写入加速。

      3. 单击保存并下一步,在索引模板配置向导中,参考下图配置索引模板。

        配置索引模板

        详细参数说明,请参见创建索引模板

        说明
        • 1.9及以上内核不需要指定component-hybrid-openstore-index-template模板,系统将自动应用openstore相关配置。

        • Indexing Service实例开启创建数据流后,才可在数据流管理页面管理写入的索引。详细信息请参见将数据流写入OpenStore索引

        • 以下参数无需在实例控制台settings中指定,否则页面报错:

          • index.lifecycle.name(产品将自动配置)

          • index.apack.cube.following_index(产品将自动配置)

          • index.routing.allocation.require.box_type(日志增强版实例不支持指定该参数)

      4. 单击确认

方法二:通过API管理索引模板

从Elasticsearch 7.10版本开始,索引模板默认会使用优先级最高的配置,不会自动组合两个索引模板内的配置。由于集群中已经存在默认的OpenStore索引模板,如果您需要再通过API自定义索引模板,而这两个模板的配置不会自动组合,因此可能会影响OpenStore功能的正常使用,所以建议您使用Elasticsearch组合模板进行配置。

说明

阿里云Elasticsearch不支持通过Kibana Stack Management管理OpenStore内容模板及策略,建议使用API操作或控制台索引管理中心进行配置管理。

创建混合存储索引模板

开启OpenStore智能混合存储后,集群中会默认添加组合模板component-hybrid-openstore-index-template。自定义模板时,请按照实例对应的内核选择以下方式创建模板:

  • 1.8.0及以下内核实例创建模板时需指定component-hybrid-openstore-index-template,该模板中包含了该集群的专有环境配置,涉及访问权限控制,非必要请勿修改,以免影响集群功能。

    PUT _index_template/test-template
    {
      "index_patterns" : [
        "test-index-*"
      ],
      "template" : {
        "settings" : {
          "index.number_of_replicas": "1",
          "index.number_of_shards": "6",
          "index.lifecycle.name": "zlopenstore_default_ilm_policy"
        },
        "aliases" : {}
      },
      "composed_of" : [
        # 混合存储组合模板
        "component-hybrid-openstore-index-template" 
      ],
      "priority" : 100
    }
  • 1.9及以上内核小版本实例无需手动执行,默认会应用openstore模板。开启Indexing service的实例通过API自定义模板时,必须将index.apack.cube.following_index设置为true,否则无法托管索引。

    PUT _index_template/test-template
    {
      "index_patterns" : [
        # 索引模板
        "test-index-*"
      ],
      "template" : {
        "settings" : {
          "index.number_of_replicas": "1",
          "index.number_of_shards": "6",
          "index.lifecycle.name": "zlopenstore_default_ilm_policy",
          "index.apack.cube.following_index": true
        },
        "aliases" : {}
      },
      "priority" : 100
    }
重要
  • 本文中的脚本均可在Kibana控制台上运行,具体操作请参见登录Kibana控制台

  • 以下脚本中的...表示省略部分配置。实际运行时,需要删除脚本中的注释信息。

自定义混合存储策略

以下示例创建了名称为zlopenstore_default_ilm_policy的生命周期策略,并在模板的基础上添加了delete阶段的配置。

PUT _ilm/policy/zlopenstore_default_ilm_policy
{
  "policy" : {
    "phases" : {
      "hot" : {
        "min_age" : "0s",
        "actions" : {
          "rollover" : {           
            "max_size" : "50gb",
            "max_age" : "30d",
            "max_docs" : 10000
          },
          "cube_unfollow" : {      
            "max_age" : "3d",
            "force_merge" : true,
            "force" : false,
            "read_only" : true
          },
          "set_priority" : {
            "priority" : 1000
          }
        }
      },
      "delete" : {                 
        "min_age" : "30d",
        "actions" : {
          "delete" : {
            "delete_searchable_snapshot" : true
          }
        }
      }
    }
  }
}

参数

说明

rollover

配置rollover滚动更新策略。

cube_unfollow

配置Indexing Service退出托管策略。

delete

配置索引过期删除策略。

获取默认混合存储策略

开启OpenStore智能混合存储的实例默认提供其依赖的内容模板和生命周期策略,您可以通过对应命令获取配置信息:

  • 通过GET _component_template/component-hybrid-openstore-index-template命令获取内容模板

    {
      "component_templates" : [
        {
          "name" : "component-hybrid-openstore-index-template",
          "component_template" : {
            "template" : {
              "settings" : {
                "index" : {
                  "replication" : {
                    "type" : "segment"
                  },
                  "apack" : {
                    "cube" : {
                      "following_index" : "true"
                    }
                  },
                  "codec" : "OpenIndex",
                  "allocation" : {
                    "existing_shards_allocator" : "open_store_allocator"
                  },
                  "refresh_interval" : "1s",
                  "store" : {
                    "type" : "openstore",
                    "openstore" : {
                      "endpoint" : "http://oss-cn-hangzhou-internal.aliyuncs.com",
                      "ram_name" : "snapshot-role-133071096032****",
                      "type" : "hybrid",
                      "bucket_name" : "openstore-133071096032****-es-cn-2r42xjwrz0008****"
                    }
                  }
                }
              }
            }
          }
        }
      ]
    }
    重要

    建议直接采用模板中的默认配置,尽量避免手动配置,以免影响集群使用。

  • 通过GET _ilm/policy/hybrid_openstore_default_ilm_policy命令获取生命周期策略

    {
      "hybrid_openstore_default_ilm_policy" : {
        "version" : 1,
        "modified_date" : "2022-09-08T03:51:23.042Z",
        "policy" : {
          "phases" : {
            "hot" : {
              "min_age" : "0ms",
              "actions" : {
                "cube_unfollow" : {
                  "max_age" : "3d",
                  "force_merge" : true,
                  "force" : false,
                  "read_only" : true
                }
              }
            }
          }
        }
      }
    }

    actions中的cube_unfollow参数用来设置Indexing Service退出写入托管的相关配置,默认3天退出Indexing Service写入托管。

步骤三:将数据流写入OpenStore索引

  1. 切换到数据流管理页签,单击创建数据流

    说明

    仅7.10版本同时开启Openstore和Indexing Service的实例支持在控制台进行数据流管理,单独开启Openstore的实例暂不支持在控制台进行数据流管理。建议您使用数据流相关API(CreateDataStreamRolloverDataStreamListDataStreamsDeleteDataStream)管理数据。

  2. 输入与索引模板匹配的数据流名称,单击确定

    数据流名称需要一个匹配的索引模板,此处需要输入ds-您在步骤二:管理OpenStore索引模板中定义的OpenStore索引模板名称。如果您忘记已创建的索引模板名称,可单击预览已有索引模板查看。创建数据流

  3. 登录Kibana控制台,通过bulk批量写入数据。

    在写入数据时,您可以通过设置写入的文档数量超过生命周期配置中文件数限制参数设置的值进行测试。文件数限制参数设置的值,可在步骤二:管理OpenStore索引模板中查看。

  4. 切换至索引管理页签,查看OpenStore索引的写入托管状态、当前生命周期阶段等信息。

    索引管理

常见问题

Q:索引数据存储至OpenStore后,为什么无法写入更新,只能读取?

A:集群提供的openstore_default_ilm_policyactions中指定了force_merge_index参数为true,不可更改。当索引force_merge后,索引将处于只读状态,无法写入。

Q:如何将Elasticsearch数据迁移到OpenStore混合存储中?

A:您可以通过OSS快照备份功能将Elasticsearch数据迁移到OpenStore混合存储中。具体操作,请参见将Elasticsearch数据迁移到OpenStore智能混合存储将OSS快照数据恢复至阿里云Elasticsearch OpenStore中