ShardsAllocator
public class BalancedShardsAllocator extends AbstractComponent implements ShardsAllocator
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 ShardRouting
s per index allocated on a specific nodecluster.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.
Modifier and Type | Class | Description |
---|---|---|
static class |
BalancedShardsAllocator.Balancer |
|
static class |
BalancedShardsAllocator.WeightFunction |
This class is the primary weight function used to create balanced over nodes and shards in the cluster.
|
Modifier and Type | Field | Description |
---|---|---|
static Setting<java.lang.Float> |
INDEX_BALANCE_FACTOR_SETTING |
|
static Setting<java.lang.Float> |
SHARD_BALANCE_FACTOR_SETTING |
|
static Setting<java.lang.Float> |
THRESHOLD_SETTING |
deprecationLogger, logger, settings
Constructor | Description |
---|---|
BalancedShardsAllocator(Settings settings) |
|
BalancedShardsAllocator(Settings settings,
ClusterSettings clusterSettings) |
Modifier and Type | Method | Description |
---|---|---|
void |
allocate(RoutingAllocation allocation) |
Allocates shards to nodes in the cluster.
|
ShardAllocationDecision |
decideShardAllocation(ShardRouting shard,
RoutingAllocation allocation) |
Returns the decision for where a shard should reside in the cluster.
|
float |
getIndexBalance() |
Returns the index related weight factor.
|
float |
getShardBalance() |
Returns the shard related weight factor.
|
float |
getThreshold() |
Returns the currently configured delta threshold
|
logDeprecatedSetting, logRemovedSetting, nodeName
public static final Setting<java.lang.Float> INDEX_BALANCE_FACTOR_SETTING
public static final Setting<java.lang.Float> SHARD_BALANCE_FACTOR_SETTING
public static final Setting<java.lang.Float> THRESHOLD_SETTING
public BalancedShardsAllocator(Settings settings)
@Inject public BalancedShardsAllocator(Settings settings, ClusterSettings clusterSettings)
public void allocate(RoutingAllocation allocation)
ShardsAllocator
allocate
in interface ShardsAllocator
allocation
- current node allocationpublic ShardAllocationDecision decideShardAllocation(ShardRouting shard, RoutingAllocation allocation)
ShardsAllocator
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
.decideShardAllocation
in interface ShardsAllocator
public float getThreshold()
public float getIndexBalance()
public float getShardBalance()