はじめに
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
変化の早さについていけない…