译自ES官方对于硬件设备的说明,原文见: [https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html]
当你准备把ElasticSearch部署到生产服务器上的时候,这里有一些建议可供你参考。没有什么硬性的规则,ElasticSearch可以在很广泛的应用场景中使用,也可以在各种机器上跑起来。但是这些建议是我们在生产集群上积累下来的,可以帮助你有一个好的开始。
内存
我们需要解决的第一个关于硬件资源的问题,就是内存。排序和统计都需要大量的内存支持,所以充足的堆空间是非常重要的。即使堆空间使用得比较少,其余的内存也可以提供给文件系统作为缓存。因为很多lucene的数据结构都是基于硬盘的形式,ElasticSearch需要利用操作系统的缓存来让它更有效率。
有64GB内存是我们最理想的状态,但是32GB或者16GB的内存也是很普遍使用的。小于8G的内存则达不到预期的目标(你需要很多很多机器),如果多于64GB的内存会产生一些问题,具体讨论可见此链接: https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html
CPUs
大多数ElasticSearch集群都对CPU压力不大。的确,处理器要处理的事情比其他资源少得多。你应该选择多核的处理器,一般集群会使用2至8核处理器。
当你需要在更高主频的处理器和更多核的处理器之间做选择时,请选择多核的处理器。多核处理器提供的并发能力远比更快的主频为你带来的好处大。
硬盘
对于所有的集群来说,硬盘都是非常重要的。对于需要经常做索引(译注:新增、更改)工作的集群来说,就加倍重要了,比如说负责索引日志数据工作的集群。硬盘是服务器中运作最慢的部件,这意味着写频繁的集群很容易在硬盘使用上饱和而产生瓶颈。如果你可以使用SSD,这将会有很好的效果。有SSD支撑的结点SSD在查询和索引的表现上都有很好的提升。如果你可以使用SSD,这将是一个很好的选择。
如果你使用其他介质的硬盘,请尽量选用最快的(高性能的服务器硬盘,如15k RPM 硬盘)。
使用RAID0是一个提升硬盘速度很有效的方法,无论是对SSD还是对其他硬盘来说都是这样。不需要使用镜像或者带奇偶校验的RAID,因为ElasticSearch已经提供了高可用的副本机制。
最后,避免使用网存储(NAS)。人们经常声称自己的网络存储方案比本地存储更快更安全,尽管有这些说法,我们从没见过不辜负炒作的网络存储。NAS一般会更慢,平均延迟时间更长而且变化幅度较大,而且是一个单点故障风险。
网络
一个高速可靠的网络对于分布式系统的表现来说是非常重要的。低延迟有助于结点间的沟通,而高带宽有助于分片的迁移和恢复。当前的数据中心级网络(1GbE,10GbE)对于绝大多数集群足矣。
避免集群跨越多个数据中心,即使数据中心在地理上相邻。特别要避免集群跨越较大地理距离。
ElasticSearch集群假设所有节点都是平等的——但这对于有一半节点远在另外一个数据中心的集群是不成立的。更大的延迟往往会加剧分布式系统的问题,使调试和解决变得困难。
与NAS的问题类似,每个人都声称数据中心之间的网络连接是健壮和低延迟的。这是对的——但灾难总会发生,你不可以指望它。根据我们的经验,管理跨数据中心的麻烦是不值得付出的成本。
综合考虑
当下你可能能获得这样强大的服务器组:上百个拥有GB级内存和十多个CPU内核的机器。相反的,也可能会是上千个小型的EC2云主机,哪一种是更好的选择?
一般来说,选择中等到大型的机器比较好。要避免小型机,因为你不希望管理上千个结点的集群,管理ES集群的成本在小型机上更明显。
同时,避免太过于大型的机器。他们可能会带来资源使用不平衡的问题(例如,所有的内存都使用光了,但是CPU还十分空闲),而如果你想在一台机器上运行多个结点又增加了复杂性。