我们在14个节点的集群中具有嵌入式Elasticsearch的Java应用程序。所有数据都驻留在中央数据库中,并在elasticsearch中对其进行索引以进行查询。完整的索引编制可以随时进行。
系统的查询量很大,写入量很小。文件数量不会超过300.000。
每个文档的大小变化很大,从仅几个id到从例如几页的word文档中提取的文本。
我要确保在彻底崩溃的情况下,一个或两个节点可用于系统正常工作就足够了。
写入一致性应该不是问题,因为数据的主副本位于数据库中,并且看来ES能够通过使用最新版本来解决冲突数据(在我们的情况下应该可以)
我的第一个方法是使用1个分片和13个副本。这自然会确保所有节点都可以访问所有数据。这也可以通过具有2个分片/ 13个副本来实现,因此,为了确保所有数据均可用,此副本的数量应为节点数-1,而不取决于分片的数量(可以是任何数字)。
如果将节点数的要求减少到“任何时候都应增加2个节点”,那么分片/副本分布为“x /节点数-2”就足够了。
所以,对于这个问题:
声明上述设置,并且我的想法是正确的,具有1个分片/ 13个副本的设置是否有意义,或者通过添加更多分片并运行例如4个分片/ 13个副本的设置有什么好处?
最佳答案
经过大量研究并与ES-gurus交谈;
只要分片大小足够小,设置此群集的最有效方法实际上就是只有1个分片和13个副本。我无法查明分片的阈值大小,这会使它开始变得更糟。
关于elasticsearch - 分片/副本设置可实现高可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17206615/