ES优化参考【分片、路由】
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES优化参考【分片、路由】相关的知识,希望对你有一定的参考价值。
参考技术A 官方建议: Min(32GB,机器内存大小/2)。磁盘需求最优比例=1:50 256g=12800G=13T
8G内存对应8*50=400G磁盘
总体内存大小没有具体要求,但肯定是内容越大,检索性能越好。
除了JVM之外的预留内存要充足,否则也会经常OOM。
集群节点数:<=3,建议:所有节点的master:true, data:true。既是主节点也是路由节点。
集群节点数:>3, 根据业务场景需要,建议:逐步独立出Master节点和协调/路由节点。
ES 集群中的数据节点负责对数据进行增、删、改、查和聚合等操作,所以对 CPU、内存和 I/O 的消耗很大。
在搭建 ES 集群时,我们应该对 ES 集群中的节点进行角色划分和隔离。
候选主节点:node.master= true node. data= false
数据节点:node.master= false node. data= true
网络异常可能会导致集群中节点划分出多个区域,区域发现没有 Master 节点的时候,会选举出了自己区域内 Maste 节点 r,导致一个集群被分裂为多个集群,使集群之间的数据无法同步,我们称这种现象为脑裂。
为了防止脑裂,我们需要在 Master 节点的配置文件中添加如下参数:
discovery.zen.minimum_master_nodes=(master_eligible_nodes /2)+1 //默认值为 1
其中 master_eligible_nodes 为 Master 集群中的节点数。这样做可以避免脑裂的现象都出现,最大限度地提升集群的高可用性。
只要不少于 discovery.zen.minimum_master_nodes 个候选节点存活,选举工作就可以顺利进行,即保持至少一半节点存活。
建议根据数据量衡量。经验值:建议每个分片大小不要超过30GB。
单个索引分片数=数据量÷30g
每个节点建议的单个索引分片数<3:因为分片分布在同一个服务器上。请求开始竞争相同的硬件资源时, 性能便会逐步下降。
如果该索引分片数过多可以考虑业务需求是否需要分割索引。周表,天表,月表等划分。
注意:除非reindex操作,分片数是不可以修改的。
在Elasticsearch中,每个查询在每个分片的单个线程中执行。然而,可以并行处理多个分片,并可以在相同分片上执行多个查询和聚合。
【小分片的利弊】这意味着,在不涉及高速缓存时,最小查询延迟将取决于数据、查询的类型、分片的大小。查询大量小分片将使得每个分片的处理速度更快,但是随着更多的任务需要按顺序排队和处理,它不一定要比查询较小数量的更大的分片更快。如果有多个并发查询,则有很多小碎片也会降低查询吞吐量。
除非你对系统的健壮性有异常高的要求,比如:银行系统。可以考虑2个副本以上。否则,1个副本足够。
注意:副本数是可以通过配置随时修改的。
根据业务需要选择合适的类型,有利于节省空间和提升精度。Fetch方法只返回要查询的字段,对每组数据做校验,可以避免使用默认mapping的字段类型,增加写入速度、节省空间。
尽量避免使用nested或 parent/child,能不用就不用;nested query慢, parent/child query 更慢,比nested query慢上百倍;因此能在mapping设计阶段搞定的(大宽表设计或采用比较smart的数据结构),就不要用父子关系的mapping。如果一定要使用nested fields,保证nested fields字段不能过多,目前ES默认限制是50。
index.mapping.nested_fields.limit :50
ES 配置说明
配置文件:elasticsearch.yaml。
ES 的配置信息有很多种,大部分配置都可以通过 elasticsearch.yaml 和接口的方式进行。
下面我们列出一些比较重要的配置信息:
以上是关于ES优化参考【分片、路由】的主要内容,如果未能解决你的问题,请参考以下文章