Proxmox VEクラスタをUPSで停止する手法のメモ(調査段階

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 コマンドを調べるとこちらでも停止させることができる模様なので下記で実施

1for 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

実行例

1root@pve36:~# for hostname in `pvesh ls /nodes/|awk '{ print $2 }'`
2> do for vmid in `pvesh ls /nodes/$hostname/qemu/|awk '{ print $2 }'`
3>   do
4>     pvesh create /nodes/$hostname/qemu/$vmid/status/shutdown
5>   done
6> done
7VM 102 not running
8 
9Requesting HA stop for VM 102
10UPID:pve36:00014A47:0018FC0A:6731A591:hastop:102:root@pam:
11VM 100 not running
12Requesting HA stop for VM 100"UPID:pve37:00013A71:0018FDDC:6731A597:hastop:100:root@pam:"
13VM 101 not running
14Requesting HA stop for VM 101"UPID:pve38:000144BF:00192F03:6731A59D:hastop:101:root@pam:"
15Requesting HA stop for VM 103"UPID:pve38:000144DC:0019305D:6731A5A0:hastop:103:root@pam:"
16root@pve36:~#

これで、停止することを確認

次に仮想マシンの停止確認

1root@pve36:~# pvesh get /nodes/pve36/qemu
2lqqqqqqqqqwqqqqqqwqqqqqqwqqqqqqwqqqqqqqqqqqwqqqqqqqqqqwqqqqqqqqqwqqqqqwqqqqqqqqqqqwqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqwqqqqqqwqqqqqqqqk
3x 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
4tqqqqqqqqqnqqqqqqnqqqqqqnqqqqqqnqqqqqqqqqqqnqqqqqqqqqqnqqqqqqqqqnqqqqqnqqqqqqqqqqqnqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqnqqqqqqnqqqqqqqqu
5x stopped x  102 x    2 x      x 32.00 GiB x 2.00 GiB x testvm2 x     x           x                 x              x      x     0s x
6mqqqqqqqqqvqqqqqqvqqqqqqvqqqqqqvqqqqqqqqqqqvqqqqqqqqqqvqqqqqqqqqvqqqqqvqqqqqqqqqqqvqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqvqqqqqqvqqqqqqqqj
7root@pve36:~#

ヘッダーを付けない形式で出力

1root@pve36:~# pvesh get /nodes/pve36/qemu --noborder --noheader
2stopped  102    2      32.00 GiB 2.00 GiB testvm2                                                 0s
3root@pve36:~#

“stopped” となってない行があればまだ停止していない、ということになるので「pvesh get /nodes/pve36/qemu –noborder –noheader|grep -v “stopped”」の出力結果があるかどうかで判断できそう

また、これらはqemu仮想マシンについてのみなので、lxcコンテナについては含まれないので、そちらについても対応する

停止

1for 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”になっているか、で判定するなら下記

1for 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側だと下記だけ

1ceph osd set noout
2ceph osd set norecover
3ceph osd set norebalance
4ceph osd set nobackfill
5ceph osd set nodown
6ceph osd set pause

RedHat側にはこれらを実行する前にcephfsを停止するための手順が追加されている。

1ceph fs set FS_NAME max_mds 1
2ceph mds deactivate FS_NAME:1 # rank 2 of 2
3ceph status # wait for rank 1 to finish stopping
4ceph fs set FS_NAME cluster_down true
5ceph mds fail FS_NAME:0

ceph fs setで設定しているmax_mdsとcluster_downの値はどうなっているのかを確認

1root@pve36:~# ceph fs get cephfs
2Filesystem 'cephfs' (1)
3fs_name cephfs
4epoch   65
5flags   12 joinable allow_snaps allow_multimds_snaps
6created 2024-11-05T14:29:45.941671+0900
7modified        2024-11-11T11:04:06.223151+0900
8tableserver     0
9root    0
10session_timeout 60
11session_autoclose       300
12max_file_size   1099511627776
13max_xattr_size  65536
14required_client_features        {}
15last_failure    0
16last_failure_osd_epoch  3508
17compat  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}
18max_mds 1
19in      0
20up      {0=784113}
21failed
22damaged
23stopped
24data_pools      [3]
25metadata_pool   4
26inline_data     disabled
27balancer
28bal_rank_mask   -1
29standby_count_wanted    1
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]}]
31root@pve36:~#

cluster_downはない?

1root@pve36:~# ceph mds stat
2cephfs:1 {0=pve36=up:active} 1 up:standby
3root@pve36:~# ceph mds compat show
4compat={},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}
5root@pve36:~#

んー? ceph fsのcluster_down を実行してみる

1root@pve36:~# ceph fs set cephfs cluster_down true
2cephfs 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".
3root@pve36:~#

joinableを使えとあるので、この記述は古いらしい

おや?と思って再度探したところRedHatのドキュメントが古かった。RedHat「2.5. Red Hat Ceph Storage クラスターの電源をオフにして再起動」、もしくはIBMの「Ceph File System ・クラスターの停止

1ceph fs set FS_NAME max_mds 1
2ceph fs fail FS_NAME
3ceph status
4ceph fs set FS_NAME joinable false

IBM手順の方だとmax_mdsの操作は行わずに実施している

1root@pve36:~# ceph fs status
2cephfs - 4 clients
3======
4RANK  STATE    MDS      ACTIVITY     DNS    INOS   DIRS   CAPS
5 0    active  pve36  Reqs:    0 /s    21     20     16     23
6      POOL         TYPE     USED  AVAIL
7cephfs_metadata  metadata   244M   122G
8  cephfs_data      data    31.8G   122G
9STANDBY MDS
10   pve37
11MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)
12root@pve36:~# ceph fs fail cephfs
13cephfs marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed.
14root@pve36:~# ceph fs status
15cephfs - 0 clients
16======
17RANK  STATE   MDS  ACTIVITY  DNS  INOS  DIRS  CAPS
18 0    failed
19      POOL         TYPE     USED  AVAIL
20cephfs_metadata  metadata   244M   122G
21  cephfs_data      data    31.8G   122G
22STANDBY MDS
23   pve37
24   pve36
25MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)
26root@pve36:~# ceph fs fail cephfs
27cephfs marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed.
28root@pve36:~# echo $?
290
30root@pve36:~#  ceph fs set cephfs joinable false
31cephfs marked not joinable; MDS cannot join as newly active.
32root@pve36:~# echo $?
330
34root@pve36:~# ceph fs status
35cephfs - 0 clients
36======
37RANK  STATE   MDS  ACTIVITY  DNS  INOS  DIRS  CAPS
38 0    failed
39      POOL         TYPE     USED  AVAIL
40cephfs_metadata  metadata   244M   122G
41  cephfs_data      data    31.8G   122G
42STANDBY MDS
43   pve37
44   pve36
45MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)
46root@pve36:~#

…止めてしまったら、dfコマンドが実行できなくなるので注意

1root@pve36:~# ceph osd stat
216 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3599
3root@pve36:~# ceph osd set noout
4noout is set
5root@pve36:~# ceph osd set norecover
6norecover is set
7root@pve36:~# ceph osd set norebalance
8norebalance is set
9root@pve36:~# ceph osd set nobackfill
10nobackfill is set
11root@pve36:~# ceph osd set nodown
12nodown is set
13root@pve36:~# ceph osd set pause
14pauserd,pausewr is set
15root@pve36:~# ceph osd stat
1616 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605
17flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
18root@pve36:~#

ドキュメントに「重要 上記の例は、OSD ノード内のサービスと各 OSD を停止する場合のみであり、各 OSD ノードで繰り返す必要があります。」とあるので、各サーバで確認してみたが、別に各サーバで実行する必要はなさそうである。

1root@pve36:~# ceph osd stat
216 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605
3flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
4root@pve36:~# ssh pve37 ceph osd stat
516 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605
6flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
7root@pve36:~# ssh pve38 ceph osd stat
816 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605
9flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
10root@pve36:~# ssh pve39 ceph osd stat
1116 osds: 16 up (since 6h), 16 in (since 3d); epoch: e3605
12flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
13root@pve36:~#

このあと、各サーバに対してshutdown -h nowを実行して止めた

起動後

1root@pve36:~# ceph status
2  cluster:
3    id:     4647497d-17da-46f4-8e7b-231365d96e42
4    health: HEALTH_ERR
5            1 filesystem is degraded
6            1 filesystem is offline
7            pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover flag(s) set
8 
9  services:
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
15 
16  data:
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
21    pgs:     193 active+clean
22 
23root@pve36:~# ceph osd stat
2416 osds: 16 up (since 69s), 16 in (since 3d); epoch: e3621
25flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
26root@pve36:~#
27 
28root@pve36:~# ceph fs ls
29name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
30root@pve36:~# ceph fs status
31cephfs - 0 clients
32======
33RANK  STATE   MDS  ACTIVITY  DNS  INOS  DIRS  CAPS
34 0    failed
35      POOL         TYPE     USED  AVAIL
36cephfs_metadata  metadata   244M   125G
37  cephfs_data      data    31.8G   125G
38STANDBY MDS
39   pve37
40   pve36
41MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)
42root@pve36:~#

復帰のためのコマンド群1

1root@pve36:~# ceph osd unset noout
2noout is unset
3root@pve36:~# ceph osd unset norecover
4norecover is unset
5root@pve36:~# ceph osd unset norebalance
6norebalance is unset
7root@pve36:~#  ceph osd unset nobackfill
8nobackfill is unset
9root@pve36:~# ceph osd unset nodown
10nodown is unset
11root@pve36:~# ceph osd unset pause
12pauserd,pausewr is unset
13root@pve36:~# ceph osd stat
1416 osds: 16 up (since 100s), 16 in (since 3d); epoch: e3627
15root@pve36:~# ceph status
16  cluster:
17    id:     4647497d-17da-46f4-8e7b-231365d96e42
18    health: HEALTH_ERR
19            1 filesystem is degraded
20            1 filesystem is offline
21 
22  services:
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)
27 
28  data:
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
33    pgs:     193 active+clean
34 
35  io:
36    client:   21 KiB/s rd, 0 B/s wr, 9 op/s rd, 1 op/s wr
37 
38root@pve36:~#

ファイルシステム再開

1root@pve36:~# ceph fs set cephfs joinable true
2cephfs marked joinable; MDS may join as newly active.
3root@pve36:~# ceph fs status
4cephfs - 4 clients
5======
6RANK    STATE     MDS   ACTIVITY   DNS    INOS   DIRS   CAPS
7 0    reconnect  pve36              10     10      6      0
8      POOL         TYPE     USED  AVAIL
9cephfs_metadata  metadata   244M   125G
10  cephfs_data      data    31.8G   125G
11STANDBY MDS
12   pve37
13MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)
14root@pve36:~# ceph osd stat
1516 osds: 16 up (since 2m), 16 in (since 3d); epoch: e3627
16root@pve36:~# cpeh status
17-bash: cpeh: command not found
18root@pve36:~# ceph status
19  cluster:
20    id:     4647497d-17da-46f4-8e7b-231365d96e42
21    health: HEALTH_WARN
22            1 filesystem is degraded
23 
24  services:
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)
29 
30  data:
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
35    pgs:     193 active+clean
36 
37root@pve36:~#
38root@pve36:~# ceph fs status
39cephfs - 4 clients
40======
41RANK  STATE    MDS   ACTIVITY   DNS    INOS   DIRS   CAPS
42 0    rejoin  pve36              10     10      6      0
43      POOL         TYPE     USED  AVAIL
44cephfs_metadata  metadata   244M   125G
45  cephfs_data      data    31.8G   125G
46STANDBY MDS
47   pve37
48MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)
49root@pve36:~# df
50Filesystem           1K-blocks     Used Available Use% Mounted on
51udev                   8156156        0   8156156   0% /dev
52tmpfs                  1638000     1124   1636876   1% /run
53/dev/mapper/pve-root  28074060 14841988  11780656  56% /
54tmpfs                  8189984    73728   8116256   1% /dev/shm
55tmpfs                     5120        0      5120   0% /run/lock
56/dev/fuse               131072       36    131036   1% /etc/pve
57tmpfs                  8189984       28   8189956   1% /var/lib/ceph/osd/ceph-2
58tmpfs                  8189984       28   8189956   1% /var/lib/ceph/osd/ceph-0
59tmpfs                  8189984       28   8189956   1% /var/lib/ceph/osd/ceph-1
60tmpfs                  8189984       28   8189956   1% /var/lib/ceph/osd/ceph-3
61tmpfs                  1637996        0   1637996   0% /run/user/0
62root@pve36:~# ceph fs status
63cephfs - 0 clients
64======
65RANK  STATE    MDS      ACTIVITY     DNS    INOS   DIRS   CAPS
66 0    active  pve36  Reqs:    0 /s    10     10      6      0
67      POOL         TYPE     USED  AVAIL
68cephfs_metadata  metadata   244M   125G
69  cephfs_data      data    31.8G   125G
70STANDBY MDS
71   pve37
72MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)
73root@pve36:~# df
74Filesystem                               1K-blocks     Used Available Use% Mounted on
75udev                                       8156156        0   8156156   0% /dev
76tmpfs                                      1638000     1128   1636872   1% /run
77/dev/mapper/pve-root                      28074060 14841992  11780652  56% /
78tmpfs                                      8189984    73728   8116256   1% /dev/shm
79tmpfs                                         5120        0      5120   0% /run/lock
80/dev/fuse                                   131072       36    131036   1% /etc/pve
81tmpfs                                      8189984       28   8189956   1% /var/lib/ceph/osd/ceph-2
82tmpfs                                      8189984       28   8189956   1% /var/lib/ceph/osd/ceph-0
83tmpfs                                      8189984       28   8189956   1% /var/lib/ceph/osd/ceph-1
84tmpfs                                      8189984       28   8189956   1% /var/lib/ceph/osd/ceph-3
85tmpfs                                      1637996        0   1637996   0% /run/user/0
86172.17.44.36,172.17.44.37,172.17.44.38:/ 142516224 11116544 131399680   8% /mnt/pve/cephfs
87root@pve36:~#

ただ、これだと通常のPVE起動プロセスで実行される「VMとコンテナの一括起動」で仮想マシンが実行されなかった。おや?と思ったら、設定が変わってた

1root@pve36:~# ha-manager status
2quorum OK
3master pve39 (active, Mon Nov 11 18:24:13 2024)
4lrm pve36 (idle, Mon Nov 11 18:24:15 2024)
5lrm pve37 (idle, Mon Nov 11 18:24:18 2024)
6lrm pve38 (idle, Mon Nov 11 18:24:18 2024)
7lrm pve39 (idle, Mon Nov 11 18:24:15 2024)
8service vm:100 (pve37, stopped)
9service vm:101 (pve38, stopped)
10service vm:102 (pve36, stopped)
11service vm:103 (pve38, stopped)
12root@pve36:~# ha-manager config
13vm:100
14        state stopped
15 
16vm:101
17        state stopped
18 
19vm:102
20        state stopped
21 
22vm:103
23        state stopped
24 
25root@pve36:~#

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

StatCounter - Free Web Tracker and Counter