在16核心XEON类,128GB内存RHEL服务器我想部署elasticsearch。
什么是更好的性能明智?
谢谢!
选项4:在同一台机器上运行多个厚度/节点。
这就像选项2和3一样,除非更简单,因为没有虚拟化或集装箱化。 它全部在主机上运行。
这里有一些注意事项和build议(从这里 )。
- 每个节点实例的最大堆大小应该<32Gb。 这是因为32Gb以上的堆大小实际上会适得其反,因为JVM会停止压缩指针。
- 将50%的内存留给Lucene的文件系统caching。
- 虽然您可能有足够的RAM在同一台计算机上运行多个实例,但请testing是否有足够的CPU /处理能力。
- 您还需要检查以确保多节点实例不争夺磁盘空间或磁盘IO。 我们的build议是给机器上的所有节点一个raid0,下面有大量的磁盘,或者每个节点有一个专用的磁盘。
- 降低处理器设置相应。 每个ES节点检测机器上可用的内核数量(不知道其他节点存在)。 在同一台机器上有多个节点的情况下,每个节点都可以认为它具有对机器上所有内核的专用访问权限(这可能会导致默认线程池大小的问题)。 所以你需要明确地指定通过处理器设置可用的内核数量,以便最终不会超出线程池的位置。 例如,对于每个节点,粗略的
# of cores / # of nodes可以很好地开始configuration。- 请记住,多个节点还意味着networking连接,操作系统文件描述符,mmap文件限制也将在节点之间共享,因此您需要确保有足够的带宽,并且将限制设置得足够高以容纳节点。
- 在机器上拥有的节点越多,如果单个服务器出现故障,节点就会一次失败。 另外,你也要确保你不会在同一台机器上得到一个碎片的所有副本。 您可以通过将
settingcluster.routing.allocation.same_shard.host为true来防止此问题。 详情请看这里 。为了确保集群的稳定性,每个专用的主节点实例应该在自己的机器上(当然可以是一个小得多的机器,例如4Gb的RAM) – 请记住,机器上的多个节点意味着更多的pipe理复杂性例如跟踪不同的端口,configuration文件等)。 pipe理多个实例的configuration的一个好方法是为每个实例创build一个单独的elasticsearch.yml文件,例如。 您可以传入
-Des.config参数以在启动时为每个实例指定yml文件:$ bin/elasticsearch -Des.config=$ES_HOME/config/elasticsearch.1.yml $ bin/elasticsearch -Des.config=$ES_HOME/config/elasticsearch.2.yml- 每个yml将指向相同的群集名称。
- 指定有意义的节点名称会很有帮助
- 为每个节点使用明确的端口号,以便它们是可预测的(例如,
http.port和transport.tcp.port)。- 每个节点都应该有自己的
path.*目录(例如path.data,path.log,path.work,path.plugins),这样节点不会因为数据,插件,日志等文件夹的位置而出现冲突。
正如在另一个答案中提到的,您不希望每个实例使用多于32GB的数据,而且您也不希望将所有RAM用于Java堆。 相反,最好把50%的文件留给操作系统进行文件系统caching。
Elastic的这篇博客文章中,为什么会出现这样的情况?
2和3是最好的select,因为文档build议为每个节点分配32GB的最大内存。