ElasticSearch分片有两种最佳实践:
就我而言,它们有些争议。更具体地说,假设索引大小为2 TB,并且有10个节点。我应该配置多少个碎片:
选项1:10个分片,每个分片200GB
或
选项2:40个分片,每个分片50GB
哪个是查询延迟性能更好的选择?
答案 0 :(得分:2)
无论哪种“最佳”通常在理论上都是最佳的,实际上,您需要进行一些权衡。大多数时候,您肯定会希望每个主分区至少有一个副本(容错),因此每个节点至少有2个分区(除非您有5个主分区,每个分区400GB)。为了达到最佳效果,让我们踏踏实实...
您没有提到每个节点的堆容量,但是由于您不应该超过每个节点30.5GB的堆容量限制,因此您应该明显倾向于拥有最多约50GB数据的碎片。 50个分片@ 40GB也可以。
我不会尝试200GB的碎片,因为那可能太大了。我也不会尝试拥有1000个2GB的分片,因为分片会太多。
最终,这取决于您的用例和硬件。您的索引正在承受沉重的搜索负担,还是主要处理索引请求?您的集群需要处理多少个并发搜索/索引请求?最好的了解方法是对所有这些进行测试,但是如果没有更多信息,第二种选择显然比第一种更好。并且不要忘记,每个主分区可能也需要一个副本,这会使您的存储需求增加一倍(即每个节点400GB)
答案 1 :(得分:0)
添加到Val的答案:如果您想添加节点以获得更好的性能,则更多的分片可以使分片分布更加平滑。 10个节点上的10个分片不允许将分片分发到其他节点。 40个碎片将允许轻松扩展更多节点。
此外,如果磁盘空间变紧,较小的分片可能仍然允许Elasticsearch来回移动分片,因为它至少需要一个空间来再做一个分片。