Elasticsearch分片数量最佳经验值

tamoadmin 热门赛事 2024-04-25 31 0

Elasticsearch分片数量最佳经验值

在Elasticsearch中,分片数量的选择是一个重要的优化步骤,它可以影响到系统的性能和扩展性。以下是根据搜索结果得出的一些最佳实践经验:

1.分片数量与硬件资源的关系

批量请求和分片数量:在进行大量数据索引时,应使用批量请求来提高性能。发送端应使用多worker/多线程向Elasticsearch发送数据,以充分利用集群的资源。分片数量会影响这些资源的使用,因此需要根据硬件配置进行调整。

refresh_interval和分片数量:默认的index.refresh_interval是1s,这可能导致频繁的分段flush,增加了合并压力。在加载大量数据时,可以将此值设置为1来禁用refresh,加快索引速度。但是,这会使索引处于危险之中,因此应在完成初始加载后恢复默认设置。

filesystemcache和分片数量:文件系统缓存将用于缓冲I/O操作,应确保将运行Elasticsearch的计算机的内存至少减少到文件系统缓存的一半。这意味着分片数量不宜过高,以免消耗过多的内存资源。

硬件设备选择:搜索一般是I/O密集的,这时需要为filesystemcache分配更多的内存,使用SSD硬盘,以及使用localstorage(不要使用NFS、SMB等远程文件系统)。如果搜索是CPU密集的,则需要购买更好的CPU。

Elasticsearch分片数量最佳经验值

2.分片数量与性能的影响

分片与资源消耗:每个分片本质上都是一个Lucene索引,会消耗文件句柄、内存和CPU资源。如果分片过多,会导致这些资源的竞争加剧,影响系统的性能。

分片与查询效率:包含Elasticsearch的搜索评分和排序策略,都是基于分片做的统计。如果基于多个分片,每个分片都有很少的数据,会导致文档相关性较差,从而影响查询效率。

分片与均衡性:分片过多会导致创建分片的速度变慢,且容易导致大量写入请求堆积在内存,从而压垮集群。此外,单个分片的大小过大会影响Elasticsearch在重新平衡数据时可以移动分片的速度。

3.最佳实践经验

控制分片大小:为了保证系统的均衡性,应控制每个分片的占用硬盘空间,不超过es最大jvm的堆空间设定,一般是不超过32G。

考虑节点数量:一般建议将分片数控制在节点数的1.5到3倍之间,以充分利用集群资源。

适当设置副本数:在平衡业务场景对数据可靠性的要求及不同副本数对存储成本的开销两个因素之后,可以选择使用一主一从的副本策略。单Index的平均分配数为3,集群的总分片数下降到3w~个。

预创建Index:为了减小对集群的压力,并考虑到集群的持续扩展能力和可靠性,可以采用预创建方式提前创建分片,并把按Index的创建时间均匀打散到每周的每一天。

综上所述,Elasticsearch的分片数量最佳经验值取决于多种因素,包括硬件配置、性能需求以及业务增长预测。在实际应用中,应根据具体情况调整分片数量,以达到最佳的性能和扩展性。