内存
如果有一种资源是最先被耗尽的,它可能是内存。排序和聚合都很耗内存,所以有足够的堆空间来应付它们是很重要的。即使堆空间是比较小的时候, 也能为操作系统文件缓存提供额外的内存。因为 Lucene 使用的许多数据结构是基于磁盘的格式,Elasticsearch 利用操作系统缓存能产生很大效果。
CPU
大多数 Elasticsearch 部署往往对 CPU 要求不高。
如果你要在更快的 CPUs 和更多的核心之间选择,选择更多的核心更好。多个内核提供的额外并发远胜过稍微快一点点的时钟频率。
硬盘
基于 SSD 的节点,查询和索引性能都有提升。如果你负担得起,SSD 是一个好的选择。
I/O 调度程序
- 旋转介质使用 cfq(完全公平队列)
- SSD 使用 deadline 或者 noop
网络
快速可靠的网络显然对分布式系统的性能是很重要的。 低延时能帮助确保节点间能容易的通讯,大带宽能帮助分片移动和恢复。现代数据中心网络(1 GbE, 10 GbE)对绝大多数集群都是足够的。
总则
获取真正的高配机器在今天是可能的:成百 GB 的 RAM 和几十个 CPU 核心。 反之,在云平台上串联起成千的小虚拟机也是可能的,例如 EC2。哪种方式是最好的?
通常,选择中配或者高配机器更好。避免使用低配机器, 因为你不会希望去管理拥有上千个节点的集群,而且在这些低配机器上运行 Elasticsearch 的开销也是显著的。
与此同时,避免使用真正的高配机器。它们通常会导致资源使用不均衡(例如,所有的内存都被使用,但 CPU 却没有)而且在单机上运行多个节点时,会增加逻辑复杂度。