OpenStore存储是阿里云Elasticsearch团队自研的针对日志场景的低成本、高效、弹性存储解决方案,能够为您在日志场景中提供海量存储服务。本文介绍在不同的场景下,如何开启OpenStore存储,以及其使用方式。

背景信息

当您有长时间存储数据、归档审计数据的需求时,通常需要通过阿里云Elasticsearch集群快照的方式将数据存储在对象存储OSS上,该方式虽然能够帮助您存储日志数据,但是存储后不能够直接进行信息查询。查询信息前,需要您调用相关API把快照信息恢复到集群中,等待快照中的索引初始化完成后才可以去查询。该场景面临着查询复杂度大、海量存储成本高的问题。为解决此问题,阿里云Elasticsearch团队自研OpenStore存储功能,该功能实现了基于计算存储分离的超低成本、弹性存储,可以帮助您实现根据实际数据的存储量按量计费,无须提前预留集群存储容量,并100%兼容Elasticsearch原生查询能力。真正做到有多少用多少,用多少付多少。在提升集群易用性的同时,大大降低了云上Elasticsearch海量数据的存储资源成本。

使用限制

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

类别 限制项 限制说明
地域 华东2(上海)、华北3(张家口)、华东1(杭州) 目前仅开放华东2(上海)、华北3(张家口)和华东1(杭州)地域。
实例版本 仅7.10版本实例支持开启OpenStore存储 仅支持以下两种方式开启OpenStore存储:
  • 新购7.10日志增强版Index Service实例开启。
  • 已购7.10通用商业版,通过集群升配功能开启。
    注意
    • 已购7.10通用商业版,内核小版本需要升级到1.5.0及以上,才可开启OpenStore存储。
    • OpenStore属于阿里云Elasticsearch日志增强版特性,商业版升级后,实例类型将变为日志增强版,不会因为开启OpenStore存储而将实例升级为Indexing Service实例。
实例存储 单节点最大存储数据量 单节点最大存储数据量为20 TB至50 TB。
说明 如果超过最大限制,建议增加OpenStore存储节点个数。如果您有更大的单节点存储需求,请提交工单申请。
shard数 shard副本数 开启OpenStore存储,索引数据会存储至OpenStore,索引shard副本数默认为0,数据的可靠性将由底层存储保证,请放心使用。
注意 如果将OpenStore存储的索引副本数设置为1,索引将处于yellow状态,所以不建议手动设置副本,保持默认值即可。
索引模板 OpenStore定制索引模板 开启OpenStore存储,阿里云Elasticsearch会默认提供定制模板openstore-index-template,模板默认使用openstore_default_ilm_policy策略。

操作流程

  1. 步骤一:开启OpenStore存储
  2. 步骤二:管理OpenStore索引模板
  3. 步骤三:管理写入OpenStore存储的索引

步骤一:开启OpenStore存储

阿里云Elasticsearch支持通用商业版和日志增强版两种类型的实例。您可以通过创建7.10日志增强版Indexing Service系列实例开启OpenStore存储功能;也可以将实例从7.10通用商业版升级至7.10日志增强版,开启OpenStore存储功能。

新购实例开启OpenStore存储

  1. 前往实例创建页面
  2. 在购买页面中,选择实例类型为日志增强版7.10,系列Index Service
    选择实例类型和系列
  3. 单击下一步:集群配置,在集群配置中打开OpenStore存储开关。
    开启OpenStore存储
    说明
    • 开启OpenStore存储,默认会开启数据节点,集群采用冷热分离架构。OpenStore存储仅应用在冷数据节点上,且仅支持16核64 GB的固定规格。
    • 每个OpenStore节点的最大存储数据量为20 TB至50 TB。
  4. 参见购买页面参数(增强版),配置其他参数,完成购买。

已购通用商业版实例开启OpenStore存储

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. 进入目标实例。
    1. 在顶部菜单栏处,选择资源组和地域。
    2. 在左侧导航栏,单击Elasticsearch实例,然后在Elasticsearch实例中单击目标7.10通用商业版实例ID。
  4. 可选:升级内核版本。
    基本信息页面,查看实例的内核版本是否过低。如果页面没有有可更新的内核补丁提示,说明当前内核版本为最新版本,无需升级,可忽略此步骤。如果有,请执行以下步骤升级内核版本:
    1. 单击有可更新的内核补丁
      有可更新的内核版本
    2. 参见升级版本,将内核版本升级到1.5.0及以上。
      升级内核补丁
  5. 基本信息页面的节点可视化区域,开启OpenStore存储。
    1. 在OpenStore存储模块,打开OpenStore存储用量开关。
    2. 在弹出的对话框中,单击立即开启
      注意
      • 如果集群已开启非OpenStore的冷数据节点,则系统不展示OpenStore模块,且不支持切换至OpenStore存储。
      • 如果您实例的内核版本过低,在开启OpenStore存储时,系统会提示您升级版本,请先按照提示升级实例的内核版本,具体操作请参见升级版本
    3. 在升配页面开启OpenStore存储,勾选服务协议,单击立即购买,按照提示完成购买,并返回OpenStore存储模块。
      升配的具体操作,请参见升配集群

步骤二:管理OpenStore索引模板

通过控制台管理索引模板

  1. 进入已开启OpenStore存储的目标实例,在左侧导航栏单击索引管理中心
    说明 本章节以7.10日志增强版Indexing Service实例为例进行介绍,商业版实例不支持索引管理中心功能,具体以页面显示为准。
  2. 查看或修改OpenStore定制的索引模板和生命周期策略。
    索引模板管理
    1. 索引模板管理页签中,单击openstore-index-templateopenstore_default_ilm_policy名称,查看OpenStore定制的索引模板和生命周期策略。
    2. 单击openstore-index-template右侧的修改,修改定制的索引模板和生命周期策略。
      定制化的OpenStore模板默认仅对log-service-*索引进行管理。修改时可将索引模式指定为业务索引名称,并开启创建数据流,定制模板即可快速应用到业务索引上。修改OpenStore定制模板
  3. 创建自定义索引模板,并配置生命周期策略。
    1. 索引模板管理页签中,单击创建索引模板
    2. 索引生命周期策略配置向导中,参考下图配置索引生命周期策略。
      配置生命周期策略

      详细说明,请参见索引模板管理

      注意
      • Indexing Service实例建议开启滚动更新,保证数据滚动更新后自动取消云托管能力。
      • 系统默认开启冷阶段OpenStore存储,如果您的索引需要进行冷热生命周期配置,请勿关闭冷阶段OpenStore存储开关。
    3. 单击保存并下一步,在索引模板配置向导中,参考下图配置索引模板。
      配置索引模板

      详细参数说明,请参见索引模板管理

      注意 Indexing Service实例开启创建数据流后,才可在数据流管理页面管理写入的索引。详细信息,请参见步骤三:管理写入OpenStore存储的索引
  4. 单击确认

通过API管理索引模板

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

开启OpenStore存储后,集群中会默认添加OpenStore的组合模板component-openstore-index-template。在自定义模板时,您只需要在脚本的composed_of参数中配置依赖的组合模板,即可使用OpenStore存储。自定义索引模板的示例脚本如下。
说明
  • 本文中的脚本均可在Kibana控制台上运行,具体操作请参见登录Kibana控制台
  • 以下脚本中的...表示省略部分配置。
PUT _index_template/template_instance-sls
{
  "index_patterns" : [
    "*"
  ],
  "template" : {
    "settings" : {
            ...
    },
    "mappings" : {
            ...
    }
  },
  "composed_of" : ["component-openstore-index-template"],
  "priority" : 100
}
Elasticsearch集群已创建了组合模板component-openstore-index-template,及其依赖的生命周期策略模板openstore_default_ilm_policy。创建时的脚本配置如下。
  • component-openstore-index-template
    PUT _component_template/component-openstore-index-template
    {
      "template" : {
        "settings" : {
          "index" : {
            "lifecycle" : {
              "name" : "openstore_default_ilm_policy"
            },
            "apack" : {
              "cube" : {
                "following_index" : "true"
              }
            },
            "codec" : "OpenIndex87",
            "refresh_interval" : "1s"
          }
        }
      }
    }
  • openstore_default_ilm_policy
    PUT _ilm/policy/openstore_default_ilm_policy
    {
        "policy" : {
          "phases" : {
            "hot" : {
              "min_age" : "0ms",
              "actions" : { }
            },
            "cold" : {
              "min_age" : "3d",
              "actions" : {
                "openstore" : {
                  "openstore_repository" : "aliyun_auto_snapshot",
                  "force_merge_index" : true,
                  "user_id" : "1330xxxx0327595",
                  "region_id" : "cn-hangzhou",
                  "instance_id" : "es-cn-xxx"
                },
                "set_priority" : {
                  "priority" : 50
                }
              }
            }
          }
        }
      }
    }
    以下参数均为actions中的必选参数,详细说明如下。
    参数 说明
    openstore_repository OpenStore存储仓库名称,固定为aliyun_auto_snapshot,不支持其他名称。
    user_id 您阿里云账号的ID。在控制台上,将鼠标移至右侧头像处,获取账号ID获取账号ID
    region_id 目标实例所在的地域ID。参见查看实例的基本信息,在实例的基本信息页面查看实例所在地域,并参见参数说明获取地域ID。
    instance_id 目标实例的ID。参见查看实例的基本信息,在实例的基本信息页面查看实例的ID。
    force_merge_index 是否执行forcemerge,必须设置为true,不能为false。设置为true,表示数据存储至OpenStore后,将处于只读状态。
    注意 集群中已经配置了OpenStore部分的索引模板和生命周期策略名称,建议不要修改。如果您需要自定义策略,建议在默认策略上修改。

步骤三:管理写入OpenStore存储的索引

  1. 切换到数据流管理页签,单击创建数据流
    注意 仅7.10日志增强版Indexing Service系列的实例支持在控制台进行数据流管理,通用商业版7.10升级到日志增强版后不支持Indexing Service,因此也不支持在控制台进行数据流管理。建议您使用数据流相关API(CreateDataStreamRolloverDataStreamListDataStreamsDeleteDataStream)管理数据。
  2. 输入与索引模板匹配的数据流名称,单击确定
    数据流名称需要一个匹配的索引模板,此处需要输入您在步骤二:管理OpenStore索引模板中定义的索引模板。如果您忘记已创建的索引模板名称,可单击预览已有索引模板查看。创建数据流
  3. 登录Kibana控制台,通过bulk批量写入数据。
    在写入数据时,您可以通过设置写入的文档数量超过生命周期配置中文件数限制参数设置的值,进行测试。文件数限制参数设置的值,可在步骤二:管理OpenStore索引模板中查看。
  4. 切换至索引管理页签,查看集群索引的写入托管状态、当前生命周期阶段等信息。
    索引管理
    说明 如果是非数据流场景,数据写入到OpenStore存储后,索引名称将以openstore-*开头,不影响业务查询。

常见问题

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

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

  • Q:索引数据存储至OpenStore的过程中,集群状态为什么会变为异常(红色)?

    A:因为在索引数据复制进OpenStore冷存储的过程中,冷索引会处于写入状态,导致索引状态变为red,所以集群状态会变成红色。而在该复制过程中,热索引处于正常状态,并且是可持续对外提供服务的。当写入完成后,热索引被删除,冷索引恢复正常,此时集群也会恢复正常状态。