Class BalancedShardsAllocator

All Implemented Interfaces:

public class BalancedShardsAllocator extends Object implements ShardsAllocator
The BalancedShardsAllocator re-balances the nodes allocations within an cluster based on a BalancedShardsAllocator.WeightFunction. The clusters balance is defined by four parameters which can be set in the cluster update API that allows changes in real-time:
  • cluster.routing.allocation.balance.shard - The shard balance defines the weight factor for shards allocated on a RoutingNode
  • cluster.routing.allocation.balance.index - The index balance defines a factor to the number of ShardRoutings per index allocated on a specific node
  • cluster.routing.allocation.balance.threshold - A threshold to set the minimal optimization value of operations that should be performed

These parameters are combined in a BalancedShardsAllocator.WeightFunction that allows calculation of node weights which are used to re-balance shards based on global as well as per-index factors.

  • Field Details


      public static final Setting<Float> INDEX_BALANCE_FACTOR_SETTING

      public static final Setting<Float> SHARD_BALANCE_FACTOR_SETTING

      public static final Setting<Float> THRESHOLD_SETTING
  • Constructor Details

    • BalancedShardsAllocator

      public BalancedShardsAllocator(Settings settings)
    • BalancedShardsAllocator

      @Inject public BalancedShardsAllocator(Settings settings, ClusterSettings clusterSettings)
  • Method Details

    • allocate

      public void allocate(RoutingAllocation allocation)
      Description copied from interface: ShardsAllocator
      Allocates shards to nodes in the cluster. An implementation of this method should: - assign unassigned shards - relocate shards that cannot stay on a node anymore - relocate shards to find a good shard balance in the cluster
      Specified by:
      allocate in interface ShardsAllocator
      allocation - current node allocation
    • decideShardAllocation

      public ShardAllocationDecision decideShardAllocation(ShardRouting shard, RoutingAllocation allocation)
      Description copied from interface: ShardsAllocator
      Returns the decision for where a shard should reside in the cluster. If the shard is unassigned, then the AllocateUnassignedDecision will be non-null. If the shard is not in the unassigned state, then the MoveDecision will be non-null. This method is primarily used by the cluster allocation explain API to provide detailed explanations for the allocation of a single shard. Implementations of the ShardsAllocator.allocate(RoutingAllocation) method may use the results of this method implementation to decide on allocating shards in the routing table to the cluster. If an implementation of this interface does not support explaining decisions for a single shard through the cluster explain API, then this method should throw a UnsupportedOperationException.
      Specified by:
      decideShardAllocation in interface ShardsAllocator
    • getThreshold

      public float getThreshold()
      Returns the currently configured delta threshold
    • getIndexBalance

      public float getIndexBalance()
      Returns the index related weight factor.
    • getShardBalance

      public float getShardBalance()
      Returns the shard related weight factor.