public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Hannes Duerr <h.duerr@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: Re: [PATCH pve-docs 1/2] restructure "remove a cluster node" section
Date: Wed, 4 Feb 2026 11:55:34 +0100	[thread overview]
Message-ID: <98db98a9-575b-4e7a-880d-6e97fd0a060c@proxmox.com> (raw)
In-Reply-To: <20260203145232.142544-1-h.duerr@proxmox.com>

superseded: 
https://lore.proxmox.com/pve-devel/20260204105324.61841-1-h.duerr@proxmox.com/

On 2/3/26 3:51 PM, Hannes Duerr wrote:
> The old section did not have a clear structure or sequence to follow.
> For example, the final point, `pvecm delnode`, was not included in the
> list of steps required to remove the cluster node.
> The new structure consists of prerequisites, steps to remove the cluster
> node and how to rejoin the existing node. The steps are explained using
> an example.
>
> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
> ---
>   pvecm.adoc | 179 ++++++++++++++++++++++++++---------------------------
>   1 file changed, 88 insertions(+), 91 deletions(-)
>
> diff --git a/pvecm.adoc b/pvecm.adoc
> index d12dde7..1904a00 100644
> --- a/pvecm.adoc
> +++ b/pvecm.adoc
> @@ -318,22 +318,30 @@ Remove a Cluster Node
>   CAUTION: Read the procedure carefully before proceeding, as it may
>   not be what you want or need.
>   
> -Move all virtual machines from the node. Ensure that you have made copies of any
> -local data or backups that you want to keep. In addition, make sure to remove
> -any scheduled replication jobs to the node to be removed.
> +The following steps explain how to remove a node from a cluster that
> +was also part of a xref:chapter_pveceph[Ceph] cluster.
> +If Ceph was not installed on your node, you can simply ignore the
> +steps that mention it.
> +
> +.Prerequisites:
> +
> +* Move all virtual machines and containers from the node.
> +* Back up all local data on the node to be deleted.
> +* Make sure the node to be deleted is not part of any replicatio job
> +  anymore.
> +
> +CAUTION: If you fail to remove replication jobs from a node before
> +removing the node itself, the replication job will become irremovable.
> +Note that replication automatically switches direction when a
> +replicated VM is migrated. Therefore, migrating a replicated VM from a
> +node that is going to be deleted will set up replication jobs to that
> +node automatically.
> +
> +* Ensure that the remaining Ceph cluster has sufficient storage space
> +  and that the OSDs are running (i.e. `up` and `in`). The destruction
> +  of any OSD, especially the last one on a node, will trigger a data
> +  rebalance in Ceph.
>   
> -CAUTION: Failure to remove replication jobs to a node before removing said node
> -will result in the replication job becoming irremovable. Especially note that
> -replication automatically switches direction if a replicated VM is migrated, so
> -by migrating a replicated VM from a node to be deleted, replication jobs will be
> -set up to that node automatically.
> -
> -If the node to be removed has been configured for
> -xref:chapter_pveceph[Ceph]:
> -
> -. Ensure that sufficient {pve} nodes with running OSDs (`up` and `in`)
> -continue to exist.
> -+
>   NOTE: By default, Ceph pools have a `size/min_size` of `3/2` and a
>   full node as `failure domain` at the object balancer
>   xref:pve_ceph_device_classes[CRUSH]. So if less than `size` (`3`)
> @@ -341,118 +349,107 @@ nodes with running OSDs are online, data redundancy will be degraded.
>   If less than `min_size` are online, pool I/O will be blocked and
>   affected guests may crash.
>   
> -. Ensure that sufficient xref:pve_ceph_monitors[monitors],
> -xref:pve_ceph_manager[managers] and, if using CephFS,
> -xref:pveceph_fs_mds[metadata servers] remain available.
> +* Ensure that sufficient xref:pve_ceph_monitors[monitors],
> +  xref:pve_ceph_manager[managers] and, if using CephFS,
> +  xref:pveceph_fs_mds[metadata servers] remain available in the Ceph
> +  cluster.
>   
> -. To maintain data redundancy, each destruction of an OSD, especially
> -the last one on a node, will trigger a data rebalance. Therefore,
> -ensure that the OSDs on the remaining nodes have sufficient free space
> -left.
> +.Remove the cluster node:
>   
> -. To remove Ceph from the node to be deleted, start by
> -xref:pve_ceph_osd_destroy[destroying] its OSDs, one after the other.
> +Before a node can be removed from a cluster, you must ensure that it
> +is no longer part of the Ceph cluster and that no Ceph resources or
> +services are residing on it.
> +In the following the cluster node `node4` will be removed from the
> +cluster
>   
> -. Once the xref:pve_ceph_mon_and_ts[CEPH status] is `HEALTH_OK` again,
> -proceed by:
> -
> -[arabic]
> -.. destroying its xref:pveceph_fs_mds[metadata server] via web
> -interface at __Ceph -> CephFS__ or by running:
> -+
>   ----
> -# pveceph mds destroy <local hostname>
> +node4# pvecm nodes
> +
> +Membership information
> +~~~~~~~~~~~~~~~~~~~~~~
> +    Nodeid      Votes Name
> +         1          1 node1
> +         2          1 node2
> +         3          1 node3
> +         4          1 node4 (local)
>   ----
>   
> -.. xref:pveceph_destroy_mon[destroying its monitor]
>   
> -.. xref:pveceph_destroy_mgr[destroying its manager]
> +. Start by xref:pve_ceph_osd_destroy[destroying] the remaining OSDs on
> +  the node to be deleted, one after another.
>   
> -. Finally, remove the now empty bucket ({pve} node to be removed) from
> -the CRUSH hierarchy by running:
> +. Wait until the xref:pve_ceph_mon_and_ts[CEPH status] reaches
> +  `HEALTH_OK` again.
> +
> +. If it exists, destroy the remaining xref:pveceph_fs_mds[metadata server]
> +  via the web interface at __Ceph -> CephFS__ or by running:
>   +
>   ----
> -# ceph osd crush remove <hostname>
> +node4# pveceph mds destroy node4
>   ----
>   
> -In the following example, we will remove the node hp4 from the cluster.
> +. xref:pveceph_destroy_mon[Destroy the remaining monitor.]
>   
> -Log in to a *different* cluster node (not hp4), and issue a `pvecm nodes`
> -command to identify the node ID to remove:
> +. xref:pveceph_destroy_mgr[Destroy the remaining manager.]
>   
> +. Finally, remove the now empty bucket ({pve} node to be removed) from
> +  the CRUSH hierarchy.
> ++
>   ----
> - hp1# pvecm nodes
> -
> -Membership information
> -~~~~~~~~~~~~~~~~~~~~~~
> -    Nodeid      Votes Name
> -         1          1 hp1 (local)
> -         2          1 hp2
> -         3          1 hp3
> -         4          1 hp4
> +node4# ceph osd crush remove node4
>   ----
>   
> -
> -At this point, you must power off hp4 and ensure that it will not power on
> -again (in the network) with its current configuration.
> -
> +. Power off `node4` and make sure that it will not power on again
> +  in this network with its current configuration.
> ++
>   IMPORTANT: As mentioned above, it is critical to power off the node
>   *before* removal, and make sure that it will *not* power on again
>   (in the existing cluster network) with its current configuration.
>   If you power on the node as it is, the cluster could end up broken,
>   and it could be difficult to restore it to a functioning state.
>   
> -After powering off the node hp4, we can safely remove it from the cluster.
> -
> +. Log into one of the reamining cluster node and remove the node
> +  `node4` from the cluster.
> ++
>   ----
> - hp1# pvecm delnode hp4
> - Killing node 4
> +node1# pvecm delnode node4
>   ----
> -
> -NOTE: At this point, it is possible that you will receive an error message
> -stating `Could not kill node (error = CS_ERR_NOT_EXIST)`. This does not
> -signify an actual failure in the deletion of the node, but rather a failure in
> -corosync trying to kill an offline node. Thus, it can be safely ignored.
> -
> -Use `pvecm nodes` or `pvecm status` to check the node list again. It should
> -look something like:
> -
> ++
> +NOTE: It is possible that you will receive an error message stating
> +`could not kill node (error = cs_err_not_exist)`. This does not
> +signify an actual failure in the deletion of the node, but rather a
> +failure in Corosync trying to kill an offline node. thus, it can be
> +safely ignored.
> +
> +. After the node got removed the configuration files of the removed
> +  node will still reside in '/etc/pve/nodes/node4' in the cluster
> +  filesystem. Recover any configuration you still need and remove the
> +  directory afterwards.
> ++
>   ----
> -hp1# pvecm status
> -
> -...
> -
> -Votequorum information
> -~~~~~~~~~~~~~~~~~~~~~~
> -Expected votes:   3
> -Highest expected: 3
> -Total votes:      3
> -Quorum:           2
> -Flags:            Quorate
> +node1# pvecm nodes
>   
>   Membership information
>   ~~~~~~~~~~~~~~~~~~~~~~
>       Nodeid      Votes Name
> -0x00000001          1 192.168.15.90 (local)
> -0x00000002          1 192.168.15.91
> -0x00000003          1 192.168.15.92
> +         1          1 node1 (local)
> +         2          1 node2
> +         3          1 node3
>   ----
>   
> -If, for whatever reason, you want this server to join the same cluster again,
> -you have to:
> +NOTE: After the removal of the node, its SSH fingerprint will still
> +reside in the 'known_hosts' file on the other nodes. If you receive an
> +SSH error after rejoining a node with the same IP or hostname, run
> +`pvecm updatecerts` once on the re-added node to update its
> +fingerprint cluster wide.
>   
> -* do a fresh install of {pve} on it,
> +.Rejoin the same node again:
>   
> -* then join it, as explained in the previous section.
> +If you want the same server to join the same cluster again, you have to:
>   
> -The configuration files for the removed node will still reside in
> -'/etc/pve/nodes/hp4'. Recover any configuration you still need and remove the
> -directory afterwards.
> +* Reinstall {pve} on the server,
>   
> -NOTE: After removal of the node, its SSH fingerprint will still reside in the
> -'known_hosts' of the other nodes. If you receive an SSH error after rejoining
> -a node with the same IP or hostname, run `pvecm updatecerts` once on the
> -re-added node to update its fingerprint cluster wide.
> +* then xref:pvecm_join_node_to_cluster[rejoin the node to the cluster]
>   
>   [[pvecm_separate_node_without_reinstall]]
>   Separate a Node Without Reinstalling




      parent reply	other threads:[~2026-02-04 10:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-03 14:52 Hannes Duerr
2026-02-03 14:52 ` [PATCH pve-docs 2/2] add note that when removing a cluster node, it is not removed from HA rules Hannes Duerr
2026-02-04 10:55 ` Hannes Duerr [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=98db98a9-575b-4e7a-880d-6e97fd0a060c@proxmox.com \
    --to=h.duerr@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal