mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-04-25 07:37:19 -04:00
Add docs for desired balance allocator (#92109)
These docs cover the new allocator and the settings controlling the heuristics for combining disk usage and write load into the overall weight.
This commit is contained in:
parent
337b65ccea
commit
c9ae9123fe
1 changed files with 82 additions and 36 deletions
|
@ -57,17 +57,18 @@ one of the active allocation ids in the cluster state.
|
|||
[[shards-rebalancing-settings]]
|
||||
==== Shard rebalancing settings
|
||||
|
||||
A cluster is _balanced_ when it has an equal number of shards on each node
|
||||
without having a concentration of shards from any index on any node. {es} runs
|
||||
an automatic process called _rebalancing_ which moves shards between the nodes
|
||||
in your cluster to improve its balance. Rebalancing obeys all other shard
|
||||
allocation rules such as <<cluster-shard-allocation-filtering,allocation
|
||||
filtering>> and <<forced-awareness,forced awareness>> which may prevent it from
|
||||
completely balancing the cluster. In that case, rebalancing strives to achieve
|
||||
the most balanced cluster possible within the rules you have configured. If you
|
||||
are using <<data-tiers,data tiers>> then {es} automatically applies allocation
|
||||
filtering rules to place each shard within the appropriate tier. These rules
|
||||
mean that the balancer works independently within each tier.
|
||||
A cluster is _balanced_ when it has an equal number of shards on each node, with
|
||||
all nodes needing equal resources, without having a concentration of shards from
|
||||
any index on any node. {es} runs an automatic process called _rebalancing_ which
|
||||
moves shards between the nodes in your cluster to improve its balance.
|
||||
Rebalancing obeys all other shard allocation rules such as
|
||||
<<cluster-shard-allocation-filtering,allocation filtering>> and
|
||||
<<forced-awareness,forced awareness>> which may prevent it from completely
|
||||
balancing the cluster. In that case, rebalancing strives to achieve the most
|
||||
balanced cluster possible within the rules you have configured. If you are using
|
||||
<<data-tiers,data tiers>> then {es} automatically applies allocation filtering
|
||||
rules to place each shard within the appropriate tier. These rules mean that the
|
||||
balancer works independently within each tier.
|
||||
|
||||
You can use the following settings to control the rebalancing of shards across
|
||||
the cluster:
|
||||
|
@ -84,7 +85,6 @@ Enable or disable rebalancing for specific kinds of shards:
|
|||
* `none` - No shard balancing of any kind are allowed for any indices.
|
||||
--
|
||||
|
||||
|
||||
`cluster.routing.allocation.allow_rebalance`::
|
||||
+
|
||||
--
|
||||
|
@ -99,12 +99,31 @@ Specify when shard rebalancing is allowed:
|
|||
|
||||
`cluster.routing.allocation.cluster_concurrent_rebalance`::
|
||||
(<<dynamic-cluster-setting,Dynamic>>)
|
||||
Allow to control how many concurrent shard rebalances are
|
||||
allowed cluster wide. Defaults to `2`. Note that this setting
|
||||
only controls the number of concurrent shard relocations due
|
||||
to imbalances in the cluster. This setting does not limit shard
|
||||
relocations due to <<cluster-shard-allocation-filtering,allocation
|
||||
filtering>> or <<forced-awareness,forced awareness>>.
|
||||
Defines the number of concurrent shard rebalances are allowed across the whole
|
||||
cluster. Defaults to `2`. Note that this setting only controls the number of
|
||||
concurrent shard relocations due to imbalances in the cluster. This setting does
|
||||
not limit shard relocations due to
|
||||
<<cluster-shard-allocation-filtering,allocation filtering>> or
|
||||
<<forced-awareness,forced awareness>>.
|
||||
|
||||
`cluster.routing.allocation.type`::
|
||||
+
|
||||
--
|
||||
Selects the algorithm used for computing the cluster balance. Defaults to
|
||||
`desired_balance` which selects the _desired balance allocator_. This allocator
|
||||
runs a background task which computes the desired balance of shards in the
|
||||
cluster. Once this background task completes, {es} moves shards to their
|
||||
desired locations.
|
||||
|
||||
May also be set to `balanced` to select the legacy _balanced allocator_. This
|
||||
allocator was the default allocator in versions of {es} before 8.6.0. It runs
|
||||
in the foreground, preventing the master from doing other work in parallel. It
|
||||
works by selecting a small number of shard movements which immediately improve
|
||||
the balance of the cluster, and when those shard movements complete it runs
|
||||
again and selects another few shards to move. Since this allocator makes its
|
||||
decisions based only on the current state of the cluster, it will sometimes
|
||||
move a shard several times while balancing the cluster.
|
||||
--
|
||||
|
||||
[[shards-rebalancing-heuristics]]
|
||||
==== Shard balancing heuristics settings
|
||||
|
@ -114,28 +133,55 @@ of shards, and then moving shards between nodes to reduce the weight of the
|
|||
heavier nodes and increase the weight of the lighter ones. The cluster is
|
||||
balanced when there is no possible shard movement that can bring the weight of
|
||||
any node closer to the weight of any other node by more than a configurable
|
||||
threshold. The following settings allow you to control the details of these
|
||||
calculations.
|
||||
threshold.
|
||||
|
||||
The weight of a node depends on the number of shards it holds and on the total
|
||||
estimated resource usage of those shards expressed in terms of the size of the
|
||||
shard on disk and the number of threads needed to support write traffic to the
|
||||
shard. {es} estimates the resource usage of shards belonging to data streams
|
||||
when they are created by a rollover. The estimated disk size of the new shard
|
||||
is the mean size of the other shards in the data stream. The estimated write
|
||||
load of the new shard is a weighted average of the actual write loads of recent
|
||||
shards in the data stream. Shards that do not belong to the write index of a
|
||||
data stream have an estimated write load of zero.
|
||||
|
||||
The following settings control how {es} combines these values into an overall
|
||||
measure of each node's weight.
|
||||
|
||||
`cluster.routing.allocation.balance.shard`::
|
||||
(<<dynamic-cluster-setting,Dynamic>>)
|
||||
Defines the weight factor for the total number of shards allocated on a node
|
||||
(float). Defaults to `0.45f`. Raising this raises the tendency to
|
||||
equalize the number of shards across all nodes in the cluster.
|
||||
(float, <<dynamic-cluster-setting,Dynamic>>)
|
||||
Defines the weight factor for the total number of shards allocated to each node.
|
||||
Defaults to `0.45f`. Raising this value increases the tendency of {es} to
|
||||
equalize the total number of shards across nodes ahead of the other balancing
|
||||
variables.
|
||||
|
||||
`cluster.routing.allocation.balance.index`::
|
||||
(<<dynamic-cluster-setting,Dynamic>>)
|
||||
Defines the weight factor for the number of shards per index allocated
|
||||
on a specific node (float). Defaults to `0.55f`. Raising this raises the
|
||||
tendency to equalize the number of shards per index across all nodes in
|
||||
the cluster.
|
||||
(float, <<dynamic-cluster-setting,Dynamic>>)
|
||||
Defines the weight factor for the number of shards per index allocated to each
|
||||
node. Defaults to `0.55f`. Raising this value increases the tendency of {es} to
|
||||
equalize the number of shards of each index across nodes ahead of the other
|
||||
balancing variables.
|
||||
|
||||
`cluster.routing.allocation.balance.disk_usage`::
|
||||
(float, <<dynamic-cluster-setting,Dynamic>>)
|
||||
Defines the weight factor for balancing shards according to their predicted disk
|
||||
size in bytes. Defaults to `2e-11f`. Raising this value increases the tendency
|
||||
of {es} to equalize the total disk usage across nodes ahead of the other
|
||||
balancing variables.
|
||||
|
||||
`cluster.routing.allocation.balance.write_load`::
|
||||
(float, <<dynamic-cluster-setting,Dynamic>>)
|
||||
Defines the weight factor for the write load of each shard, in terms of the
|
||||
estimated number of indexing threads needed by the shard. Defaults to `10.0f`.
|
||||
Raising this value increases the tendency of {es} to equalize the total write
|
||||
load across nodes ahead of the other balancing variables.
|
||||
|
||||
`cluster.routing.allocation.balance.threshold`::
|
||||
(<<dynamic-cluster-setting,Dynamic>>)
|
||||
Minimal optimization value of operations that should be performed (non
|
||||
negative float). Defaults to `1.0f`. Raising this will cause the cluster
|
||||
to be less aggressive about optimizing the shard balance.
|
||||
|
||||
(float, <<dynamic-cluster-setting,Dynamic>>)
|
||||
The minimum improvement in weight which triggers a rebalancing shard movement.
|
||||
Defaults to `1.0f`. Raising this value will cause {es} to stop rebalancing
|
||||
shards sooner, leaving the cluster in a more unbalanced state.
|
||||
|
||||
NOTE: Regardless of the result of the balancing algorithm, rebalancing might
|
||||
not be allowed due to forced awareness or allocation filtering.
|
||||
not be allowed due to allocation rules such as forced awareness and allocation
|
||||
filtering.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue