おはこんばんにちは、ytknです。
昔から苦手だったProxmox VEのノードを無事削除する方法がわかったので、その時のメモを整理して残しておきます。
この記事では生きているノードを削除する方法を紹介しています。クラスタから死んだノード(他のOSを入れてしまった、物理的に壊した、など)を削除する際はこの記事は参考にならないので注意。
状況
- 生きているノードが2つあった
- 1つだけ削除したい
環境
Proxmox VE 8.4.1
2台でクラスタ構成
この記事ではノードのことを「PVE1」「PVE2」と表現します。
そして、「PVE2」を削除するとします。 (PVE1だけ残る)
本題
クラスタからノードを削除する
まず、削除するノードにVM、コンテナ、バックアップ等が残っていない状態にしてください。
削除しないノードからSSHかWebGUIのConsoleでアクセス
① pvecm nodesで削除するノードがあるか確認
root@PVE1:~# pvecm nodes
Membership information
----------------------
Nodeid Votes Name
1 1 PVE1 (local)
2 1 PVE2
② PVE2をクラスタから削除
root@PVE1:~# pvecm delnode PVE2
Killing node 2
delnodeエラー例 その1
以下のようなエラーが出た場合
root@PVE1:~# pvecm delnode PVE2
Killing node 2
unable to open file '/etc/pve/corosync.conf.new.tmp.703647' - Permission denied
このエラーは同期に問題がある時に表示されるエラーらしいです。
以下の手順で対処してください。
まず/etc/pveの状態を確認
root@PVE1:~# mount | grep /etc/pve
/dev/fuse on /etc/pve type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
/dev/fuse ….と表示されれば正常
もし何も表示されない場合
root@PVE1:~# systemctl restart pve-cluster
(10秒待つ)
(もう一度試す)
root@PVE1:~# mount | grep /etc/pve
/dev/fuse on /etc/pve type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
表示されればOKです。②に戻ってやり直してください。
delnodeエラー例 その2
以下のようなエラーが出た場合
root@PVE1:~# pvecm delnode PVE2
cluster not ready - no quorum?
これは、クラスタが「クォーラム」を失っている状態を意味します。
Proxmoxクラスタは「生きているノードが過半数以上いること」を前提にして構成ファイルの書き換えなどを許可しています。2台構成で1台が止まっている場合、この「過半数」に達せず、クラスタ操作がロックされる=クォーラムなし(no quorum
)になります。
以下の手順で対処してください。
expectedの後の数字は、最終的に残すノードの数を入れてください。
(今回は1つ削除して1つ残すので、1を入力)
root@PVE1:~# pvecm expected 1
このコマンドは実行後、特に出力はありません。②に戻ってやり直してください。
delnodeエラー例 その3
以下のようなエラーが出た場合
root@PVE1:~# pvecm delnode PVE2
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
trying to acquire cfs lock 'file-corosync_conf' ...
cfs-lock 'file-corosync_conf' error: got lock request timeout
このエラーはcorosync.confのロック取得?に失敗した際に出るエラーとのこと。
以下の手順で対処してください。
まずクラスタ関連のサービスを再起動
root@PVE1:~# systemctl restart pve-cluster
(10秒程度待つ)
root@PVE1:~# systemctl restart corosync
(10秒程度待つ)
そして/etc/pveがマウントされていることを確認
root@PVE1:~# mount | grep /etc/pve
/dev/fuse on /etc/pve type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
クォーラムがあるか確認
root@PVE1:~# pvecm status
Cluster information
-------------------
Name: ClusterName
Config Version: 7
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Wed Jul 16 09:06:38 2025
Quorum provider: corosync_votequorum
Nodes: 1
Node ID: 0x00000001
Ring ID: 2.418
Quorate: No
Votequorum information
----------------------
Expected votes: 2
Highest expected: 2
Total votes: 1
Quorum: 2 Activity blocked
Flags:
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 192.168.0.101 (local)
Quorate: NOになっている場合は、以下の手順
root@PVE1:~# pvecm expected 1
再度クォーラムを確認
root@PVE1:~# pvecm status
Cluster information
-------------------
Name: ClusterName
Config Version: 7
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Wed Jul 16 09:07:00 2025
Quorum provider: corosync_votequorum
Nodes: 1
Node ID: 0x00000001
Ring ID: 2.418
Quorate: Yes
Votequorum information
----------------------
Expected votes: 1
Highest expected: 1
Total votes: 1
Quorum: 1
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 192.168.0.101 (local)
Quorate: Yesになったら、再度②に戻ってやり直してください。
GUIに残るノード名を削除する
削除はできたっぽいがWebGUIにアイコンが残ってしまう場合
pvecm nodesで削除されているか確認
root@PVE1:~# pvecm nodes
Membership information
----------------------
Nodeid Votes Name
1 1 PVE1 (local)
ノードディレクトリを確認
root@PVE1:~# ls -la /etc/pve/nodes/
total 0
drwxr-xr-x 2 root www-data 0 Mar 16 09:51 .
drwxr-xr-x 2 root www-data 0 Jan 1 1970 ..
drwxr-xr-x 2 root www-data 0 Mar 16 09:51 PVE1
drwxr-xr-x 2 root www-data 0 May 12 00:19 PVE2
残っているノードの中身を確認
root@PVE1:~# ls -la /etc/pve/nodes/PVE2
total 2
drwxr-xr-x 2 root www-data 0 Mar 16 09:51 .
drwxr-xr-x 2 root www-data 0 Mar 16 09:51 ..
-rw-r----- 1 root www-data 83 Jul 16 09:03 lrm_status
drwxr-xr-x 2 root www-data 0 Mar 16 09:51 lxc
drwxr-xr-x 2 root www-data 0 Mar 16 09:51 openvz
drwx------ 2 root www-data 0 Mar 16 09:51 priv
-rw-r----- 1 root www-data 1704 Mar 16 09:51 pve-ssl.key
-rw-r----- 1 root www-data 1801 Mar 16 09:51 pve-ssl.pem
drwxr-xr-x 2 root www-data 0 Mar 16 09:51 qemu-server
-rw-r----- 1 root www-data 564 May 8 18:27 ssh_known_hosts
問題ない (VM定義ファイルやLXC設定などが残っていない) ことを確認したら、削除実行します。
※クラスタ構成ファイルなので必ず確認してください。
root@PVE1:~# rm -r /etc/pve/nodes/PVE2
GUIをF5とかでリロードし、ノードが消えたことを確認します。
それでもGUIから消えない場合
しぶといヤツですねー
まれにpmxcfsの反映に時間がかかることがあるので、10分程度放置してみてください。
それでも消えない場合、クラスタメンバー情報の内部キャッシュをチェックしてみます。
root@PVE1:~# cat /etc/pve/.members
{
"nodename": "PVE1",
"version": 3,
"cluster": { "name": "ClusterName", "version": 7, "nodes": 2, "quorate": 1 },
"nodelist": {
"PVE1": { "id": 1, "online": 1, "ip": "192.168.0.101"}
"PVE2": { "id": 2, "online": 0},
}
}
まだPVE2のエントリが残っている場合
corosync.confからPVE2を削除します。
※.membersは手動編集禁止ファイルです。必ずcorosync.confを編集してください。
root@PVE1:~# nano /etc/pve/corosync.conf
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: PVE1
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.0.101
}
node {
name: PVE2
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.0.102
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: ClusterName
config_version: 7
interface {
linknumber: 0
}
ip_version: ipv4-6
link_mode: passive
secauth: on
version: 2
}
赤くハイライトした部分を削除して保存します。
クラスタサービスを再起動して反映させます。
root@PVE1:~# systemctl restart corosync
root@PVE1:~# systemctl restart pve-cluster
root@PVE1:~# cat /etc/pve/.members
{
"nodename": "PVE1",
"version": 4,
"cluster": { "name": "ClusterName", "version": 7, "nodes": 1, "quorate": 1 },
"nodelist": {
"PVE1": { "id": 1, "online": 1, "ip": "192.168.0.101"}
}
}
これで消えるはずです。
これでも消えない場合、ちょっと私にはわかりません。
Google先生やChatGPT先輩に聞いてみてください。
以上です。ありがとうございました。
コメント