[[modules-discovery]]
== Discovery and cluster formation

The discovery and cluster formation module is responsible for discovering
nodes, electing a master, forming a cluster, and publishing the cluster state
each time it changes. It is integrated with other modules. For example, all
communication between nodes is done using the <<modules-transport,transport>>
module. This module is divided into the following sections:

<<modules-discovery-hosts-providers>>::

    Discovery is the process where nodes find each other when the master is
    unknown, such as when a node has just started up or when the previous
    master has failed.

<<modules-discovery-quorums>>::

    This section describes how {es} uses a quorum-based voting mechanism to
    make decisions even if some nodes are unavailable.

<<modules-discovery-voting>>::

    This section describes the concept of voting configurations, which {es}
    automatically updates as nodes leave and join the cluster.

<<modules-discovery-bootstrap-cluster>>::

    Bootstrapping a cluster is required when an Elasticsearch cluster starts up
    for the very first time. In <<dev-vs-prod-mode,development mode>>, with no
    discovery settings configured, this is automatically performed by the nodes
    themselves. As this auto-bootstrapping is
    <<modules-discovery-quorums,inherently unsafe>>, running a node in
    <<dev-vs-prod-mode,production mode>> requires bootstrapping to be
    explicitly configured via the
    <<modules-discovery-bootstrap-cluster,`cluster.initial_master_nodes`
    setting>>.

<<modules-discovery-adding-removing-nodes,Adding and removing master-eligible nodes>>::

    It is recommended to have a small and fixed number of master-eligible nodes
    in a cluster, and to scale the cluster up and down by adding and removing
    master-ineligible nodes only. However there are situations in which it may
    be desirable to add or remove some master-eligible nodes to or from a
    cluster. This section describes the process for adding or removing
    master-eligible nodes, including the extra steps that need to be performed
    when removing more than half of the master-eligible nodes at the same time.

<<cluster-state-publishing>>::

    Cluster state publishing is the process by which the elected master node
    updates the cluster state on all the other nodes in the cluster.

<<cluster-fault-detection>>::

    {es} performs health checks to detect and remove faulty nodes.

<<modules-discovery-settings,Settings>>::

    There are settings that enable users to influence the discovery, cluster
    formation, master election and fault detection processes.    

include::discovery/discovery.asciidoc[]

include::discovery/quorums.asciidoc[]

include::discovery/voting.asciidoc[]

include::discovery/bootstrapping.asciidoc[]

include::discovery/adding-removing-nodes.asciidoc[]

include::discovery/publishing.asciidoc[]

include::discovery/fault-detection.asciidoc[]

include::discovery/discovery-settings.asciidoc[]
