============================== Resizing the monitor cluster ============================== Adding a monitor ---------------- #. Initialize the new monitor's data directory with the ``ceph-mon --mkfs`` command. You need to provide the new monitor with four pieces of information: - the cluster fsid. This can come from a monmap (``--monmap ``) for explicitly via ``--fsid ``. - one or more existing monitors to join. This can come via ``-m ``, a monmap (``--monmap ``), or ``[mon.foo]`` sections with ``mon addr`` fields in ``ceph.conf``. - the monitor authentication key ``mon.``. This should be passed in explicitly via a keyring (``--keyring ``). Any combination of the above arguments that provide the four needed pieces of information will work. The simplest way to do this is usually:: $ ceph mon getmap -o /tmp/monmap # provides fsid and existing monitor addrs $ ceph auth export mon. -o /tmp/monkey # mon. auth key $ ceph-mon -i newname --mkfs --monmap /tmp/monmap --keyring /tmp/monkey #. Start the new monitor and it will automatically join the cluster. The daemon needs to know which address to bind to, either via ``--public-addr `` or by setting ``mon addr`` in the appropriate section of ``ceph.conf``. For example:: $ ceph-mon -i newname --public-addr #. If you would like other nodes to be able to use this monitor during their initial startup, you'll need to adjust ``ceph.conf`` to add a section and ``mon addr`` for the new monitor, or add it to the existing ``mon host`` list. Removing a monitor from a healthy cluster ----------------------------------------- If the cluster is healthy, you can do:: $ ceph mon remove $id For example, if your cluster includes ``mon.a``, ``mon.b``, and ``mon.c``, then you can remove ``mon.c`` with:: $ ceph mon remove c Removing a monitor from an unhealthy or down cluster ---------------------------------------------------- The mon cluster may not be up because you have lost too many nodes to form a quorum. #) On a surviving monitor node, find the most recent monmap:: $ ls $mon_data/monmap 1 2 accepted_pn last_committed latest in this case it is 2. #) Copy to a temporary location and modify the monmap to remove the node(s) you don't want. Let's say the map has ``mon.a``, ``mon.b``, and ``mon.c``, but only ``mon.a`` is surviving:: $ cp $mon_data/monmap/2 /tmp/foo $ monmaptool /tmp/foo --rm b $ monmaptool /tmp/foo --rm c 3) Make sure ceph-mon isn't running:: $ service ceph stop mon 4) Inject the modified map on any surviving nodes. For example, for ``mon.a``:: $ ceph-mon -i a --inject-monmap /tmp/foo # for each surviving monitor 5) Start the surviving monitor(s):: $ service ceph start mon # on each node with a surviving monitor 6) Remove the old monitors from ``ceph.conf`` so that nobody tries to connect to the old instances.