二、资源配置依据
ES特性:
(1)内存
ES非常消耗内存 —— 不是JVM用到的内存, 而是机器的物理内存, 因为ES在运行期间对JVM Heap(堆内存)的需求较小,
实践建议: 数据量过亿, 建议单台服务器的内存至少要有64GB
(2)CPU
ES集群对CPU的要求比较低, 一般来说2~8个CPU Core即可满足集群的需求
(3)磁盘
1)在磁盘的使用上, 推荐使用SSD(固态硬盘), 而不是(HDD)机械硬盘.
2)此外, 使用RAID 0也是一种提升磁盘读写速度的高效方式, 无论是HDD, 或者SSD都支持RAID 0
3)最后, 要避免使用与网络相关的存储模式 (network-attached storage, NAS), 比如基于网络的分布式存储模式
(4)网络
不低于千兆网卡,避免一个集群横跨多个数据中心,
1)ES集群是一种p2p模式的分布式系统架构, 并不是master-slave主从分布式系统.
2)ES集群中, 所有节点都是平等的, 任意两个节点之间的通信都很频繁, 如果部署在异地多机房, 就会导致各个节点之间频繁跨地域通信, 通信时延会非常高, 甚至有可能造成集群运行频繁出现异常.
3)与NAS存储模式一样, 跨地域多机房部署一个ES集群带来的效益要远远低于维护这类集群所付出的额外成本.
(4)集群节点
实践建议: 小规模、高配置, 但无需超高配置, 会造成资源的浪费.
(5)JVM配置
1) 如果通过Java API操作ES服务, 那么编译Java程序的JVM版本最好与ES服务器所运行的JVM版本一致
2)JVM配置官方建议不易修改
ES服务中, JVM Heap堆内存的大小一般不超过服务器物理内存的一半, 以1/4为宜, 且最多不宜超过32GB.
(6)数据量问题
(1) ES的常见使用场景有:
1) 构建业务搜索功能模块, 且多是垂直领域的搜索: 以网站或APP为例, 数据规模相对比较大, 通常是百万级到亿级;
2) 进行数据分析: 需要消耗更大的内存, 但支持的数据规模要小很多, 通常是十万级到千万级;
3) 用于大规模数据的