为什么新创建的索引分片全部被分配到一个node节点上?
原因分析
新建索引分片被集中分配于一个node节点上可能有以下原因:
- 之前索引的分配导致某个节点上的shards数量过少,新建索引shards分配被balance.shard参数主导,为了平衡所有索引的全部分片,将shards集中分配在数量过少的节点上。
- 节点扩容,当新节点加入时新节点上的shards数量为0,此时集群会自动进行rebalance,但是rebalance需要时间,此时新建索引很容易会被balande.shard参数主导,平衡所有索引的分片,即都分配在新节点上看起来更加平衡。
涉及集群平衡性shard分配主要有两个配置参数:
cluster.routing.allocation.balance.index(默认值0.45f)
cluster.routing.allocation.balance.shard(默认值0.55f)
- “balance.index”:值越大,shard分配越倾向于使得每个索引的所有分片在节点上均匀分布,如a索引共有6个shards,数据节点有3个,该配置值倾向于让a索引2、2、2平衡分配
- “balance.shard”:值越大,shard分配越倾向于使得所有分片(所有索引的)在节点上平衡,如索引a有2个shards,索引b有4个shards,该配置倾向于所有6个分片进行2、2、2平衡分配。
- balance.index和balance.shard共同负责shards分配。
解决方案
当新建的索引分片被全部分配在一个node节点上时,有以下2种解决办法:
- 扩容集群需要新建索引时,按照如下所示设置对应参数。
"index.routing.allocation.total_shards_per_node": 2
即单个索引在每个节点上最多分配2个shards。其中,具体每个节点最多分配多少个shards,请根据集群数据节点个数、索引分片(主、副)的数量自行决定。
- 如果是shards集中分配在数量过少的节点上导致索引shards分配到同一个节点上,可以使用POST _cluster/reroute的move命令迁移分片到其他节点,rebalance模块会自动分配其他更合适的分片与其交换节点。根据具体业务使用场景可以适当调节balance.index,balance.shard配置。
开源搜索引擎咨询 所有常见问题
- 如何批量设置索引副本数为0?
- 为什么新创建的索引分片全部被分配到一个node节点上?
- Elasticsearch 7.x集群如何在index下创建type?
- 如何配置CSS集群双副本?
- json里设置了1个分片,是否可以通过修改配置,达到4分片,2副本的效果
- Elasticsearch集群分片过多会有哪些影响
- 在CSS的控制台界面怎么查看集群的分片数以及副本数?
- Elasticsearch集群在Kibana如何查询索引数据
- CSS是否支持停止集群
- Elasticsearch集群中某个客户端节点的node.roles为i表示该节点是ingest节点吗?
- Elasticsearch集群设置默认分页返回最大条数
- 如何更新Elasticsearch集群生命周期策略?
- 如何设置云搜索服务的慢查询日志的阈值?
- 如何清理索引数据?
- CSS集群如何清理缓存?
- 使用delete_by_query命令删除数据后,为什么磁盘使用率反而增加?
more