2018-12-20 08:02:44 -05:00
|
|
|
[[modules-discovery-bootstrap-cluster]]
|
|
|
|
=== Bootstrapping a cluster
|
|
|
|
|
|
|
|
Starting an Elasticsearch cluster for the very first time requires the initial
|
|
|
|
set of <<master-node,master-eligible nodes>> to be explicitly defined on one or
|
|
|
|
more of the master-eligible nodes in the cluster. This is known as _cluster
|
|
|
|
bootstrapping_. This is only required the very first time the cluster starts
|
|
|
|
up: nodes that have already joined a cluster store this information in their
|
|
|
|
data folder and freshly-started nodes that are joining an existing cluster
|
2018-12-21 14:24:48 -05:00
|
|
|
obtain this information from the cluster's elected master.
|
2018-12-20 08:02:44 -05:00
|
|
|
|
2018-12-21 14:24:48 -05:00
|
|
|
The initial set of master-eligible nodes is defined in the
|
|
|
|
<<initial_master_nodes,`cluster.initial_master_nodes` setting>>. When you
|
|
|
|
start a master-eligible node, you can provide this setting on the command line
|
|
|
|
or in the `elasticsearch.yml` file. After the cluster has formed, this setting
|
|
|
|
is no longer required and is ignored. It need not be set
|
2018-12-20 08:02:44 -05:00
|
|
|
on master-ineligible nodes, nor on master-eligible nodes that are started to
|
|
|
|
join an existing cluster. Note that master-eligible nodes should use storage
|
|
|
|
that persists across restarts. If they do not, and
|
|
|
|
`cluster.initial_master_nodes` is set, and a full cluster restart occurs, then
|
|
|
|
another brand-new cluster will form and this may result in data loss.
|
|
|
|
|
|
|
|
It is technically sufficient to set `cluster.initial_master_nodes` on a single
|
|
|
|
master-eligible node in the cluster, and only to mention that single node in the
|
|
|
|
setting's value, but this provides no fault tolerance before the cluster has
|
|
|
|
fully formed. It is therefore better to bootstrap using at least three
|
|
|
|
master-eligible nodes, each with a `cluster.initial_master_nodes` setting
|
|
|
|
containing all three nodes.
|
|
|
|
|
|
|
|
WARNING: You must set `cluster.initial_master_nodes` to the same list of nodes
|
|
|
|
on each node on which it is set in order to be sure that only a single cluster
|
|
|
|
forms during bootstrapping and therefore to avoid the risk of data loss.
|
|
|
|
|
|
|
|
For a cluster with 3 master-eligible nodes (with <<node.name,node names>>
|
|
|
|
`master-a`, `master-b` and `master-c`) the configuration will look as follows:
|
|
|
|
|
|
|
|
[source,yaml]
|
|
|
|
--------------------------------------------------
|
|
|
|
cluster.initial_master_nodes:
|
|
|
|
- master-a
|
|
|
|
- master-b
|
|
|
|
- master-c
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
Alternatively the IP addresses or hostnames (<<node.name,if node name defaults
|
|
|
|
to the host name>>) can be used. If there is more than one Elasticsearch node
|
|
|
|
with the same IP address or hostname then the transport ports must also be given
|
|
|
|
to specify exactly which node is meant:
|
|
|
|
|
|
|
|
[source,yaml]
|
|
|
|
--------------------------------------------------
|
|
|
|
cluster.initial_master_nodes:
|
|
|
|
- 10.0.10.101
|
|
|
|
- 10.0.10.102:9300
|
|
|
|
- 10.0.10.102:9301
|
|
|
|
- master-node-hostname
|
|
|
|
--------------------------------------------------
|
|
|
|
|
2019-04-12 05:45:09 -04:00
|
|
|
[NOTE]
|
|
|
|
==================================================
|
|
|
|
|
|
|
|
The node names used in this list must exactly match the `node.name` properties
|
|
|
|
of the nodes. By default the node name is set to the machine's hostname which
|
|
|
|
may or may not be fully-qualified depending on your system configuration. If
|
|
|
|
each node name is a fully-qualified domain name such as `master-a.example.com`
|
|
|
|
then you must use fully-qualified domain names in the
|
|
|
|
`cluster.initial_master_nodes` list too; conversely if your node names are bare
|
|
|
|
hostnames (without the `.example.com` suffix) then you must use bare hostnames
|
|
|
|
in the `cluster.initial_master_nodes` list. If you use a mix of fully-qualifed
|
|
|
|
and bare hostnames, or there is some other mismatch between `node.name` and
|
|
|
|
`cluster.initial_master_nodes`, then the cluster will not form successfully and
|
|
|
|
you will see log messages like the following.
|
|
|
|
|
|
|
|
[source,text]
|
|
|
|
--------------------------------------------------
|
|
|
|
[master-a.example.com] master not discovered yet, this node has
|
|
|
|
not previously joined a bootstrapped (v7+) cluster, and this
|
|
|
|
node must discover master-eligible nodes [master-a, master-b] to
|
|
|
|
bootstrap a cluster: have discovered [{master-b.example.com}{...
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
This message shows the node names `master-a.example.com` and
|
|
|
|
`master-b.example.com` as well as the `cluster.initial_master_nodes` entries
|
|
|
|
`master-a` and `master-b`, and it is apparent that they do not match exactly.
|
|
|
|
|
|
|
|
==================================================
|
|
|
|
|
2018-12-20 08:02:44 -05:00
|
|
|
Like all node settings, it is also possible to specify the initial set of master
|
|
|
|
nodes on the command-line that is used to start Elasticsearch:
|
|
|
|
|
|
|
|
[source,bash]
|
|
|
|
--------------------------------------------------
|
|
|
|
$ bin/elasticsearch -Ecluster.initial_master_nodes=master-a,master-b,master-c
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
[float]
|
|
|
|
==== Choosing a cluster name
|
|
|
|
|
|
|
|
The <<cluster.name,`cluster.name`>> setting enables you to create multiple
|
|
|
|
clusters which are separated from each other. Nodes verify that they agree on
|
|
|
|
their cluster name when they first connect to each other, and Elasticsearch
|
|
|
|
will only form a cluster from nodes that all have the same cluster name. The
|
|
|
|
default value for the cluster name is `elasticsearch`, but it is recommended to
|
|
|
|
change this to reflect the logical name of the cluster.
|
|
|
|
|
|
|
|
[float]
|
|
|
|
==== Auto-bootstrapping in development mode
|
|
|
|
|
|
|
|
If the cluster is running with a completely default configuration then it will
|
|
|
|
automatically bootstrap a cluster based on the nodes that could be discovered to
|
|
|
|
be running on the same host within a short time after startup. This means that
|
|
|
|
by default it is possible to start up several nodes on a single machine and have
|
|
|
|
them automatically form a cluster which is very useful for development
|
|
|
|
environments and experimentation. However, since nodes may not always
|
|
|
|
successfully discover each other quickly enough this automatic bootstrapping
|
|
|
|
cannot be relied upon and cannot be used in production deployments.
|
|
|
|
|
|
|
|
If any of the following settings are configured then auto-bootstrapping will not
|
|
|
|
take place, and you must configure `cluster.initial_master_nodes` as described
|
|
|
|
in the <<modules-discovery-bootstrap-cluster,section on cluster bootstrapping>>:
|
|
|
|
|
2019-02-05 03:46:52 -05:00
|
|
|
* `discovery.seed_providers`
|
|
|
|
* `discovery.seed_hosts`
|
2018-12-20 08:02:44 -05:00
|
|
|
* `cluster.initial_master_nodes`
|