赞
踩
由于master节点只保存了cluster级别和indices级别的元数据,但没有shard在哪个node上的元数据,需要走一遍allocation流程确定每个shard分配到哪个节点,allocation使用allocator和deciders进行节点选择,allocator负责整个流程会找出哪些节点可以分配,deciders通过多个decider判断该节点能否分配,很多分片分配的配置都是通过decider实现的,例如primary和replica不能分配在同一个节点、磁盘容量大于85%不能分配。
需要对返回结果的node按照replica数据的落后程度进行排序,优先数据较全的。最匹配的节点的排序方式是
无需回放操作(replica SeqNo(从retention lease获取) > primary SeqNo或者replica sync flush id = primary https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-synced-flush.html) 。顺便说一句,Elasticsearch 跟踪每个分片的索引活动。 5 分钟内未收到任何索引操作的分片将自动标记为非活动状态。 这为 Elasticsearch 提供了减少分片占用资源并执行一种特殊类型的刷新(称为synced flush)的机会。 同步刷新执行正常刷新,然后将生成的唯一标记(sync_id)添加到所有分片。
由于sync id标记是在没有正在进行的索引操作时添加的,因此它可以用作检查两个分片的 lucene 索引是否相同的快速方法。 这种快速sync ID 比较(如果存在)在恢复或重新启动期间使用,以跳过该过程的第一个也是成本最高的阶段。 在这种情况下,不需要复制段文件,并且可以立即开始恢复的事务日志重播阶段。 请注意,由于sync ID 标记与刷新一起应用,因此事务日志很可能为空,从而进一步加快恢复速度。
retenton lease的seq No较大(意味着需要回放的操作少)
Checksum相同的文件大小较大的
使用decider对最匹配的节点进行决策,如果throttle则返回,如果是yes或者no则返回yes
如果最匹配的节点都没有数据则replica shard进行延迟分配
reroute完成后构建集群新的状态。最后master将新的集群状态广播下去
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。