数据层级

edit

一个数据层是集群中共享相同数据节点角色节点集合,并且具有适合该角色的硬件配置。Elastic 建议同一层中的节点共享相同的硬件配置,以避免热点问题

您使用的数据层级以及使用它们的方式,取决于数据的类别

以下数据层级可以用于每个数据类别:

内容数据:

  • 内容层节点处理非时间序列索引的索引和查询负载,例如产品目录。

时间序列数据:

  • 热层节点处理时间序列数据的索引负载,例如日志或指标。它们保存您最近、最常访问的数据。
  • 温层节点保存访问频率较低且很少需要更新的时间序列数据。
  • 冷层节点保存访问频率极低且通常不需要更新的时间序列数据。为了节省空间,您可以在冷层保留完全挂载的索引可搜索快照。这些完全挂载的索引消除了对副本的需求,与常规索引相比,所需的磁盘空间减少了约50%。
  • 冻结层节点保存很少访问且从不更新的时间序列数据。冻结层专门存储部分挂载的索引可搜索快照。这进一步扩展了存储容量——与温层相比,最多可扩展20倍。

Elasticsearch 节点的性能通常受限于底层存储和硬件配置的性能。 例如硬件配置,请参阅 Elastic Cloud 的 实例配置。 查看我们关于优化存储的建议,以提高 索引搜索 的性能。

Elasticsearch 通常期望数据层中的节点共享相同的硬件配置文件。不遵循此建议的变体应仔细设计,以避免 热点问题

数据层的应用方式通常取决于数据的类别:

  • 内容数据在其整个数据生命周期内都保留在内容层上。
  • 时间序列数据可能会根据您的性能、弹性和数据保留要求,通过降序的温度数据层级(热、温、冷和冻结)进行处理。

    您可以使用数据流生命周期或自定义索引生命周期管理来自动化这些生命周期转换。

可用的数据层级

edit

了解更多关于每个数据层的信息,包括何时以及如何使用它们。

内容层级

edit

存储在内容层的数据通常是项目集合,例如产品目录或文章存档。 与时间序列数据不同,内容的值在时间上保持相对恒定, 因此随着时间的推移将其移动到具有不同性能特征的层级是没有意义的。 内容数据通常具有较长的数据保留要求,并且您希望能够快速检索 项目,无论它们的年龄如何。

内容层节点通常针对查询性能进行了优化——它们优先考虑处理能力而非IO吞吐量,以便能够快速处理复杂搜索和聚合并返回结果。虽然它们也负责索引,但内容数据通常不会以与日志和指标等时间序列数据相同的高速率摄取。从弹性的角度来看,此层中的索引应配置为使用一个或多个副本。

内容层是必需的,通常与热层部署在相同的节点分组中。系统索引和其他不属于数据流的索引会自动分配到内容层。

热层

edit

热层是Elasticsearch时间序列数据的入口点,并保存您最近、最常搜索的时间序列数据。 热层中的节点需要快速处理读写操作, 这需要更多的硬件资源和更快的存储(SSD)。 为了弹性,热层中的索引应配置为使用一个或多个副本。

热层是必需的。作为数据流一部分的新索引会自动分配到热层。

温层

edit

时间序列数据一旦查询频率低于热层中最近索引的数据,就可以移动到温层。 温层通常保存最近几周的数据。 仍然允许更新,但可能不频繁。 温层中的节点通常不需要像热层中的节点那样快。 为了弹性,温层中的索引应配置为使用一个或多个副本。

冷层

edit

当您不再需要定期搜索时间序列数据时,它可以从温层移动到冷层。虽然仍然可以搜索,但这一层通常优化为较低的存储成本,而不是搜索速度。

为了更好地节省存储空间,您可以将完全挂载的索引 存储在冷层中的可搜索快照上。与常规索引不同,这些完全挂载的索引不需要副本以确保可靠性。 在发生故障时,它们可以从底层快照中恢复数据。这可能会将数据所需的本地存储量减少一半。 在冷层中使用完全挂载的索引需要一个快照仓库。完全挂载的索引是只读的。

或者,您可以使用冷层来存储带有副本的常规索引,而不是使用可搜索的快照。这使您可以将较旧的数据存储在成本较低的硬件上,但与暖层相比,不会减少所需的磁盘空间。

冻结层

edit

一旦数据不再被查询,或者很少被查询,它可能会从冷层移动到冻结层,并在其生命周期内一直保存在那里。

冻结层需要一个快照仓库。 冻结层使用部分挂载的索引来存储 并从快照仓库加载数据。这减少了本地存储和 运营成本,同时仍然允许您搜索冻结的数据。由于Elasticsearch有时必须 从快照仓库获取冻结的数据,因此冻结层上的搜索通常比冷层上的搜索要慢。

配置数据层级

edit

按照您的部署类型的说明来配置数据层。

Elasticsearch 服务或 Elastic Cloud Enterprise

edit

Elastic Cloud 部署的默认配置包括一个用于热数据和内容数据的共享层。此层是必需的,无法删除。

在创建部署时添加温暖、寒冷或冷冻层:

  1. 创建部署页面,点击高级设置
  2. 点击+ 添加容量以添加任何数据层。
  3. 点击页面底部的创建部署以保存您的更改。
Elastic Cloud’s deployment Advanced configuration page

为现有部署添加数据层:

  1. 登录到Elastic Cloud控制台
  2. 部署页面,选择您的部署。
  3. 在您的部署菜单中,选择编辑
  4. 点击+ 添加容量以添加任何数据层。
  5. 点击页面底部的保存以保存您的更改。

要移除一个数据层,请参考禁用数据层

自托管部署

edit

对于自管理的部署,每个节点的数据角色elasticsearch.yml中配置。例如,集群中性能最高的节点可能同时分配给热层和内容层:

node.roles: ["data_hot", "data_content"]

我们建议您在冻结层使用专用节点

数据层索引分配

edit

设置 index.routing.allocation.include._tier_preference 决定了索引应该分配到哪个层级。

当您创建索引时,默认情况下 Elasticsearch 会将 _tier_preference 设置为 data_content,以自动将索引分片分配到内容层。

当 Elasticsearch 作为 数据流 的一部分创建索引时,默认情况下 Elasticsearch 会将 _tier_preference 设置为 data_hot,以自动将索引分片分配到热层。

在创建索引时,您可以通过以下两种方式之一显式设置首选值来覆盖默认设置:

您可以在索引创建后通过更新索引设置来覆盖此设置,以达到您偏好的值。

此设置还接受按优先顺序排列的多个层级。这可以防止在首选层级中没有可用节点时,索引保持未分配状态。例如,当索引生命周期管理将索引迁移到冷阶段时,它会将索引的 _tier_preference 设置为 data_cold,data_warm,data_hot

要移除数据层偏好设置,请将 _tier_preference 值设置为 null。这允许索引分配到集群中的任何数据节点。将 _tier_preference 设置为 null 不会恢复默认值。请注意,在托管索引的情况下,迁移 操作可能会在其位置应用新值。

确定当前数据层偏好

edit

您可以通过轮询其设置来检查现有索引的数据层偏好,查看index.routing.allocation.include._tier_preference

GET /my-index-000001/_settings?filter_path=*.settings.index.routing.allocation.include._tier_preference

故障排除

edit

设置 _tier_preference 可能与其他分配设置冲突。这种冲突可能会阻止分片分配。当集群尚未完全迁移到数据层时,可能会发生冲突。

此设置不会取消分配当前已分配的分片,但可能会阻止它从当前位置迁移到其指定的数据层。要进行故障排除,请调用集群分配解释 API并指定可疑的有问题的分片。

自动数据层迁移

edit

ILM 自动使用 迁移 操作将托管索引通过可用的数据层进行过渡。默认情况下,此操作会自动注入到每个阶段中。您可以通过指定 "enabled": false 来明确禁用自动迁移,例如,如果您正在使用 分配 操作手动指定分配规则。