我有一台专用于ES 2.2.0的计算机。它运行在Windows Server 2012 R2上,并具有128GB内存。关于ES,我计划在此计算机上的群集中有两个节点。根据elasticsearch.yml中的ES建议:
确保将ES_HEAP_SIZE环境变量设置为大约一半的内存
ES_HEAP_SIZE
我要设定 ES_HEAP_SIZE = 50g
ES_HEAP_SIZE = 50g
这个值合适吗?
更新
我做了进一步的搜索并找到了此信息
https://discuss.elastic.co/t/can-i-run-multiple-elaticsearch-nodes-on-the- same-machine/67
看来“ Max heap size for each node instance should be < 32Gb”
Max heap size for each node instance should be < 32Gb
有人可以对此发表评论吗?
最佳做法是,不要给 Elasticsearch分配超过32GB的RAM(为了安全起见,不要分配31GB),其余的留给文件系统缓存和操作系统使用。由于Lucene不会使用太多堆,它将使用剩余的大部分资源来管理其段。
此32GB限制的原因是,仅当您分配的RAM不超过32GB时,Java才可以使用压缩的指针,如果有更多的RAM,则Java将恢复使用普通指针,并且即使您不使用它,CPU内存带宽性能也会降低有更多的记忆。
因此,由于您有一台拥有大量内存的大型计算机,因此您可以在其上运行两个节点,并为每个节点分配31GB的空间,这将为文件系统缓存留出66GB的空间,Lucene会很乐意吞噬它来做事。
现在,只需知道如果您在一台计算机上运行群集,并且该计算机发生故障,则群集将无法正常运行,客户端应用程序也将如此。但是,如果您有两台这样的大型计算机),请确保进行设置cluster.routing.allocation.same_shard.host: true,以确保主和副本碎片不会落在同一主机上,因为您将无法从高可用性中受益。
cluster.routing.allocation.same_shard.host: true
更多信息: