Elasticsearch 的一个分片对应 Lucene 的一个索引,Elasticsearch 的核心就是将这些 Lucene 索引分布式化,提供索引和检索服务。可见,如何设计分片是至关重要的。
一个索引到底该设置几个主分片呢?由于单个分片只能处于 Elasticsearch 集群中的单个节点,分片太少,影响索引入库的并发度,以及以后的横向扩展性,如果分片过大会引发查询、更新、迁移、恢复、平衡等性能问题。
3.1 主分片数量确定
我们建议综合考虑分片物理大小因素、查询压力因素、索引压力因素,来设计分片数量。
3.1.1 物理大小因素
建议单个分片的物理大小不大于 50GB,之所以这样建议,基于如下几个因素:
更快的恢复速度
集群故障后,更小的分片相对大分片来讲,更容易使集群恢复到 Green 状态。
merge 过程中需要的资源更少
Lucene 的 segment merge 过程需要两倍的磁盘空间,如果分片过大,势必需要更大的临时磁盘空间用于 merge,同时,分片过大 merge 过程持续时间更长,将对 IO 产生持续的压力。
集群分片分布更容易均衡
分片过大,Elasticsearch 内部的平衡机制需要更多的时间。
提高 upd