|
@@ -2,130 +2,17 @@
|
|
|
== Index Shard Allocation
|
|
|
|
|
|
This module provides per-index settings to control the allocation of shards to
|
|
|
-nodes.
|
|
|
+nodes:
|
|
|
|
|
|
-[float]
|
|
|
-[[shard-allocation-filtering]]
|
|
|
-=== Shard Allocation Filtering
|
|
|
+* <<shard-allocation-filtering,Shard allocation filtering>>: Controlling which shards are allocated to which nodes.
|
|
|
+* <<delayed-allocation,Delayed allocation>>: Delaying allocation of unassigned shards caused by a node leaving.
|
|
|
+* <<allocation-total-shards,Total shards per node>>: A hard limit on the number of shards from the same index per node.
|
|
|
|
|
|
-Shard allocation filtering allows you to specify which nodes are allowed
|
|
|
-to host the shards of a particular index.
|
|
|
+include::allocation/filtering.asciidoc[]
|
|
|
|
|
|
-NOTE: The per-index shard allocation filters explained below work in
|
|
|
-conjunction with the cluster-wide allocation filters explained in
|
|
|
-<<shards-allocation>>.
|
|
|
+include::allocation/delayed.asciidoc[]
|
|
|
|
|
|
-It is possible to assign arbitrary metadata attributes to each node at
|
|
|
-startup. For instance, nodes could be assigned a `rack` and a `group`
|
|
|
-attribute as follows:
|
|
|
-
|
|
|
-[source,sh]
|
|
|
-------------------------
|
|
|
-bin/elasticsearch --node.rack rack1 --node.size big <1>
|
|
|
-------------------------
|
|
|
-<1> These attribute settings can also be specfied in the `elasticsearch.yml` config file.
|
|
|
-
|
|
|
-These metadata attributes can be used with the
|
|
|
-`index.routing.allocation.*` settings to allocate an index to a particular
|
|
|
-group of nodes. For instance, we can move the index `test` to either `big` or
|
|
|
-`medium` nodes as follows:
|
|
|
-
|
|
|
-[source,json]
|
|
|
-------------------------
|
|
|
-PUT test/_settings
|
|
|
-{
|
|
|
- "index.routing.allocation.include.size": "big,medium"
|
|
|
-}
|
|
|
-------------------------
|
|
|
-// AUTOSENSE
|
|
|
-
|
|
|
-Alternatively, we can move the index `test` away from the `small` nodes with
|
|
|
-an `exclude` rule:
|
|
|
-
|
|
|
-[source,json]
|
|
|
-------------------------
|
|
|
-PUT test/_settings
|
|
|
-{
|
|
|
- "index.routing.allocation.exclude.size": "small"
|
|
|
-}
|
|
|
-------------------------
|
|
|
-// AUTOSENSE
|
|
|
-
|
|
|
-Multiple rules can be specified, in which case all conditions must be
|
|
|
-satisfied. For instance, we could move the index `test` to `big` nodes in
|
|
|
-`rack1` with the following:
|
|
|
-
|
|
|
-[source,json]
|
|
|
-------------------------
|
|
|
-PUT test/_settings
|
|
|
-{
|
|
|
- "index.routing.allocation.include.size": "big",
|
|
|
- "index.routing.allocation.include.rack": "rack1"
|
|
|
-}
|
|
|
-------------------------
|
|
|
-// AUTOSENSE
|
|
|
-
|
|
|
-NOTE: If some conditions cannot be satisfied then shards will not be moved.
|
|
|
-
|
|
|
-The following settings are _dynamic_, allowing live indices to be moved from
|
|
|
-one set of nodes to another:
|
|
|
-
|
|
|
-`index.routing.allocation.include.{attribute}`::
|
|
|
-
|
|
|
- Assign the index to a node whose `{attribute}` has at least one of the
|
|
|
- comma-separated values.
|
|
|
-
|
|
|
-`index.routing.allocation.require.{attribute}`::
|
|
|
-
|
|
|
- Assign the index to a node whose `{attribute}` has _all_ of the
|
|
|
- comma-separated values.
|
|
|
-
|
|
|
-`index.routing.allocation.exclude.{attribute}`::
|
|
|
-
|
|
|
- Assign the index to a node whose `{attribute}` has _none_ of the
|
|
|
- comma-separated values.
|
|
|
-
|
|
|
-These special attributes are also supported:
|
|
|
-
|
|
|
-[horizontal]
|
|
|
-`_name`:: Match nodes by node name
|
|
|
-`_ip`:: Match nodes by IP address (the IP address associated with the hostname)
|
|
|
-`_host`:: Match nodes by hostname
|
|
|
-
|
|
|
-All attribute values can be specified with wildcards, eg:
|
|
|
-
|
|
|
-[source,json]
|
|
|
-------------------------
|
|
|
-PUT test/_settings
|
|
|
-{
|
|
|
- "index.routing.allocation.include._ip": "192.168.2.*"
|
|
|
-}
|
|
|
-------------------------
|
|
|
-// AUTOSENSE
|
|
|
-
|
|
|
-[float]
|
|
|
-=== Total Shards Per Node
|
|
|
-
|
|
|
-The cluster-level shard allocator tries to spread the shards of a single index
|
|
|
-across as many nodes as possible. However, depending on how many shards and
|
|
|
-indices you have, and how big they are, it may not always be possible to spread
|
|
|
-shards evenly.
|
|
|
-
|
|
|
-The following _dynamic_ setting allows you to specify a hard limit on the total
|
|
|
-number of shards from a single index allowed per node:
|
|
|
-
|
|
|
-`index.routing.allocation.total_shards_per_node`::
|
|
|
-
|
|
|
- The maximum number of shards (replicas and primaries) that will be
|
|
|
- allocated to a single node. Defaults to unbounded.
|
|
|
-
|
|
|
-[WARNING]
|
|
|
-=======================================
|
|
|
-This setting imposes a hard limit which can result in some shards not
|
|
|
-being allocated.
|
|
|
-
|
|
|
-Use with caution.
|
|
|
-=======================================
|
|
|
+include::allocation/total_shards.asciidoc[]
|
|
|
|
|
|
|
|
|
|