2

我们在 14 个节点的集群中拥有嵌入 Elasticsearch 的 Java 应用程序。所有数据都驻留在中央数据库中,并在 elasticsearch 中进行索引以供查询。可以随时进行完整的重新索引。

系统查询量很大,写入量很小。文档的数量不会超过 300.000 个。每个文档的大小变化很大,从只有几个 id 到从例如几页的 word 文档中提取的文本。

我想确保在完全崩溃的情况下,一个或两个节点可供系统工作就足够了。

写入一致性应该不是问题,因为数据的主副本在数据库中,并且似乎 ES 能够通过使用最新版本来解决冲突数据(在我们的情况下应该没问题)

我的第一个想法是使用 1 个分片和 13 个副本。这自然会确保所有节点都可以访问所有数据。这也可以通过拥有 2 个分片 / 13 个副本来实现,因此为了确保所有数据都可用,副本的数量应该是节点的数量 - 1,而不取决于分片的数量(可以是任何)。

如果将节点数量的要求降低到“2 个节点应该随时up”,那么“x/节点数 - 2”的分片/副本分布就足够了。

所以,对于这个问题:

断言上述设置并且我的想法是正确的,具有 1 个分片/13 个副本的设置是否有意义,或者通过添加更多分片并运行例如 4 个分片/13 个副本设置是否有任何好处?

4

2 回答 2

0

经过大量研究并与 ES-guru 交谈;

只要分片足够小,建立这个集群的最有效方法确实是只有 1 个分片,有 13 个副本。我无法确定分片的阈值大小,因为这开始变得更糟。

于 2013-10-29T11:37:51.857 回答
0

如果索引很大......您将需要多个分片(如果您想要性能)。你真的需要13个副本吗?当您只放置 2 个副本时,ES 会管理它以保持这种状态,如果主体节点失败,ES 将创建一个新的回复。可能你也需要一个平衡器节点。

于 2015-09-11T19:11:42.450 回答