一、ES集群规划与调优
### --- ES集群规划:我们需要多大规模的集群
~~~ # 需要从以下两个方面考虑:
~~~ 当前的数据量有多大?数据增长情况如何?
~~~ 你的机器配置如何?cpu、多大内存、多大硬盘容量?
~~~ # 推算的依据:
~~~ Elasticsearch JVM heap 最大可以设置32G 。
~~~ 30G heap 大概能处理的数据量 10 T。
~~~ 如果内存很大如128G,可在一台机器上运行多个ES节点实例。
~~~ 备注:集群规划满足当前数据规模+适量增长规模即可,后续可按需扩展。
### --- 两类应用场景:
~~~ # A. 用于构建业务搜索功能模块,且多是垂直领域的搜索。数据量级几千万到数十亿级别。
~~~ 一般2-4台机器的规模。
~~~ # B.用于大规模数据的实时OLAP(联机处理分析),
~~~ 经典的如ELK Stack,数据规模可能达到千亿或更多。几十到上百节点的规模。
二、集群中的节点角色如何分配
### --- 节点角色:
~~~ Master node.master: true 节点可以作为主节点 DataNode node.data: true
~~~ 默认是数据节点Coordinate node 协调节点,
~~~ 一个节点只作为接收请求、转发请求到其他节点、汇总各个节点返回数据等功能的节点,
~~~ 就叫协调节点,如果仅担任协调节点,将上两个配置设为false。
~~~ 说明:一个节点可以充当一个或多个角色,
### --- 默认三个角色都有节点角色如何分配:
~~~ A. 小规模集群,不需严格区分。
~~~ B. 中大规模集群(十个以上节点),应考虑单独的角色充当。
~~~ 特别并发查询量大,查询的合并量大,可以增加独立的协调节点。
~~~ 角色分开的好处是分工分开,不互影响。如不会因协调角色负载过高而影响数据节点的能力。
三、索引应该设置多少个分片
### --- 索引应该设置多少个分片
~~~ 说明:分片数指定后不可变,除非重建索引。
### --- 分片设置的可参考原则:
~~~ ElasticSearch推荐的最大JVM堆空间是30~32G,
~~~ 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算. 在开始阶段,
~~~ 一个好的方案是根据你的节点数量按照1.5~3倍的原则来创建分片.
~~~ 例如,如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个。
~~~ 当性能下降时,增加节点,ES会平衡分片的放置。
~~~ 对于基于日期的索引需求, 并且对索引数据的搜索场景非常少. 也许这些索引量将达到成百上千,
~~~ 但每个索引的数据量只有1GB甚至更小. 对于这种类似场景, 建议只需要为索引分配1个分片。
~~~ 如日志管理就是一个日期的索引需求,日期索引会很多,但每个索引存放的日志数据量就很少。
### --- 分片应该设置几个副本
~~~ 副本设置基本原则: 为保证高可用,副本数设置为2即可。
~~~ 要求集群至少要有3个节点,来分开存放主分片、副本。
~~~ 如发现并发量大时,查询性能会下降,可增加副本数,来提升并发查询能力。
~~~ 注意:新增副本时主节点会自动协调,然后拷贝数据到新增的副本节点,副本数是可以随时调整的!
PUT /my_index/_settings
{
"number_of_replicas": 1
}