一尘不染

何时启动其他Elasticsearch节点?

elasticsearch

我正在尝试用Elasticsearch替换Solr设置。这是一个新的设置,尚未投入生产,因此我有很大的空间来摆弄各种东西并使它们运转良好。

我有非常大量的数据。我正在索引一些实时数据并将其保留7天(通过使用_ttl字段)。我不在索引中存储任何数据(并禁用了_source字段)。我预计我的指数将稳定在
200亿 行左右。我将把这些数据放入2-3个命名索引中。到目前为止,多达数十亿行的搜索性能是完全可以接受的,但是索引性能是一个问题。

我对ES如何在内部使用分片感​​到困惑。
我创建了两个ES节点,每个节点都有一个单独的数据目录,每个节点有8个索引和1个副本。当查看集群状态时,每个节点仅看到一个碎片和一个副本。每个节点都不会在内部运行多个索引吗?(检查磁盘上的存储位置表明,肯定只有一个Lucene索引存在)。
-已解决,因为我的索引设置未从配置中正确提取。现在,使用API​​创建索引并指定分片和副本的数量已产生了我期望看到的结果。

另外,我尝试运行同一ES节点的多个副本(来自相同配置),它识别出已经在运行一个副本,并创建了自己的工作区。
这些新的节点实例似乎在磁盘上也只有一个索引。
-现在每个节点实际上都在使用多个索引,具有多个索引的单个节点足以限制整个系统,因此这不是问题。

何时启动其他Elasticsearch节点,以获得最佳索引性能?我是否应该有多个节点,每个节点都运行1个索引1副本,或者更少的节点具有大量索引?为了使单个节点完成更多工作,我的配置中缺少什么吗?

另外:是否有任何度量标准可以知道仅HTTP节点何时过载?现在,我只有一个节点专用于HTTP,但是除了CPU使用率之外,我无法确定它是否运行正常。什么时候启动其他HTTP节点并拆分索引软件以指向各个节点?


阅读 245

收藏
2020-06-22

共1个答案

一尘不染

首先让我们澄清一下术语:

  • Node :一个正在运行的Elasticsearch实例(一个Java进程)。通常,每个节点都在自己的计算机上运行。
  • 群集 :一个或多个具有相同群集名称的节点。
  • 索引 :或多或少像数据库。
  • 类型 :或多或少像数据库表。
  • 碎片 :实际上是一个lucene索引。每个索引由一个或多个分片组成。分片可以是主分片(或简称为分片)或 副本

创建索引时,可以指定分片数和每个分片的副本数。默认值为5个主分片,每个分片1个副本。分片会自动均匀地分布在集群中。副本分片将永远不会在相关主分片所在的同一机器上分配。

您在集群状态中看到的内容很奇怪,建议您使用get settings
API
来检查索引设置。看起来您仅配置了一个分片,但是如果您有多个索引,无论如何您应该会看到更多的分片。如果您需要更多帮助,则可以发布从elasticsearch获得的输出。

实际使用多少个分片和副本取决于您的数据,访问它们的方式以及可用节点/服务器的数量。最佳做法是稍微分片以便在您向集群中添加更多节点时重新分配分片,因为一旦创建索引,就无法(现在)更改分片的数量。否则,如果您愿意对数据进行完整的索引编制,则可以随时更改分片的数量。

由于每个分片实际上都是Lucene实例,因此每个附加分片都需要付费。每台计算机可以拥有的最大分片数量实际上取决于可用的硬件以及您的数据。很高兴知道,每个分片具有100个索引,或者一个分片具有100个索引,实际上是相同的,因为在两种情况下,您都有100个Lucene实例。

当然,在查询时,如果您要查询由100个分片组成的单个Elasticsearch索引,elasticsearch将需要全部查询它们才能获得正确的结果(除非您为文档使用特定的路由,然后仅查询特定的分片)。这将产生性能成本。

您可以使用“ 群集节点信息”
API
轻松检查群集和节点的状态,通过它可以检查很多有用的信息,这是您需要的所有信息,以便知道节点是否运行顺畅。更简单的是,有两个插件可以通过一个不错的用户界面(无论如何内部都使用Elasticsearch API)检查这些信息:paramedicbigdesk

2020-06-22