本章主要介绍生产环境中ES集群其硬件配置需求,需要根据我们的需求来决定部署的机器的内存,cpu,磁盘,jvm等等的资源配置。这里简单介绍一下
一、内存
ES对于内存来说,占用量很大,他不仅是占用JVM的内存,还有机器的内存。
因为ES底层是Lucene,Lucene是基于磁盘文件来读写索引数据的,倒排索引正排索引,Lucene会大量使用 os cache,频繁访问磁盘数据再内存中进行缓存,所以如果内存大,其性能便会高,因为os cache能缓存更多的数据,而不用去对磁盘进行操作,磁盘操作减少性能便提高。
如果生成环境中,es上千万数据搜索需要10s来完成,那么大概率是内存不够用了,需要分配更多的内存才行,进行了大量的磁盘读写操作。
关于内存相关知识,这里只是简单介绍一下,后面再细说。
一般来说,集群有64G即可,当然对于小内存机器,也可以增加机器的数量来提高集群内存容量,当然这是根据所要操作的数据量来决定的,如果需要上亿,几十亿,几百亿的数据,其每台机器内存最少需要64G才可以,即集群需要上百G内存。
二、CPU
cpu对ES影响不大,一般双核到八核都可以
三、磁盘
磁盘影响就比较大了,因为es都是对磁盘进行大量读写操作的,如果磁盘的读写性能高,其速度就会快一点,一般来说都是机械硬盘,速度相差不大,如果上SSD那么,速度会有大的提升。提升速度的几种方式:
1)使用SSD做磁盘
2)如果使用了SSD做磁盘,需要修改es的I/O scheduler
配置,这个scheduler
默认为cfg
,是继续机械硬盘的,所以需要修改适配SSD的配置,具体可以查一下
3)配置RAID 0磁盘组合,类似于分布式,将数据存放到不同的多个磁盘上,条带式存储。
四、网络
es是分布式系统所以网络快速且高效也是比较必要的。
还有一点需要注意的是,如果异地机房部署同一个集群,可能会造成网络通信延迟,要避免这种情况
五、JVM
一般来说,JVM的配置不要修改,因为ES基于JVM非常复杂,其默认配置已经很高效了,如果改变可能会变的更慢
六、容量规划
最重要的来了,我们基于上面说的,总结一下,如果对于一个10亿数据,需要配怎样的集群呢?
假设每个数据占1k,10亿即100G,再加上ES的一些数据信息,150G差不多
那么我们大概需要5台 64G 8核的机器,具有300G内存,一般会给JVM heap分配150G,去掉系统占用50G,还剩100G左右。
那么我们的os cache可以达到100G,但是数据信息有150G,所以有三分之一的概率会等等秒级的搜索读写,而三分之二为毫秒级读写。
所以,总结来说,在做集群容量规划时,需要根据数据量大小来添加减少机器的内存,主要还是内存~