2013-08-29 01:24:34 +02:00
|
|
|
[[index-modules-allocation]]
|
|
|
|
== Index Shard Allocation
|
|
|
|
|
2015-06-22 23:49:45 +02:00
|
|
|
This module provides per-index settings to control the allocation of shards to
|
|
|
|
nodes.
|
|
|
|
|
2013-08-29 01:24:34 +02:00
|
|
|
[float]
|
2013-09-30 15:32:00 -06:00
|
|
|
[[shard-allocation-filtering]]
|
2013-08-29 01:24:34 +02:00
|
|
|
=== Shard Allocation Filtering
|
|
|
|
|
2015-06-22 23:49:45 +02:00
|
|
|
Shard allocation filtering allows you to specify which nodes are allowed
|
|
|
|
to host the shards of a particular index.
|
|
|
|
|
|
|
|
NOTE: The per-index shard allocation filters explained below work in
|
|
|
|
conjunction with the cluster-wide allocation filters explained in
|
|
|
|
<<shards-allocation>>.
|
|
|
|
|
|
|
|
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
|
2013-08-29 01:24:34 +02:00
|
|
|
|
|
|
|
[float]
|
|
|
|
=== Total Shards Per Node
|
|
|
|
|
2015-06-22 23:49:45 +02:00
|
|
|
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.
|
|
|
|
=======================================
|
|
|
|
|
|
|
|
|
2013-08-16 12:20:56 -06:00
|
|
|
|