Proxmox VE環境でcephによるストレージ領域を作成して、物理的にディスクを共有していない状態で複数サーバ間を1ファイルシステムで運用できる環境についての試験中。
Proxmox VEクラスタをUPS連動で停止する場合の処理について確認しているのだが、公式ドキュメントにそのまま使えるようなものがないので、情報を集めているところ・・・
Proxmox VE公式ドキュメント:Shutdown Proxmox VE + Ceph HCI cluster
これはceph側の処理だけかかれていて、ceph側を止める前には仮想マシンを停止しなければならないのに、そこについて触れていない。
Proxmox VEフォーラムを探す
Clean shutdown of whole cluster (2023/01/16)
Shutdown of the Hyper-Converged Cluster (CEPH) (2020/04/05)
ここらのスクリプトが使えそうだが、仮想マシン/コンテナを停止するのは「各ノードで pvenode stopallを実行」ではなく、「APIを使ってすべてを停止する」が推奨される模様。
ここから試験
「pvesh get /nodes」でノードリストを作って、「ssh ホスト名 pvenode stopall」で仮想マシンを停止できるか試してみたが、管理Web上は「VMとコンテナの一括シャットダウン」と出力されるのだが、仮想マシンの停止が実行されなかった。
3.11.3. Bulk Guest Power Management を見ると止まっても良さそうなんだけど・・・
pvesh コマンドを調べるとこちらでも停止させることができる模様なので下記で実施
1 | for hostname in `pvesh ls /nodes/|awk '{ print $2 }'`; do for vmid in `pvesh ls /nodes/$hostname/qemu/|awk '{ print $2 }'`; do pvesh create /nodes/$hostname/qemu/$vmid/status/shutdown; done; done |
実行例
1 | root@pve36:~# for hostname in `pvesh ls /nodes/|awk '{ print $2 }'` |
2 | > do for vmid in `pvesh ls /nodes/$hostname/qemu/|awk '{ print $2 }'` |
4 | > pvesh create /nodes/$hostname/qemu/$vmid/status/shutdown |
9 | Requesting HA stop for VM 102 |
10 | UPID:pve36:00014A47:0018FC0A:6731A591:hastop:102:root@pam: |
12 | Requesting HA stop for VM 100"UPID:pve37:00013A71:0018FDDC:6731A597:hastop:100:root@pam:" |
14 | Requesting HA stop for VM 101"UPID:pve38:000144BF:00192F03:6731A59D:hastop:101:root@pam:" |
15 | Requesting HA stop for VM 103"UPID:pve38:000144DC:0019305D:6731A5A0:hastop:103:root@pam:" |
これで、停止することを確認
次に仮想マシンの停止確認
1 | root@pve36:~# pvesh get /nodes/pve36/qemu |
2 | lqqqqqqqqqwqqqqqqwqqqqqqwqqqqqqwqqqqqqqqqqqwqqqqqqqqqqwqqqqqqqqqwqqqqqwqqqqqqqqqqqwqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqwqqqqqqqqk |
3 | x status x vmid x cpus x lock x maxdisk x maxmem x name x pid x qmpstatus x running-machine x running-qemu x tags x uptime x |
4 | tqqqqqqqqqnqqqqqqnqqqqqqnqqqqqqnqqqqqqqqqqqnqqqqqqqqqqnqqqqqqqqqnqqqqqnqqqqqqqqqqqnqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqnqqqqqqqqu |
5 | x stopped x 102 x 2 x x 32.00 GiB x 2.00 GiB x testvm2 x x x x x x 0s x |
6 | mqqqqqqqqqvqqqqqqvqqqqqqvqqqqqqvqqqqqqqqqqqvqqqqqqqqqqvqqqqqqqqqvqqqqqvqqqqqqqqqqqvqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqvqqqqqqqqj |
ヘッダーを付けない形式で出力
1 | root@pve36:~# pvesh get /nodes/pve36/qemu --noborder --noheader |
2 | stopped 102 2 32.00 GiB 2.00 GiB testvm2 0s |
“stopped” となってない行があればまだ停止していない、ということになるので「pvesh get /nodes/pve36/qemu –noborder –noheader|grep -v “stopped”」の出力結果があるかどうかで判断できそう
また、これらはqemu仮想マシンについてのみなので、lxcコンテナについては含まれないので、そちらについても対応する
停止
1 | for hostname in `pvesh ls /nodes/|awk '{ print $2 }'`; do for vmid in `pvesh ls /nodes/$hostname/lxc/|awk '{ print $2 }'`; do pvesh create /nodes/$hostname/lxc/$vmid/status/shutdown;done;done |
仮想マシンが止まったかを判断するには、すべての仮想マシンの状態が”stopped”になっているか、で判定するなら下記
1 | for hostname in `pvesh ls /nodes/|awk '{ print $2 }'`; do echo "=== $hostname ==="; flag=0; while [ $flag -eq 0 ]; do pvesh get /nodes/$hostname/qemu --noborder --noheader|grep -v "stopped" > /dev/null; flag=$?; echo $flag; done; done |
すべての仮想マシンの状態で”running”がないことなら
for hostname in pvesh ls /nodes/|awk '{ print $2 }'
; do echo “=== $hostname ===”; flag=0; while [ $flag -eq 0 ]; do pvesh get /nodes/$hostname/qemu –noborder –noheader|grep “running” > /dev/null ; flag=$?; echo $flag; done; done
どっちがいいかは悩むところ
Cephの停止についてはRedHatの「2.10. Red Hat Ceph Storage クラスターの電源をオフにして再起動」とProxmoxの「Shutdown Proxmox VE + Ceph HCI cluster 」を確認
Proxmox VE側だと下記だけ
3 | ceph osd set norebalance |
RedHat側にはこれらを実行する前にcephfsを停止するための手順が追加されている。
1 | ceph fs set FS_NAME max_mds 1 |
2 | ceph mds deactivate FS_NAME:1 # rank 2 of 2 |
3 | ceph status # wait for rank 1 to finish stopping |
4 | ceph fs set FS_NAME cluster_down true |
ceph fs setで設定しているmax_mdsとcluster_downの値はどうなっているのかを確認
1 | root@pve36:~# ceph fs get cephfs |
5 | flags 12 joinable allow_snaps allow_multimds_snaps |
6 | created 2024-11-05T14:29:45.941671+0900 |
7 | modified 2024-11-11T11:04:06.223151+0900 |
12 | max_file_size 1099511627776 |
14 | required_client_features {} |
16 | last_failure_osd_epoch 3508 |
17 | compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,7=mds uses inline data,8=no anchor table,9=file layout v2,10=snaprealm v2} |
30 | [mds.pve36{0:784113} state up:active seq 29 addr [v2:172.17.44.36:6800/1472122357,v1:172.17.44.36:6801/1472122357] compat {c=[1],r=[1],i=[7ff]}] |
cluster_downはない?
1 | root@pve36:~# ceph mds stat |
2 | cephfs:1 {0=pve36=up:active} 1 up:standby |
3 | root@pve36:~# ceph mds compat show |
4 | compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table,9=file layout v2,10=snaprealm v2} |
んー? ceph fsのcluster_down を実行してみる
1 | root@pve36:~# ceph fs set cephfs cluster_down true |
2 | cephfs marked not joinable; MDS cannot join as newly active. WARNING: cluster_down flag is deprecated and will be removed in a future version. Please use "joinable". |
joinableを使えとあるので、この記述は古いらしい
おや?と思って再度探したところRedHatのドキュメントが古かった。RedHat「2.5. Red Hat Ceph Storage クラスターの電源をオフにして再起動」、もしくはIBMの「Ceph File System ・クラスターの停止」
1 | ceph fs set FS_NAME max_mds 1 |
4 | ceph fs set FS_NAME joinable false |
IBM手順の方だとmax_mdsの操作は行わずに実施している
1 | root@pve36:~# ceph fs status |
4 | RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS |
5 | 0 active pve36 Reqs: 0 /s 21 20 16 23 |
7 | cephfs_metadata metadata 244M 122G |
8 | cephfs_data data 31.8G 122G |
11 | MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable) |
12 | root@pve36:~# ceph fs fail cephfs |
13 | cephfs marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed. |
14 | root@pve36:~# ceph fs status |
17 | RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS |
20 | cephfs_metadata metadata 244M 122G |
21 | cephfs_data data 31.8G 122G |
25 | MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable) |
26 | root@pve36:~# ceph fs fail cephfs |
27 | cephfs marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed. |
30 | root@pve36:~# ceph fs set cephfs joinable false |
31 | cephfs marked not joinable; MDS cannot join as newly active. |
34 | root@pve36:~# ceph fs status |
37 | RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS |
40 | cephfs_metadata metadata 244M 122G |
41 | cephfs_data data 31.8G 122G |
45 | MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable) |
…止めてしまったら、dfコマンドが実行できなくなるので注意
1 | root@pve36:~# ceph osd stat |
2 | 16 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3599 |
3 | root@pve36:~# ceph osd set noout |
5 | root@pve36:~# ceph osd set norecover |
7 | root@pve36:~# ceph osd set norebalance |
9 | root@pve36:~# ceph osd set nobackfill |
11 | root@pve36:~# ceph osd set nodown |
13 | root@pve36:~# ceph osd set pause |
15 | root@pve36:~# ceph osd stat |
16 | 16 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605 |
17 | flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover |
ドキュメントに「重要 上記の例は、OSD ノード内のサービスと各 OSD を停止する場合のみであり、各 OSD ノードで繰り返す必要があります。」とあるので、各サーバで確認してみたが、別に各サーバで実行する必要はなさそうである。
1 | root@pve36:~# ceph osd stat |
2 | 16 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605 |
3 | flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover |
4 | root@pve36:~# ssh pve37 ceph osd stat |
5 | 16 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605 |
6 | flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover |
7 | root@pve36:~# ssh pve38 ceph osd stat |
8 | 16 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605 |
9 | flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover |
10 | root@pve36:~# ssh pve39 ceph osd stat |
11 | 16 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605 |
12 | flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover |
このあと、各サーバに対してshutdown -h nowを実行して止めた
起動後
1 | root@pve36:~# ceph status |
3 | id: 4647497d-17da-46f4-8e7b-231365d96e42 |
5 | 1 filesystem is degraded |
6 | 1 filesystem is offline |
7 | pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover flag(s) set |
10 | mon: 3 daemons, quorum pve36,pve37,pve38 (age 41s) |
11 | mgr: pve38(active, since 30s), standbys: pve37, pve36 |
12 | mds: 0/1 daemons up (1 failed), 2 standby |
13 | osd: 16 osds: 16 up (since 48s), 16 in (since 3d) |
14 | flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover |
17 | volumes: 0/1 healthy, 1 failed |
18 | pools: 4 pools, 193 pgs |
19 | objects: 17.68k objects, 69 GiB |
20 | usage: 206 GiB used, 434 GiB / 640 GiB avail |
23 | root@pve36:~# ceph osd stat |
24 | 16 osds: 16 up (since 69s), 16 in (since 3d); epoch: e3621 |
25 | flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover |
28 | root@pve36:~# ceph fs ls |
29 | name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ] |
30 | root@pve36:~# ceph fs status |
33 | RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS |
36 | cephfs_metadata metadata 244M 125G |
37 | cephfs_data data 31.8G 125G |
41 | MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable) |
復帰のためのコマンド群1
1 | root@pve36:~# ceph osd unset noout |
3 | root@pve36:~# ceph osd unset norecover |
5 | root@pve36:~# ceph osd unset norebalance |
7 | root@pve36:~# ceph osd unset nobackfill |
9 | root@pve36:~# ceph osd unset nodown |
11 | root@pve36:~# ceph osd unset pause |
12 | pauserd,pausewr is unset |
13 | root@pve36:~# ceph osd stat |
14 | 16 osds: 16 up (since 100s), 16 in (since 3d); epoch: e3627 |
15 | root@pve36:~# ceph status |
17 | id: 4647497d-17da-46f4-8e7b-231365d96e42 |
19 | 1 filesystem is degraded |
20 | 1 filesystem is offline |
23 | mon: 3 daemons, quorum pve36,pve37,pve38 (age 102s) |
24 | mgr: pve38(active, since 90s), standbys: pve37, pve36 |
25 | mds: 0/1 daemons up (1 failed), 2 standby |
26 | osd: 16 osds: 16 up (since 108s), 16 in (since 3d) |
29 | volumes: 0/1 healthy, 1 failed |
30 | pools: 4 pools, 193 pgs |
31 | objects: 17.68k objects, 69 GiB |
32 | usage: 206 GiB used, 434 GiB / 640 GiB avail |
36 | client: 21 KiB/s rd, 0 B/s wr, 9 op/s rd, 1 op/s wr |
ファイルシステム再開
1 | root@pve36:~# ceph fs set cephfs joinable true |
2 | cephfs marked joinable; MDS may join as newly active. |
3 | root@pve36:~# ceph fs status |
6 | RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS |
7 | 0 reconnect pve36 10 10 6 0 |
9 | cephfs_metadata metadata 244M 125G |
10 | cephfs_data data 31.8G 125G |
13 | MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable) |
14 | root@pve36:~# ceph osd stat |
15 | 16 osds: 16 up (since 2m), 16 in (since 3d); epoch: e3627 |
16 | root@pve36:~# cpeh status |
17 | -bash: cpeh: command not found |
18 | root@pve36:~# ceph status |
20 | id: 4647497d-17da-46f4-8e7b-231365d96e42 |
22 | 1 filesystem is degraded |
25 | mon: 3 daemons, quorum pve36,pve37,pve38 (age 2m) |
26 | mgr: pve38(active, since 2m), standbys: pve37, pve36 |
27 | mds: 1/1 daemons up, 1 standby |
28 | osd: 16 osds: 16 up (since 2m), 16 in (since 3d) |
31 | volumes: 0/1 healthy, 1 recovering |
32 | pools: 4 pools, 193 pgs |
33 | objects: 17.68k objects, 69 GiB |
34 | usage: 206 GiB used, 434 GiB / 640 GiB avail |
38 | root@pve36:~# ceph fs status |
41 | RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS |
42 | 0 rejoin pve36 10 10 6 0 |
44 | cephfs_metadata metadata 244M 125G |
45 | cephfs_data data 31.8G 125G |
48 | MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable) |
50 | Filesystem 1K-blocks Used Available Use% Mounted on |
51 | udev 8156156 0 8156156 0% /dev |
52 | tmpfs 1638000 1124 1636876 1% /run |
53 | /dev/mapper/pve-root 28074060 14841988 11780656 56% / |
54 | tmpfs 8189984 73728 8116256 1% /dev/shm |
55 | tmpfs 5120 0 5120 0% /run/lock |
56 | /dev/fuse 131072 36 131036 1% /etc/pve |
57 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-2 |
58 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-0 |
59 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-1 |
60 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-3 |
61 | tmpfs 1637996 0 1637996 0% /run/user/0 |
62 | root@pve36:~# ceph fs status |
65 | RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS |
66 | 0 active pve36 Reqs: 0 /s 10 10 6 0 |
68 | cephfs_metadata metadata 244M 125G |
69 | cephfs_data data 31.8G 125G |
72 | MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable) |
74 | Filesystem 1K-blocks Used Available Use% Mounted on |
75 | udev 8156156 0 8156156 0% /dev |
76 | tmpfs 1638000 1128 1636872 1% /run |
77 | /dev/mapper/pve-root 28074060 14841992 11780652 56% / |
78 | tmpfs 8189984 73728 8116256 1% /dev/shm |
79 | tmpfs 5120 0 5120 0% /run/lock |
80 | /dev/fuse 131072 36 131036 1% /etc/pve |
81 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-2 |
82 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-0 |
83 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-1 |
84 | tmpfs 8189984 28 8189956 1% /var/lib/ceph/osd/ceph-3 |
85 | tmpfs 1637996 0 1637996 0% /run/user/0 |
86 | 172.17.44.36,172.17.44.37,172.17.44.38:/ 142516224 11116544 131399680 8% /mnt/pve/cephfs |
ただ、これだと通常のPVE起動プロセスで実行される「VMとコンテナの一括起動」で仮想マシンが実行されなかった。おや?と思ったら、設定が変わってた
1 | root@pve36:~# ha-manager status |
3 | master pve39 (active, Mon Nov 11 18:24:13 2024) |
4 | lrm pve36 (idle, Mon Nov 11 18:24:15 2024) |
5 | lrm pve37 (idle, Mon Nov 11 18:24:18 2024) |
6 | lrm pve38 (idle, Mon Nov 11 18:24:18 2024) |
7 | lrm pve39 (idle, Mon Nov 11 18:24:15 2024) |
8 | service vm:100 (pve37, stopped) |
9 | service vm:101 (pve38, stopped) |
10 | service vm:102 (pve36, stopped) |
11 | service vm:103 (pve38, stopped) |
12 | root@pve36:~# ha-manager config |