OpenStore存储是阿里云Elasticsearch团队自研的针对日志场景的低成本、高效、弹性存储解决方案,能够为您在日志场景中提供海量存储服务。本文介绍在不同的场景下,如何开启OpenStore存储,以及其使用方式。
背景信息
当您有长时间存储数据、归档审计数据的需求时,通常需要通过阿里云Elasticsearch集群快照的方式将数据存储在对象存储OSS上,该方式虽然能够帮助您存储日志数据,但是存储后不能够直接进行信息查询。查询信息前,需要您调用相关API把快照信息恢复到集群中,等待快照中的索引初始化完成后才可以去查询。该场景面临着查询复杂度大、海量存储成本高的问题。为解决此问题,阿里云Elasticsearch团队自研OpenStore存储功能,该功能实现了基于计算存储分离的超低成本、弹性存储,可以帮助您实现根据实际数据的存储量按量计费,无须提前预留集群存储容量,并100%兼容Elasticsearch原生查询能力。真正做到有多少用多少,用多少付多少。在提升集群易用性的同时,大大降低了云上Elasticsearch海量数据的存储资源成本。
使用限制
购买和使用OpenStore存储时,存在以下使用限制。
类别 | 限制项 | 限制说明 |
---|---|---|
地域 | 华东2(上海)、华北3(张家口)、华东1(杭州)、华南 1(深圳)、华北 2(北京) | 目前仅开放华东2(上海)、华北3(张家口)、华东1(杭州)、华南 1(深圳)、华北 2(北京)地域。 |
实例版本 | 仅7.10版本实例支持开启OpenStore存储 | 仅支持以下两种方式开启OpenStore存储:
|
实例存储 | 单节点最大存储数据量 | 单节点最大存储数据量为20 TB。
说明 如果您有更大的单节点存储需求,请提交工单申请,最大支持50 TB。
|
shard数 | shard副本数 | 开启OpenStore存储,索引数据会存储至OpenStore,索引shard副本数默认为0,数据的可靠性将由底层存储保证,请放心使用。
注意 如果将OpenStore存储的索引副本数设置为1,索引将处于yellow状态,所以不建议手动设置副本,保持默认值即可。
|
索引模板 | OpenStore定制索引模板 | 开启OpenStore存储,阿里云Elasticsearch会默认提供定制模板openstore-index-template,模板默认使用openstore_default_ilm_policy策略。
说明 手动删除OpenStore存储索引时,需要将索引及索引对应的别名一起删除才可删除成功。
|
索引生命周期配置 | 不支持在索引生命周期中自定义freeze | 无。 |
操作流程
步骤一:开启OpenStore存储
阿里云Elasticsearch支持通用商业版和日志增强版两种类型的实例。您可以通过创建7.10日志增强版Indexing Service系列实例开启OpenStore存储功能;也可以将实例从7.10通用商业版升级至7.10日志增强版,开启OpenStore存储功能。
新购实例开启OpenStore存储
已购通用商业版实例开启OpenStore存储
步骤二:管理OpenStore索引模板
通过控制台管理索引模板
通过API管理索引模板
从Elasticsearch 7.10版本开始,索引模板默认会使用优先级最高的配置,不会自动组合两个索引模板内的配置。由于集群中已经存在默认的OpenStore索引模板,如果您需要再通过API自定义索引模板,而这两个模板的配置不会自动组合,因此可能会影响OpenStore功能的正常使用,所以建议您使用Elasticsearch组合模板进行配置。
- 本文中的脚本均可在Kibana控制台上运行,具体操作请参见登录Kibana控制台。
- 以下脚本中的
...
表示省略部分配置。 - 如果您使用了自定义的组合模板和策略,请确保索引模板中配置的组合模板名称与您自定义的组合模板名称保持一致,即composed_of参数值配置为您自定义的组合模板名称。
PUT _index_template/template_instance-sls
{
"index_patterns" : [
"-.*"
],
"template" : {
"settings" : {
...
},
"mappings" : {
...
}
},
# 如果您使用了自定义的组合模板和策略,此处需要配置为您自定义的组合模板名称。
"composed_of" : ["component-openstore-index-template"],
"priority" : 100
}
GET _component_template/component-openstore-index-template
和GET _ilm/policy/openstore_default_ilm_policy
命令获取默认的配置信息。获取到的配置信息如下:
- component-openstore-index-template
{ "component_templates" : [ { "name" : "component-openstore-index-template", "component_template" : { "template" : { "settings" : { "index" : { "lifecycle" : { "name" : "openstore_default_ilm_policy", "rollover_alias" : "" }, "apack" : { "cube" : { "following_index" : "true" } }, "codec" : "OpenIndex", "refresh_interval" : "1s" } } } } } ] }
- openstore_default_ilm_policy
{ "openstore_default_ilm_policy" : { "version" : 2, "modified_date" : "2022-03-16T06:33:42.802Z", "policy" : { "phases" : { "hot" : { "min_age" : "0s", "actions" : { } }, "cold" : { "min_age" : "3d", "actions" : { "openstore" : { "openstore_repository" : "aliyun_auto_snapshot", "force_merge_index" : true, "user_id" : "1330710960******", "region_id" : "cn-hangzhou", "instance_id" : "es-cn-7mz2lpnaf0012****" }, "set_priority" : { "priority" : 50 } } } } } } }
以下参数均为actions中的必选参数,详细说明如下。参数 说明 openstore_repository OpenStore存储仓库名称,固定为aliyun_auto_snapshot,不支持其他名称。 user_id 您阿里云账号的ID。在控制台上,将鼠标移至右侧头像处,获取账号ID。 region_id 目标实例所在的地域ID。参见查看实例的基本信息,在实例的基本信息页面查看实例所在地域,并参见参数说明获取地域ID。 instance_id 目标实例的ID。参见查看实例的基本信息,在实例的基本信息页面查看实例的ID。 force_merge_index 是否执行forcemerge,必须设置为true,不能为false。设置为true,表示数据存储至OpenStore后,将处于只读状态。 注意 阿里云Elasticsearch不支持通过Kibana Stack Management管理OpenStore内容模板及策略,建议使用API操作或控制台索引管理中心进行配置管理。集群中已经配置了OpenStore部分的索引模板和生命周期策略名称,建议不要修改。如果您的业务需要自定义组合模板和策略,可以参考默认模板结构进行配置,示例如下:- 索引模板
以下示例创建了名称为zlcomponent-openstore-index-template的OpenStore索引模板,并使用了自定义的zlopenstore_default_ilm_policy策略。
PUT _component_template/zlcomponent-openstore-index-template { "template" : { "settings" : { "index" : { "lifecycle" : { "name" : "zlopenstore_default_ilm_policy" }, "apack" : { "cube" : { "following_index" : "true" } }, "codec" : "OpenIndex87", "refresh_interval" : "1s" } } } }
- 生命周期策略
以下示例创建了名称为zlopenstore_default_ilm_policy的策略,并在模板的基础上添加了delete阶段的配置。
PUT _ilm/policy/zlopenstore_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" : "1330710960******", "region_id" : "cn-hangzhou", "instance_id" : "es-cn-7mz2lpnaf0012****" }, "set_priority" : { "priority" : 50 } } }, "delete": { "min_age": "40d", "actions": { "delete": { "delete_searchable_snapshot": true } } } } } }
- 索引模板
步骤三:将数据流写入OpenStore索引
常见问题
- Q:索引数据存储至OpenStore后,为什么无法写入更新,只能读取?
A:集群提供的openstore_default_ilm_policy的actions中指定了force_merge_index参数为true,不可更改。当索引force_merge后,索引将处于只读状态,无法写入。
- Q:索引数据存储至OpenStore的过程中,集群状态为什么会变为异常(红色)?
A:因为在索引数据复制进OpenStore冷存储的过程中,冷索引会处于写入状态,导致索引状态变为red,所以集群状态会变成红色。而在该复制过程中,热索引处于正常状态,并且是可持续对外提供服务的。当写入完成后,热索引被删除,冷索引恢复正常,此时集群也会恢复正常状态。