Proxmox VE 7.2 Ceph upgrade Octopus to Pacific

Proxmox VE 7.2でCephのバージョンをOctopusからPacificにインプレースアップグレードします。

はじめに

Proxmox VE 7.2でCephのバージョンをOctopusからPacificにインプレースアップグレードします。

手順は基本的に https://pve.proxmox.com/wiki/Ceph_Octopus_to_Pacific に従いますが、一部環境に合わせてスキップ・修正しながら進めていきます。

事前確認

Cephのバージョン確認

使用しているCephのバージョンは以下の通りです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
root@pve01:~# ceph versions
{
    "mon": {
        "ceph version 15.2.17 (542df8d06ef24dbddcf4994db16bcc4c89c9ec2d) octopus (stable)": 3
    },
    "mgr": {
        "ceph version 15.2.17 (542df8d06ef24dbddcf4994db16bcc4c89c9ec2d) octopus (stable)": 3
    },
    "osd": {
        "ceph version 15.2.17 (542df8d06ef24dbddcf4994db16bcc4c89c9ec2d) octopus (stable)": 3
    },
    "mds": {
        "ceph version 15.2.17 (542df8d06ef24dbddcf4994db16bcc4c89c9ec2d) octopus (stable)": 1
    },
    "overall": {
        "ceph version 15.2.17 (542df8d06ef24dbddcf4994db16bcc4c89c9ec2d) octopus (stable)": 10
    }
}

Known_Issues の事前確認

既知の不具合が Known Issues にまとまっていますので、同じ問題を踏まないか事前に確認します。

  • RocksDB resharding broken before 16.2.6
  • Monitor crashes after upgrade
    • wait until Ceph Octopus v15.2.14 can be installed before you upgrade to Pacific. と書かれているように、現在のバージョンが 15.2.17 なので、問題なしと判定
  • Monitor crashes after minor 16.2.6 to 16.2.7 upgrade
    • 15.2.17 -> 16.2.9 の場合は問題となる 16.2.6 を挟まないので問題なしと判定
  • Data corruption on OMAP conversion
    • こちらも問題となる 16.2.6 を挟まないので問題なしと判定

既知の問題は発生しないと見込まれるので、アップデートに挑戦します。
バックアップなどは各自適当に取得しておいてください。

アップデートの実施

Enable msgrv2 protocol and update Ceph configuration

v1/v2のプロトコルが利用されていることが確認できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
root@pve01:~# ceph mon dump
dumped monmap epoch 8
epoch 8
fsid 379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
last_changed 2021-08-11T19:12:31.443086+0900
created 2017-11-24T23:57:30.396282+0900
min_mon_release 15 (octopus)
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

Check if bluestore_fsck_quick_fix_on_mount is disabled

今回は 15.2.17 -> 16.2.9 なので、以下はtrueで問題ありません。

1
2
root@pve01:~# ceph config get osd bluestore_fsck_quick_fix_on_mount
true

Preparation on each Ceph cluster node

リポジトリを Octopus から Pacific に変更します。
これは全てのノードで実行します。

1
2
3
4
5
root@pve01:~# cat /etc/apt/sources.list.d/ceph.list
deb http://download.proxmox.com/debian/ceph-octopus bullseye main
root@pve01:~# sed -i 's/octopus/pacific/' /etc/apt/sources.list.d/ceph.list
root@pve01:~# cat /etc/apt/sources.list.d/ceph.list
deb http://download.proxmox.com/debian/ceph-pacific bullseye main

Set the ’noout’ flag

Cephクラスタの自動調整を一時的に無効にします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@pve01:~# ceph osd set noout
noout is set
root@pve01:~# pveceph status
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 5d)
    mgr: pve02(active, since 5d), standbys: pve03, pve01
    mds: cephfs:1 {0=pve02=up:active} 2 up:standby
    osd: 3 osds: 3 up (since 5d), 3 in (since 5d)
         flags noout
 
  data:
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   2.7 KiB/s rd, 872 KiB/s wr, 0 op/s rd, 46 op/s wr

Upgrade on each Ceph cluster node

CephのパッケージをPacificに更新します。全てのノードで順番に実行します。
Ceph以外のパッケージをアップデートに含めたくないので、aptコマンドにはcephのリポジトリだけを参照するようにオプションを追加しています。

 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:~# apt update -o Dir::Etc::sourcelist="sources.list.d/ceph.list" -o Dir::Etc::sourceparts="-"
root@pve01:~# apt list --upgradable
Listing... Done
ceph-base/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
ceph-common/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
ceph-fuse/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
ceph-mds/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
ceph-mgr-modules-core/stable 16.2.9-pve1 all [upgradable from: 15.2.17-pve1]
ceph-mgr/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
ceph-mon/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
ceph-osd/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
ceph/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
libcephfs2/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
librados2/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
libradosstriper1/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
librbd1/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
librgw2/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
python3-ceph-argparse/stable 16.2.9-pve1 all [upgradable from: 15.2.17-pve1]
python3-ceph-common/stable 16.2.9-pve1 all [upgradable from: 15.2.17-pve1]
python3-cephfs/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
python3-rados/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
python3-rbd/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
python3-rgw/stable 16.2.9-pve1 amd64 [upgradable from: 15.2.17-pve1]
root@pve01:~# apt full-upgrade

この時点では、Cephの各プロセスはOctopusのまま動作が継続しています。

aptオプションの参考: https://askubuntu.com/questions/65245/apt-get-update-only-for-a-specific-repository

Restart the monitor daemon

Ceph monitorを再起動します。全てのノードで順番に実行します。

1
root@pve01:~# systemctl restart ceph-mon.target

全てのノードで再起動が終わる前。

1
2
3
root@pve01:~# ceph mon dump | grep min_mon_release
dumped monmap epoch 8
min_mon_release 15 (octopus)

全てのノードで再起動が終わったあと。

1
2
3
root@pve01:~# ceph mon dump | grep min_mon_release
dumped monmap epoch 9
min_mon_release 16 (pacific)

min_mon_release 16 (pacific) が確認できたのでOKです。

Restart the manager daemons on all nodes

Ceph managerを再起動します。全てのノードで順番に実行します。

1
root@pve01:~# systemctl restart ceph-mgr.target

全てのノードで再起動後 mgr: pve02(active, since 70s), standbys: pve01, pve03 でactive 1台、standbys 2台になったのでOKです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@pve01:~# pveceph status
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 2m)
    mgr: pve02(active, since 70s), standbys: pve01, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 5d), 3 in (since 5d)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   1023 B/s rd, 785 KiB/s wr, 0 op/s rd, 34 op/s wr

Restart the OSD daemon on all nodes

Ceph OSD daemonを再起動します。
全てのノードで順番に再起動しますが、フォーマット変換が行われるので、再起動してもすぐには起動が完了しません。
1台目のdaemon再起動 -> 処理完了 -> 2台目のdaemon再起動 となるようにフォーマット変換処理の完了を待って、次のノードの作業に移る必要があります。

1
root@pve01:~# systemctl restart ceph-osd.target

再起動時にOSDのフォーマット変換が行われるので、すぐには起動が完了しません。

 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
root@pve01:~# pveceph status
  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: 178641/535923 objects degraded (33.333%), 112 pgs degraded
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 4m)
    mgr: pve02(active, since 2m), standbys: pve01, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 2 up (since 27s), 3 in (since 5d)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     178641/535923 objects degraded (33.333%)
             112 active+undersized+degraded
             17  active+undersized
 
  io:
    client:   0 B/s rd, 860 KiB/s wr, 0 op/s rd, 46 op/s wr

以下のように 1 osds down が解消されるまで待ってから次のノードの作業に入りましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@pve01:~# pveceph status
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 8m)
    mgr: pve02(active, since 6m), standbys: pve01, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 4m), 3 in (since 5d)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   0 B/s rd, 910 KiB/s wr, 0 op/s rd, 54 op/s wr

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

OSDはPacificが必須であることを明示します。

1
ceph osd require-osd-release pacific

なお、Ceph 16.2.8 以降は以下のように all OSDs are running pacific or later but require_osd_release < pacific と分かりやすい警告が出るようになりました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@pve01:~# pveceph status
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
            all OSDs are running pacific or later but require_osd_release < pacific
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 17m)
    mgr: pve02(active, since 15m), standbys: pve01, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 71s), 3 in (since 5d)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   0 B/s rd, 1.1 MiB/s wr, 0 op/s rd, 56 op/s wr

ceph osd require-osd-release pacific を実行後は以下のように警告が解消されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@pve01:~# pveceph status
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            noout flag(s) set
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 18m)
    mgr: pve02(active, since 16m), standbys: pve01, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 2m), 3 in (since 5d)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   0 B/s rd, 1001 KiB/s wr, 0 op/s rd, 41 op/s wr

Upgrade all CephFS MDS daemons

元々CephFS MDSは mds: 1/1 daemons up, 2 standby となっているので、pve02/pve03でMDS daemonを停止します。

1
2
root@pve02:~# systemctl stop ceph-mds.target
root@pve03:~# systemctl stop ceph-mds.target

以下のように mds: 1/1 daemons up となります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@pve01:~# ceph status
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_WARN
            insufficient standby MDS daemons available
            noout flag(s) set
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 20m)
    mgr: pve02(active, since 19m), standbys: pve01, pve03
    mds: 1/1 daemons up
    osd: 3 osds: 3 up (since 4m), 3 in (since 5d)
         flags noout
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   10 KiB/s rd, 1.2 MiB/s wr, 1 op/s rd, 56 op/s wr

pve01でMDS daemonを再起動します。

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

その後、pve02/pve03で停止していたMDS daemonを起動します。

1
2
root@pve02:~# systemctl start ceph-mds.target
root@pve03:~# systemctl start ceph-mds.target

ceph statusを見て mds: 1/1 daemons up, 2 standby のようになれば完了です。

Unset the ’noout’ flag

クラスタの自動調整を有効に戻します。

1
2
root@pve01:~# ceph osd unset noout
noout is unset

クラスタの状態確認

最後に、バージョンが 16.2.9 であること、ステータスが health: HEALTH_OK になることを確認して完了です。

 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
root@pve01:~# ceph versions
{
    "mon": {
        "ceph version 16.2.9 (a569859f5e07da0c4c39da81d5fb5675cd95da49) pacific (stable)": 3
    },
    "mgr": {
        "ceph version 16.2.9 (a569859f5e07da0c4c39da81d5fb5675cd95da49) pacific (stable)": 3
    },
    "osd": {
        "ceph version 16.2.9 (a569859f5e07da0c4c39da81d5fb5675cd95da49) pacific (stable)": 3
    },
    "mds": {
        "ceph version 16.2.9 (a569859f5e07da0c4c39da81d5fb5675cd95da49) pacific (stable)": 3
    },
    "overall": {
        "ceph version 16.2.9 (a569859f5e07da0c4c39da81d5fb5675cd95da49) pacific (stable)": 12
    }
}
root@pve01:~# pveceph status
  cluster:
    id:     379c9ad8-dd15-4bf1-b9fc-f5206a75fe3f
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum pve01,pve02,pve03 (age 24m)
    mgr: pve02(active, since 23m), standbys: pve01, pve03
    mds: 1/1 daemons up, 2 standby
    osd: 3 osds: 3 up (since 8m), 3 in (since 5d)
 
  data:
    volumes: 1/1 healthy
    pools:   4 pools, 129 pgs
    objects: 178.64k objects, 693 GiB
    usage:   2.0 TiB used, 3.5 TiB / 5.5 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   55 KiB/s rd, 1.2 MiB/s wr, 0 op/s rd, 37 op/s wr

あとがき

深夜のCephアップデート一本勝負、上手くいきました。
Proxmox VEは運用ドキュメントが本当に丁寧に書かれているので、読みながら実行するだけでも勉強になります。

で、アップデートしたばかりですが Proxmox VE 7.3 からは Ceph Quincy というのにアップデートする必要がありそうです。
Ceph Pacific to Quincy - Proxmox VE

変化の早さについていけない…

Built with Hugo
テーマ StackJimmy によって設計されています。