#. via the bootstrap monmap (provided via ``--inject-monmap <path>`` or generated from ``--mon-host <list>``) if it includes a monitor with no name (``noname-<something>``) and an address configured on the local host.
#. via the bootstrap monmap generated from ``[mon.*]`` sections with the deprecated ``mon addr`` options in the config file (note that this method is *not* recommended and does not support binding to both v1 and v2 protocol addresses)
However, these methods are not completely interchangeable because of
the complexity of creating a new monitor cluster without danger of
races.
Cluster creation
================
There are three basic approaches to creating a cluster:
#. Create a new cluster by specifying the monitor names and addresses ahead of time.
#. Create a new cluster by specifying the monitor names ahead of time, and dynamically setting the addresses as ``ceph-mon`` daemons configure themselves.
#. Create a new cluster by specifying the monitor addresses ahead of time.
Names and addresses
-------------------
Generate a monmap using ``monmaptool`` with the names and addresses of the initial
monitors. The generated monmap will also include a cluster fsid. Feed that monmap
Once they learn enough of their peers from the initial member set,
they will be able to create the cluster.
Cluster expansion
=================
Cluster expansion is slightly less demanding than creation, because
the creation of the initial quorum is not an issue and there is no
worry about creating separately independent clusters.
New nodes can be forced to join an existing cluster in two ways:
#. by providing no initial monitor peers addresses, and feeding them dynamically.
#. by specifying the ``mon initial members`` config option to prevent the new nodes from forming a new, independent cluster, and feeding some existing monitors via any available method.
Once the daemon starts, you can give it one or more peer addresses (preferably a bare IP address with no port; the mon will set the addr types and ports for you) to join with::