是否需要保证ES(ElasticSearch)主分片在集群节点中均匀分布

417 阅读2分钟

预备知识

主分片(primary shard):写操作只在主分片进行,如新建、索引、删除操作。负责对操作进行校验和将数据同步到副分片。

副分片(replica shard):负责查询操作(也可在主分片进行)

现象

查看集群分片分布发现,所有分片的数量在集群各节点之间是分配均匀的,但是主副分片在集群上的分配并不是均匀地。如下图所示。

节点11主3主4主
节点22副3副0副
节点30主1副2主4副

集群配置,5个主分片,每个主分片有一个副本分片

结论

可以考虑手动设置分片位置,会使得节点负载更均衡。

因为主分片相对于副分片还负责数据的插入、更新、索引等操作,所以,如果一个更新请求操作起来负载很重,那么此时主分片相对于副本分片会消耗更多的资源,从而引起主分片所在节点相对于其他副本分片所在的节点负载更重。其他情况下,拥有主分片较多的节点相对于较少的节点区别不大。

手动移动分片位置后,如下图所示

节点分片分布
节点10副3主1主
节点22副3副4主
节点30主1副2主4副

其他有趣的讨论

目前ES的集群自动分配策略只是保证所有节点的总数在集群内均匀分布,而不区分主副节点。

关于官方为什么不支持主节点,副节点自动均衡分布的问题,官方成员回复做主分片自动均衡不太容易实现,目前github有相关的featrue,参考相关讨论链接

参考文档

www.elastic.co/guide/en/el…