Proxmox VE Ceph upgrade quincy to reef

Proxmox VE Ceph Quincy(17.x) to Reef(18.x)のupgradeメモ

Summary

Proxmox VE Ceph Quincy(17.x) to Reef(18.x)のupgradeメモが出てきたので置いておきます。
基本は公式のアップグレード手順通り。

https://pve.proxmox.com/wiki/Ceph_Quincy_to_Reef

実際に作業したのは2024年11月末くらいのはず。

Cephのリリースノートは https://docs.ceph.com/en/latest/releases/reef/ ですね。

Note

ceph コマンドは全ノードに適用されるので、どれか1つのノードで実行すればよいです。

Check versions

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
root@pve01:~# ceph mon dump
epoch 10
fsid 379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
last_changed 2023-11-27T11:41:43.050564+0900
created 2017-11-24T23:57:30.396282+0900
min_mon_release 17 (quincy)
election_strategy: 1
0: [v2:192.168.122.26:3300/0,v1:192.168.122.26:6789/0] mon.pve01
1: [v2:192.168.122.27:3300/0,v1:192.168.122.27:6789/0] mon.pve02
2: [v2:192.168.122.28:3300/0,v1:192.168.122.28:6789/0] mon.pve03
dumped monmap epoch 10

Set the ’noout’ flag

1
ceph osd set noout

Package upgrade

これは全ノードで実施します。なお、Ceph以外のアップデートが入り込まないように、Cephのバージョン更新前にシステム側のアップデートを終えてから作業する方が安全でしょう。

1
2
3
4
5
root@pve01:~# sed -i 's/quincy/reef/' /etc/apt/sources.list.d/ceph.list 
root@pve01:~# cat /etc/apt/sources.list.d/ceph.list 
deb http://download.proxmox.com/debian/ceph-reef bookworm no-subscription
root@pve01:~# apt update
root@pve01:~# apt full-upgrade

Restart the monitor daemon

再起動前の状態を確認します。placement groupsの警告は動作自体にはさほど影響しないので無視します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@pve01:~# ceph -s
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
            2 pools have too many placement groups
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 21h)
    mgr: pve01(active, since 21h), standbys: pve02, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 21h), 3 in (since 2y)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 253.54k objects, 952 GiB
    usage:   2.2 TiB used, 3.2 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   341 B/s rd, 989 KiB/s wr, 0 op/s rd, 36 op/s wr
 

monitorを再起動して、1台ずつ問題ないことを確認しながら進めます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
root@pve01:~# systemctl restart ceph-mon.target
root@pve01:~# systemctl status ceph-mon.target
 ceph-mon.target - ceph target allowing to start/stop all ceph-mon@.service instances at once
     Loaded: loaded (/lib/systemd/system/ceph-mon.target; enabled; preset: enabled)
     Active: active since Fri 2024-11-29 22:28:51 JST; 17s ago

Nov 29 22:28:51 pve01 systemd[1]: Reached target ceph-mon.target - ceph target allowing to start/stop all ceph-mon@.service >

root@pve01:~# ceph -s
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
            2 pools have too many placement groups
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 1.1534s)
    mgr: pve01(active, since 21h), standbys: pve02, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 21h), 3 in (since 2y)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 253.54k objects, 952 GiB
    usage:   2.2 TiB used, 3.2 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   1.3 KiB/s rd, 572 KiB/s wr, 0 op/s rd, 18 op/s wr
 
root@pve01:~# ceph versions
{
    "mon": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 2,
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 1
    },
    "mgr": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "osd": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 3
    },
    "mds": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 3
    },
    "overall": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 8,
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 4
    }
}

ここまで全部終わると、mon/mgrが18.2.4になります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@pve03:~# ceph versions
{
    "mon": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "mgr": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "osd": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 3
    },
    "mds": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 3
    },
    "overall": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 6,
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 6
    }
}
root@pve03:~# ceph mon dump | grep min_mon_release
dumped monmap epoch 11
min_mon_release 18 (reef)

Restart the OSD daemon on all nodes

次にOSDを再起動していきます。これはCephの実データ保存場所が一旦ダウンするので、回復には少しかかります。私の環境だと30秒くらいでしょうか。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
root@pve01:~# systemctl restart ceph-osd.target
root@pve01:~# systemctl status ceph-osd.target
 ceph-osd.target - ceph target allowing to start/stop all ceph-osd@.service instances at once
     Loaded: loaded (/lib/systemd/system/ceph-osd.target; enabled; preset: enabled)
     Active: active since Fri 2024-11-29 22:32:31 JST; 22s ago

Nov 29 22:32:31 pve01 systemd[1]: Reached target ceph-osd.target - ceph target allowing to start/stop all ceph-osd@.service >
root@pve01:~# ceph -s
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
            1 osds down
            1 host (1 osds) down
            Degraded data redundancy: 253542/760626 objects degraded (33.333%), 112 pgs degraded
            2 pools have too many placement groups
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 2m)
    mgr: pve01(active, since 3m), standbys: pve03, pve02
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 2 up (since 10s), 3 in (since 2y)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 253.54k objects, 952 GiB
    usage:   2.2 TiB used, 3.2 TiB / 5.5 TiB avail
    pgs:     253542/760626 objects degraded (33.333%)
             112 active+undersized+degraded
             17  active+undersized
 
  io:
    client:   308 B/s rd, 2.0 MiB/s wr, 0 op/s rd, 69 op/s wr
    recovery: 21 KiB/s, 1 objects/s
 

以下くらいの出力になるまで待てば良いでしょう。

1
2
3
4
5
root@pve01:~# ceph -s | grep -A3 health:
    health: HEALTH_WARN
            noout flag(s) set
            2 pools have too many placement groups
 

全ノードで対応が完了したら、osdのバージョンも18.2.4で統一されたことが確認できました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
root@pve03:~# ceph versions
{
    "mon": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "mgr": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "osd": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "mds": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 3
    },
    "overall": {
        "ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)": 3,
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 9
    }
}

Disallow pre-Reef OSDs and enable all new Reef-only functionality

古いOSDが参加できないように、reef以上のバージョンを必須にしておきます。
Ceph 17.x以前しかサポートしていないノードをクラスタに参加させておきたい場合は指定しないケースもあるかもしれません。

1
ceph osd require-osd-release reef

Upgrade all CephFS MDS daemons

これはCephFSで使用しているファイルシステムで1つ1つ実行する必要があります。

1
2
root@pve01:~# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

standby_replay オプションを無効にします。

1
ceph fs set cephfs allow_standby_replay false

max_mds を一時的に1に減らす必要があるらしいのですが、私の環境では max_mds は1なのでそのままです。

1
2
root@pve01:~# ceph fs get cephfs | grep max_mds
max_mds 1

standby状態のMDS daemonsを停止します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
root@pve01:~# ceph fs status
cephfs - 3 clients
======
RANK  STATE    MDS      ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  pve03  Reqs:    0 /s   878     46     17     16   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  40.3M  1005G  
  cephfs_data      data    49.8G  1005G  
STANDBY MDS  
   pve02     
   pve01     
MDS version: ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)

STANDBY MDSは pve01pve02 なので、その2台でMDSを停止します。

1
2
root@pve01:~# systemctl stop ceph-mds@pve01.service
root@pve02:~# systemctl stop ceph-mds@pve02.service

ACTIVEなMDS daemonsが1つだけ、RANKが0になっていることを確認して、残ったノードのMDS daemonを再起動します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
root@pve03:~# ceph fs status
cephfs - 3 clients
======
RANK  STATE    MDS      ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  pve03  Reqs:    0 /s   878     46     17     16   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  40.3M  1005G  
  cephfs_data      data    49.8G  1005G  
MDS version: ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)
root@pve03:~# systemctl restart ceph-mds.target
root@pve03:~# ceph fs status
cephfs - 3 clients
======
RANK  STATE    MDS      ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  pve03  Reqs:    0 /s   878     46     17     15   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  40.4M  1005G  
  cephfs_data      data    49.8G  1005G  
MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)

ACTIVEなMDS daemonsが18.2.4に更新されたので、最後にstopしていたMDS daemonsを起動します。

1
2
root@pve01:~# systemctl restart ceph-mds.target
root@pve02:~# systemctl restart ceph-mds.target

STANDBY MDSが復帰してきたら完了です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
root@pve03:~# ceph fs status
cephfs - 3 clients
======
RANK  STATE    MDS      ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  pve03  Reqs:    0 /s   878     46     17     15   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  40.4M  1005G  
  cephfs_data      data    49.8G  1005G  
STANDBY MDS  
   pve01     
   pve02     
MDS version: ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)

Unset the ’noout’ flag and Completed!!

最後に noout オプションを解除して、ステータスとバージョンに異状が無いことを確認したら完了です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
root@pve01:~# ceph osd unset noout
noout is unset
root@pve01:~# ceph -s
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            2 pools have too many placement groups
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 25m)
    mgr: pve01(active, since 27m), standbys: pve03, pve02
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 19m), 3 in (since 2y)
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 253.55k objects, 952 GiB
    usage:   2.2 TiB used, 3.2 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   341 B/s rd, 1.3 MiB/s wr, 0 op/s rd, 33 op/s wr
 
root@pve01:~# ceph versions
{
    "mon": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "mgr": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "osd": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "mds": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 3
    },
    "overall": {
        "ceph version 18.2.4 (2064df84afc61c7e63928121bfdd74c59453c893) reef (stable)": 12
    }
}

お疲れ様でした。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。