Proxmox VEのクラスタ切り離し検証

# 概要
Proxmox VEでクラスタからノードを切り離してみました。クラスタからノードを切り離すためにはGUIからの操作は出来ないようです。また、切り離し後に再度組み込む際には初期化することが推奨されています。ただし、初期化せずに再組み込みを粉う事も可能とのことで、手順も公開されていましたので試験してみました。

参考: https://pve.proxmox.com/wiki/Cluster_Manager#_remove_a_cluster_node

## 環境
1号機: pve
2号機: pve2（切り離し対象ノード）

# 事前準備
切り離し対象ノードで動作している仮想マシンが無い状態にします。

# 切り離し

## 1号機での現状確認と切り離し
1号機からクラスタの構成状態を確認します。

```bash
root@pve:~# pvecm nodes

Membership information
----------------------
    Nodeid      Votes Name
         1          1 pve (local)
         2          1 pve2
```

切り離します。
```bash
root@pve:~# pvecm delnode pve2
Killing node 2
unable to open file '/etc/pve/corosync.conf.new.tmp.2804089' - Permission denied
```

エラーが出ましたが無視して、現状確認します。
```bash
root@pve:~# pvecm nodes

Membership information
----------------------
    Nodeid      Votes Name
         1          1 pve (local)
```

1号機からは2号機が切り離されているように見えます。

## 2号機での確認
2号機で状態を確認します。

```bash
root@pve2:~# systemctl status corosync
× corosync.service - Corosync Cluster Engine
     Loaded: loaded (/lib/systemd/system/corosync.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Sun 2024-06-23 13:03:50 JST; 2min 39s ago
   Duration: 14h 24min 20.974s
       Docs: man:corosync
             man:corosync.conf
             man:corosync_overview
    Process: 12479 ExecStart=/usr/sbin/corosync -f $COROSYNC_OPTIONS (code=exited, status=255/EXCEPTION)
   Main PID: 12479 (code=exited, status=255/EXCEPTION)
        CPU: 7min 41.989s

Jun 23 12:40:37 pve2 corosync[12479]:   [KNET  ] host: host: 1 (passive) best link: 1 (pri: 1)
Jun 23 12:40:38 pve2 corosync[12479]:   [KNET  ] rx: host: 1 link: 0 is up
Jun 23 12:40:38 pve2 corosync[12479]:   [KNET  ] link: Resetting MTU for link 0 because host 1 joined
Jun 23 12:40:38 pve2 corosync[12479]:   [KNET  ] host: host: 1 (passive) best link: 0 (pri: 1)
Jun 23 12:40:38 pve2 corosync[12479]:   [KNET  ] pmtud: Global data MTU changed to: 1397
Jun 23 13:03:50 pve2 corosync[12479]:   [CFG   ] Killed by node 1 : Killed by corosync-cfgtool
Jun 23 13:03:50 pve2 corosync[12479]:   [MAIN  ] Corosync Cluster Engine exiting with status -1 at cfg.c:566.
Jun 23 13:03:50 pve2 systemd[1]: corosync.service: Main process exited, code=exited, status=255/EXCEPTION
Jun 23 13:03:50 pve2 systemd[1]: corosync.service: Failed with result 'exit-code'.
Jun 23 13:03:50 pve2 systemd[1]: corosync.service: Consumed 7min 41.989s CPU time.
```

corosyncも停止しています。

```bash
root@pve2:~# pvecm nodes
Cannot initialize CMAP service
root@pve2:~# pvecm status
Cluster information
-------------------
Name:             pvecluster
Config Version:   2
Transport:        knet
Secure auth:      on

Cannot initialize CMAP service
```

ただし、クラスタの定義は残っているようで、マニュアルに記載の通り、2号機をクラスタに再組み込みする際には、Proxmox VEの再インストールが推奨されています。

# 再インストール無しで組み込むための処理
マニュアルには、再インストール無しで組み込むための手順が記載されていましたので試してみます。

・corosync, pve-clusterサービスの停止
```bash
root@pve2:~# systemctl stop pve-cluster
root@pve2:~# systemctl stop corosync
```

・クラスタファイルシステムをローカルノードで開始
```bash
root@pve2:~# pmxcfs -l
[main] notice: resolved node name 'pve2' to '192.168.11.57' for default node IP address
[main] notice: forcing local mode (although corosync.conf exists)
```

・corosyncの設定削除
```bash
root@pve2:~# rm /etc/pve/corosync.conf
root@pve2:~# rm -r /etc/corosync/*
```

・ファイルシステムを通常サービスとして起動
```bash
root@pve2:~# killall pmxcfs
root@pve2:~# systemctl start pve-cluster
root@pve2:~# systemctl status pve-cluster
● pve-cluster.service - The Proxmox VE cluster filesystem
     Loaded: loaded (/lib/systemd/system/pve-cluster.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-06-23 13:17:35 JST; 2min 30s ago
    Process: 292763 ExecStart=/usr/bin/pmxcfs (code=exited, status=0/SUCCESS)
   Main PID: 292764 (pmxcfs)
      Tasks: 6 (limit: 4620)
     Memory: 26.8M
        CPU: 203ms
     CGroup: /system.slice/pve-cluster.service
             mq292764 /usr/bin/pmxcfs

Jun 23 13:17:34 pve2 systemd[1]: Starting pve-cluster.service - The Proxmox VE cluster filesystem...
Jun 23 13:17:34 pve2 pmxcfs[292763]: [main] notice: resolved node name 'pve2' to '192.168.11.57' for default node IP address
Jun 23 13:17:34 pve2 pmxcfs[292763]: [main] notice: resolved node name 'pve2' to '192.168.11.57' for default node IP address
Jun 23 13:17:35 pve2 systemd[1]: Started pve-cluster.service - The Proxmox VE cluster filesystem.
```

・1号機からノード削除を削除します。
```bash
root@pve:~# pvecm delnode pve2
cluster not ready - no quorum?
```

・残りのノードのQuoramが失われたためにコマンドが失敗した場合、回避策としてVoteを1に設定し、再びノードを削除します。
```
root@pve:~# pvecm expected 1
root@pve:~# pvecm delnode pve2
trying to acquire cfs lock 'file-corosync_conf' ...
Could not kill node (error = CS_ERR_NOT_EXIST)
Killing node 2
```

・2号機でcorosync関連ファイルを削除します。
```bash
root@pve2:~# ls -alF /var/lib/corosync
total 12
drwxr-xr-x  2 root root 4096 Jun 22 22:39 ./
drwxr-xr-x 37 root root 4096 Jun 22 21:06 ../
-rw-------  1 root root    8 Jun 22 22:39 ringid_2
root@pve2:~# rm /var/lib/corosync/*
```

1号機の管理画面から、2号機が見えなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/dbf3e7b3-434d-34df-f3f0-9ee82770e294.png)

ただし、2号機の管理画面からは1号機が見えます。

・2号機で1号機のノード定義を削除します。
```bash
root@pve2:/etc/pve/nodes# pwd
/etc/pve/nodes
root@pve2:/etc/pve/nodes# cd
root@pve2:~# ls -alF /etc/pve/nodes/pve
total 2
drwxr-xr-x 2 root www-data    0 May  5 23:30 ./
drwxr-xr-x 2 root www-data    0 May  5 23:30 ../
-rw-r----- 1 root www-data   83 Jun 23 13:03 lrm_status
drwxr-xr-x 2 root www-data    0 May  5 23:30 lxc/
drwxr-xr-x 2 root www-data    0 May  5 23:30 openvz/
drwx------ 2 root www-data    0 May  5 23:30 priv/
-rw-r----- 1 root www-data 1704 May  5 23:30 pve-ssl.key
-rw-r----- 1 root www-data 1793 May  5 23:30 pve-ssl.pem
drwxr-xr-x 2 root www-data    0 May  5 23:30 qemu-server/
-rw-r----- 1 root www-data  556 Jun 11 21:28 ssh_known_hosts
root@pve2:~# rm -Rf /etc/pve/nodes/pve
```

再度2号機の管理画面を見ると、1号機が見えなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/51c670f1-c13b-2248-d62e-b8122de59ee9.png)

# 残作業

・zpoolの削除
2号機をクラスタ組み込んだ際に、1号機のzpool情報が複製されていました。2号機にはzpoolが存在しないため、削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/351924a5-a8c3-e060-3a6e-55c045494a77.png)

・CIFSマウントの解除
2号機でCIFSをストレージとしてマウントしていました。クラスタへの組み込みに伴いCIFSのストレージ定義が消えたにもかかわらず、マウントされたままになっています。
```bash
root@pve2:~# df -h
Filesystem               Size  Used Avail Use% Mounted on
udev                     1.9G     0  1.9G   0% /dev
tmpfs                    392M  680K  392M   1% /run
/dev/mapper/pve-root      42G  2.7G   37G   7% /
tmpfs                    2.0G   46M  1.9G   3% /dev/shm
tmpfs                    5.0M     0  5.0M   0% /run/lock
efivarfs                 128M   11K  128M   1% /sys/firmware/efi/efivars
/dev/sda2               1022M   12M 1011M   2% /boot/efi
//192.168.11.34/Private  2.5T  848G  1.7T  34% /mnt/pve/freenas
//192.168.12.34/Private  2.5T  848G  1.7T  34% /mnt/pve/freenas
tmpfs                    392M     0  392M   0% /run/user/0
/dev/fuse                128M   20K  128M   1% /etc/pve
```

/etc/fstabに登録されていませんでしたので、再起動することでマウントが解除されることを確認しました。
```bash
root@pve2:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
udev                  1.9G     0  1.9G   0% /dev
tmpfs                 392M  676K  392M   1% /run
/dev/mapper/pve-root   42G  2.7G   37G   7% /
tmpfs                 2.0G   40M  1.9G   3% /dev/shm
tmpfs                 5.0M     0  5.0M   0% /run/lock
efivarfs              128M   11K  128M   1% /sys/firmware/efi/efivars
/dev/sda2            1022M   12M 1011M   2% /boot/efi
/dev/fuse             128M   20K  128M   1% /etc/pve
tmpfs                 392M     0  392M   0% /run/user/0
```

以上の操作により、2号機をクラスタ組み込み前の状態とすることが出来ました。