所有您需要了解的关于Elasticsearch 5.0:索引管理

我们看到两种主要的Elasticsearch索引使用模式 - 全局索引和滚动索引。多年来,Elasticsearch增加了一些功能,可以极大地改善这些模式的工作体验。Elasticsearch 5引入了几项新功能,进一步构建了这些功能,并产生了一个非常好的索引管理故事。

在这篇博客文章中,我们将讨论这两种模式,并展示新的Elasticsearch 5功能(即Shrink和Rollover API)如何能够极大地帮助您有效地维护您的生产索引。

请务必查看本系列中的上一篇文章,如果您尚未阅读(请点击链接),您需要了解Elasticsearch 5.0:Search。在本系列之后的博客文章中,我们将讨论更多主题,如数据摄取策略等。

全局索引

Elasticsearch用于搜索时最常见的一种模式是索引到全局索引中。通常这是驻留在别处的数据的副本,并且索引到Elasticsearch进行搜索和执行聚合操作。然后通过分片和复制将此索引扩展到群集中的多个节点,以适应成规模的搜索请求。

这个的目的通常是针对该索引的搜索速度进行优化,并且索引到其中通常是偶然的。但有一个例外 - 全局索引通常会定期重新创建或批量更新,以保持最新的真实来源,或者映射更改是必要的。一旦需要这样的索引操作,您可能想要扩大索引以使其更快完成,并且有更多的节点参与索引过程 - 有时比通常可用于搜索的节点更多。

分片有助于减轻索引和搜索速度问题。分片就是我们所说的将一个索引分解成许多小块,由Elasticsearch作为一个大型索引进行管理。由于每个节点每秒可处理一定数量的写入请求,因此假定分片分散功能(这是默认值),分割索引可允许多个节点参与群集索引。所有这一切,在保持尺寸不太大或太小的碎片的同时,对于优化搜索性能非常重要(我通常建议在磁盘上安装一百万个文档碎片和最大5-10GB的大小)。

尽管有一个问题 - 创建索引后无法更改碎片的数量。直到现在(仍然还是这样)。

新的Index Shrink特性允许将具有X碎片的索引“收缩”为具有较少碎片的索引。请求的主要碎片数量必须是原始索引中碎片数量的一个因素。例如,一个具有8个主碎片的索引可以缩小成4, 2个或1个主碎片,或者15个主碎片的索引可以缩小成5, 3或1。

虽然这本身不是“重新利用”,但它是解决实际需求的一个很好的功能。现在,您可以创建包含许多分片的索引,以支持密集的数据提取,然后将其缩小为较小的分片以节省资源并优化搜索速度。收缩索引不会重新索引,它只会重新链接底层索引段,因此这是一种高效的操作。但是,它确实需要索引在收缩之前是只读的 - 并且大多数巨型索引可以确实允许这样做。

值得一提的是,相对较新的Reindex API在这种使用模式中非常有用 - 无论何时重建索引操作不是由于数据更改,而是索引映射更改,您都可以利用Elasticsearch从旧索引发出重新索引一个新的映射定义了新的映射。在这种情况下,不需要复杂的并行ETL过程,因为旧的索引已经包含了所有需要的数据。

滚动索引

现在更常见的模式是“滚动索引”情况。通常是以时间索引为索引的时间序列数据,例如名称类似logstash-2016.11.16的日常索引- 并且您将主要通过日志查看此模式,这是当今ELK堆栈的主要用法。在这种模式下,新的索引正在不断创建,并且在一段时间之后,它们不再被写入。通常,这些索引会在一段时间后从集群中删除,复制到备份位置,然后删除或删除,如果数据不够重要,永远不会保留。

时间序列数据案例通常涉及24/7高吞吐率 - 认为活动系统的日志或“物联网”案例。这意味着您希望在任何给定时间优化写入活动索引,这意味着您的节点可以支持的碎片数量很多。超分割将帮助您实时获取更多数据,并避免由于大量索引请求而导致Elasticsearch在索引编制方面推迟或落后。

但是这种方法有几个问题:

  1. 过去未被写入但被搜索的索引将被过度分割,这意味着搜索的搜索性能下降,因为分片数量越少越好,并且分片大小最可能小于高效的搜索。
  2. 并非所有索引都是相同的。虽然Elasticsearch对待它们都是一样的,但世界可能不会。在正常运营期间,有些日子可能比其他日子忙,产生两倍的事件,而可能有几周的停机时间会导致实际上为空的索引。
  3. 当然,加班时间你在任何一天收录的文件数量将增加,这将导致臃肿的索引和碎片 - 再次损害搜索性能。目前,将指标从日常变为每小时是一个严格的过程,需要在太多地方进行太多改变。

正如你所猜测的,#1可以通过Shrink API轻松修复。正如我们刚刚看到的,一旦索引停止写入,您可以将其缩小为具有较少数量的碎片,从而针对搜索和聚合进行优化。此外,因为在滚动索引用例中,这个索引永远不会被再次写入,所以您可以强制合并它(但要确保不会以分片太大为结束!),压缩并将其标记为只读。这将确保对这些索引的高效搜索。

Index Rollover API解决了其余的问题。这是一个很好的新功能,它利用别名根据索引中的文档数量或基于第一个索引文档的时间为索引提供配额。可以设置索引的别名,例如,一旦索引达到配额,别名将切换到索引到新索引,同时仍启用对此索引和所有先前索引的搜索。这对于在滚动索引用例中也可以平衡索引大小有很长的路要走。

Curator长期以来一直是一个管理索引的好工具,特别是在滚动指标情景中。通过将Curator与索引模板结合使用,Rollup API现在可以为您提供滚动索引的非常好的索引管理体验。

您可以在这里的官方博客文章中了解关于这个新API的更多信息。Shrink和rollover API现在允许使用多个分片在索引过程中充分利用硬件资源,然后将索引缩减为单个分片(或几个分片),以便进行高效的存储和搜索。

本文的版权归 Noah____________________ 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

Oracle数据库12cR2版本的SQL计划管理

文章翻译自ORACLE WHITE PAPER SQL Plan Management with Oracle Database 12c Release 2 概...

36310
来自专栏Java工程师日常干货

从程序员的角度深入理解MySQL前言数据库基本原理探索MySQL索引背后的原理SQL优化神器:explain

作为一名工作了4年的程序猿,今天我将站在程序员的角度以MySQL为例探索数据库的奥秘!

943
来自专栏美团技术团队

数据库运维必读的10个问题

本文中的问题精选自上期【你问我答】——数据库专题中读者的提问。【你问我答】是由美团点评技术团队推出的线上问答服务,你在工作学习中遇到的各种技术问题,都可以通过我...

38411
来自专栏张善友的专栏

SQLite vs MySQL vs PostgreSQL:关系型数据库比较

自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛。面对如此之多的关系型数据...

3065
来自专栏CDA数据分析师

【干货】大数据量下,58同城mysql实践!

WOT(World Of Tech)2015,互联网运维与开发者大会将在北京举行,会上58同城将分享《大数据量下,58同城mysql实战》的主题,干货分享抢先看...

2839
来自专栏Java程序员的架构之路

从大神的角度深入理解MySQL,值得收藏~

在此我向大家推荐一个架构学习交流群。程序员面试社区:236283328 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分...

1271
来自专栏性能与架构

Kafka 流数据 SQL 引擎 -- KSQL

KSQL 是什么? KSQL 是一个 Kafka 的 SQL 引擎,可以让我们在流数据上持续执行 SQL 查询 例如,有一个用户点击流的topic,和一个可持续...

4546
来自专栏软件开发

Word基础

1、页面设置 默认大小A4,长宽比0.618 页面布局 ? 2、字体设置 选择要设置的字体->右键->字体 ? 3、选择性粘贴 ? 4、段落设置 选择文字->右...

3519
来自专栏PHP在线

WordPress的可拓展性初探(一)

作者:西瓜玩偶(racnil070512 at hotmail dot com) WordPress是一个时下非常流行的网络信息发布平台,它的特性之一便是极强...

3059
来自专栏杨建荣的学习笔记

通过top命令抓取cpu高消耗的sql (44天)

top命令在linux环境维护中很实用,虽然功能缺失不够sar那么全面。今天和大家分享一个通过top命令来抓取性能sql的案例。 通过top命令抓取了如下的信息...

3996

扫码关注云+社区

领取腾讯云代金券