ES shard allocate 细节
ES shard allocate 细节
allocate过程
当集群的节点数达到gateway.recover_after_nodes配置时,master开始按照配置的优先级,创建时间(最新的索引优先),索引名(大的优先)的顺序,将索引的分片先主后副的分配到各个节点上。
分片一个主分片时,先统计各个节点上该分片保留的数据,将分片元数据中 allocationId与索引元数据中inSyncAllocationIds集合进行比较,得到allocationId存在于inSyncAllocationIds中分片所在的节点列表,然后再通过 allocation deciders 进行决策,确定分片应该分配到哪个节点。如果allocation deciders 返回NO,就需要手动进行处理。
分配一个副分片时,先经过allocation deciders,判断当前集群内的节点至少有一个节点可以分配该副本。然后统计各个节点上该分片保留的数据,将副本数据与主分片数据进行比较,找到数据完整度最佳匹配的副本,来重用数据。再经过allocation deciders挑选可以分配的节点。如果没有可重用数据,还需判断分片是否 delay unassigned。如果allocation deciders 返回NO,就需要手动进行处理。
- allocation deciders
allocation deciders决定一个shard能否分配到一个节点上,常见的decider如下:
SameShardAllocationDecider