【问题标题】:When do you start additional Elasticsearch nodes? [closed]什么时候启动额外的 Elasticsearch 节点? [关闭]
【发布时间】:2012-09-06 17:29:02
【问题描述】:

我正在尝试用 Elasticsearch 替换 Solr 设置。这是一个新的设置,还没有投入生产,所以我有很多空间来摆弄东西并让它们正常工作。

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

我对 ES 如何在内部使用分片感​​到有些困惑。我创建了两个 ES 节点,每个节点都有一个单独的数据目录,每个都有 8 个索引和 1 个副本。当我查看集群状态时,我只看到每个节点的一个分片和一个副本。每个节点不是保持多个索引在内部运行吗? (检查磁盘存储位置显示肯定只有一个 Lucene 索引存在)。 -- 已解决,因为我的索引设置未从配置中正确获取。使用 API 创建索引并指定分片和副本的数量现在已经完全符合我的预期。

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

您什么时候启动额外的 Elasticsearch 节点,以获得最大的索引性能?我应该有很多节点,每个节点都运行 1 个索引 1 个副本,还是更少的节点运行大量索引?为了让单个节点做更多的工作,我的配置是否缺少一些东西?

另外:是否有任何指标可以知道仅 HTTP 节点何时过载?现在我只有一个节点专门用于 HTTP,但除了 CPU 使用率之外,我无法判断它是否正常。何时启动额外的 HTTP 节点并拆分索引软件以指向各个节点?

【问题讨论】:

  • 请注意:您可以假设我有足够数量的系统来为我需要运行的许多 ES 实例提供足够的 CPU、内存和磁盘 IO。
  • 嗨@gdm,既然您已经启动并运行了多个分片和一个副本的集群,您是否发布了有关您的ES 性能的任何统计数据?我真的很想看看你的节点规格和不同类型查询的响应时间。我有十亿个文档,但你的文档要大得多,而且很有趣:)谢谢。

标签: elasticsearch sharding bigdata


【解决方案1】:

让我们先澄清一下术语:

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

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

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

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

每个额外的分片都会产生成本,因为每个分片实际上都是一个 Lucene 实例。每台机器可以拥有的最大分片数量实际上取决于可用的硬件以及您的数据。很高兴知道每个分片有 100 个索引或一个索引有 100 个分片实际上是相同的,因为在这两种情况下您都会有 100 个 lucene 实例。

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

您可以使用Cluster Nodes Info API 轻松检查集群和节点的状态,通过它您可以检查很多有用的信息,这些都是您了解节点是否顺利运行所需的一切。更简单的是,有几个插件可以通过一个漂亮的用户界面(无论如何在内部使用 elasticsearch API)检查这些信息:paramedicbigdesk

【讨论】:

  • 事实证明,我在配置文件中的 index.number_of_shards 和 number_of_replicas 设置要么被忽略,要么被稍后为分析器和过滤器定义的 'index:' 覆盖。我删除了我的索引并使用指定 number_of_shards 的索引 API 重新创建了它,现在一切看起来就像我在集群状态中所期望的那样。
  • 是的,谢谢——但我将把这个问题留待更长时间,看看我是否能得到更多关于分片布局和数量的反馈,因为这非常缓慢测试和重新测试。
  • 看看elasticsearch的创建者Shay最近给出的this演示,我想它会很有用。无论如何,每个集群都是不同的,并且直接回答“我需要多少分片?”这个问题。很难。祝你好运!
  • @javanna 只是为了让你们知道,以太坊中的其他人真的很感激这个问答!谢谢!
  • 除了上面提到的 ElastiSearch 工具,我还可以推荐:mobz.github.com/elasticsearch-head。仍在发展,但在我的案例中经过了生产测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2010-10-17
  • 1970-01-01
  • 2013-12-21
  • 2018-05-02
  • 2012-09-05
  • 1970-01-01
相关资源
最近更新 更多