es集群节点之间分片个数不均匀问题

集群级分片分配

rebalance 用于将集群中的分片进行均衡,保持各个节点的分片数量大致相等,当集群扩容或缩容,掉一个节点的时候,这过程会自动完成。这可能发生在初始恢复、副本分配、重新平衡或添加或删除节点时。

场景介绍

3个节点的es 集群,node1,node2,node3。node3由于故障,重启了节点。重启后node3上的一个副部分片由于某种原因没有恢复上线,集群的健康之是yellow。此时用es 的/_cat/allocation 命令查看发现,node3上的分片个数远少于其他两个节点。

问题分析

node3节点故障下线的时候,原本分布在node3上的分片会逐步迁移到node1,node2上。node3启动后,还没迁移出去的分片会在node3上恢复。由于之前有部分分片已经迁移出去,就导致了node3的分片数量少于其他节点。但是es不是有rebalance机制吗?node3恢复之后,在rebalance机制的均衡下个节点的分片数应该达到均衡才对呀?
其实rebalance的均衡也是要在满足一定的条件后才能触发的,这是由如下配置控制的

cluster.routing.allocation.allow_rebalance
Specify when shard rebalancing is allowed:
always - Always allow rebalancing.
indices_primaries_active - Only when all primaries in the cluster are allocated.
indices_all_active - (default) Only when all shards (primaries and replicas) in the cluster are allocated.
  • always - 始终允许重新平衡。
  • indices_primaries_active - 仅当集群中的所有主节点都已分配时。
  • indices_all_active -(默认)仅当集群中的所有分片(主分片和副本)都被分配时。

node3上线后有一个分片故障无法上线,不符合indices_all_active的条件,所以es此时没有触发rebalance,节点间的分片也不会均衡。

一般重启单个节点后,原本在这个节点上的分片会逐步迁移到其他节点上,这时候就会出现分片不均衡的情况,重启完后会发现有分片正在迁移的动作.

btc   4   r   RELOCATING  32366191  33gb 172.16.0.182 CPzHbZ8 -> 172.16.0.184 CkY3li-hTjyxL1PLSm6XYA CkY3li-
etc   1   p   RELOCATING  14730896  5.7gb 172.16.0.185 H-au10H -> 172.16.0.183 J5bMIh3xRZCI8sf6ERNiPw J5bMIh3

问题解决

将故障分片所在索引的副本数设置为0,这样es的分片就都上线了,rebalance就会触发。等分片达到均衡后再将索引的副本数设置回来。
如何设置副本数可以参考ES的基本操作:    https://blog.csdn.net/qqqq0199181/article/details/81269798

原文链接:https://blog.csdn.net/qqqq0199181/article/details/102604256

https://www.elastic.co/guide/en/elasticsearch/reference/5.6/shards-allocation.html#_shard_allocation_settings

猜你喜欢

转载自blog.csdn.net/iris_csdn/article/details/117443537