美文网首页
ElasticSearch Allocation&Rebalan

ElasticSearch Allocation&Rebalan

作者: 白奕新 | 来源:发表于2019-11-04 07:36 被阅读0次

    0、allocator&decider

    allocation与rebalance都由allocator与decider来实现。

    (1)allocator:尝试寻找最优的节点来分配分片

    • 对于新建的索引。allocator按照分片数量升序排序节点列表,注意,是按照分片数量,而不是分片的大小 。然后decider依次遍历节点列表,根据分配规则判断是否要把分片分配到该节点。
    • 对于已有的索引。当节点重启时,触发对于已有分片的分配。对于主分片,allocator只允许把主分片分配到拥有分片完整数据的节点上,即只有完整数据的副分片才能升为主节点;对于副分片,allocator优先分配到拥有分片数据(即使数据不是最新的)的节点上。


      allocator.png

    (2)decider:负责判断并决定是否要进行要分配

    allocation与rebalance的决策权由下列有控制的decider决定,只有全返回true,才可allocation/rebalance(如果没控制,默认返回true。例如SameShardAllocationDecider不控制rebalance,则返回true)


    decider.png

    1、allocation

    (1)important parameter

    parameter 含义 other
    cluster.routing.allocation.enable 是否开启allocation all(default);primaries:只允许主分片;new_primaries:只允许新生成的主分片;none:不允许

    (2)allocation的细节

    • shard allocation发生在:
      (1)创建/删除一个Index
      (2)加入/离开一个Node
      (3)手动执行reroute命令
      (4)修改replication数量
      (5)集群重启
    • 当把allocation关闭的时候,新建的index的shard不会被创建!
    • 手动reroute不受allocation关闭影响。
    • 节点重启时恢复上面的primary shard不受allocation的配置是否开启的影响,但是replica shared不会被重新allocation上来。
    • allocation关闭以后,可以使用reroute指令手动显示进行allocation,不受影响。

    2、rebalance

    (1)important parameter

    参数 含义 其他
    cluster.routing.rebalance.enable 是否可以rebalance all(default),primaries,replicas,none。es2.x+才有的配置,所以1.x如果要禁止rebalance需要把allocation关闭。
    cluster.routing.allocation.allow_rebalance 什么情况下才可以触发rebalance always:总是可以;indices_primaries_active:所有主分片都已被分配好;indices_all_active:所有的分片都已被分配好(default)
    cluster.routing.allocation.cluster_concurrent_rebalance 多少shard可以同时进行rebalance 默认2

    (2)detail

    • 通过阈值判定,将在不同的node上的shard转移来平衡集群中每台node的shard数。发生在节点增减、修改replica的配置的时候。
    • 关闭allocation以后,rebalance过程也会被禁止。


      源码.png

    3、关系

    allocation与rebalance的关系,在于rebalance需要依赖allocation,所以allocation被关闭以后rebalance也就被禁止了。

    4、other

    (1)balance

    新shard的生成以及rebalance都需要依照这3个参数进行计算,以达到cluster balance

    parameter 参数 其他
    cluster.routing.allocation.balance.shard allocate每个node上shard总数时计算的权重,提高这个值以后会使node上的shard总数基本趋于一致 默认0.45f。调低
    cluster.routing.allocation.balance.index allocate每个index在一个node上shard数时计算的权重,提高这个值会使单个index的shard在集群节点中均衡分布 默认0.55f。调高
    cluster.routing.allocation.balance.threshold 根据上面2个参数计算得出集群内部的分布情况,大于这个阈值就会触发迁移 默认1.0f,调高这个参数会使rebalance不那么频繁

    (2)disk-based shard allocation

    parameter 参数 其他
    cluster.routing.allocation.disk.threshold_enabled 是否开启磁盘allocation探测 默认true
    cluster.routing.allocation.disk.watermark.low 低水位线阈值 默认85%。在低版本的时候会禁止所有shard被allocation到这台节点上;在5.x的版本上会禁止新shard被allocation到这台;在6.x+的版本会禁止除新primary shard以后的shard被allocation到这台
    cluster.routing.allocation.disk.watermark.high 高水位线阈值 默认值90%。大于这个阈值以后,上面的shard就会被迁移到其他node上。
    cluster.routing.allocation.disk.watermark.flood_stage 设置index为只读的阈值 默认值95%。磁盘空间大于这个阈值以后,index就会被设置read-only。esv6.x+

    相关文章

      网友评论

          本文标题:ElasticSearch Allocation&Rebalan

          本文链接:https://www.haomeiwen.com/subject/tnrrbctx.html