こんにちは、キクです。
本記事は、僕が自己学習で学んだことをブログでアウトプットするシリーズになります。
最近「Ceph」という分散型のストレージソフトウェアを使うようになったのですが、僕自身これまでCephを触ったことがなかったので分からないことばかりで。
用語や登場人物については何となく分かってきつつも、「やっぱり実際に触ってみないと分からないことも多いよね!」という状況でした。
そんなわけで、今回は『Ceph学習用環境の構築』について書いていこうと思います。
本記事の内容
それでは、よろしくお願いします。
Cephについて
冒頭で「Cephは分散型のストレージソフトウェア」ということについて触れましたが、本項でもう少しだけ整理しておきます。
Cephはオープンソースのストレージソフトウェアに分類され、以下複数のストレージタイプを提供できる
- オブジェクトストレージ
- ブロックストレージ
- ファイルシステム
Cephでは「RADOS(Reliable Automatic Distributed Object Store)」と呼ばれるオブジェクトデータストアが基盤となっており、メタデータを含むCephが引き受けるデータはすべてここに集約される
そして「RADOSGW」「RBD」「CEPHFS」という3つのインターフェイスから、各ストレージタイプを扱うことが可能になっている
なお、本記事では「ブロックストレージ」を用いての動作確認もしていきます。
Ceph環境の構築
1. 仮想マシン準備
今回はVMware Workstationにて、以下の仮想マシンを準備する
2. Cephノード共通設定(OS)
パッケージ導入/起動設定
root@ceph0X:~# apt install -y ntp ntpdate ntp-doc
root@ceph0X:~# ntpdate ntp.nict.jp
root@ceph0X:~# hwclock --systohc
root@ceph0X:~# systemctl start ntp
root@ceph0X:~# systemctl enable ntp
root@ceph0X:~# apt install -y docker docker.io
root@ceph0X:~# systemctl start docker
root@ceph0X:~# systemctl enable docker
root@ceph0X:~# apt install -y python3
hostsファイル編集
root@ceph0X:~# vi /etc/hosts
追記
192.168.40.151 ceph01
192.168.40.152 ceph02
192.168.40.153 ceph03
192.168.40.160 ceph-client
SSH設定
rootユーザでの接続を許可する
root@ceph0X:~# vi /etc/ssh/sshd-config
追記
PermitRootLogin yes
root@ceph0X:~# passwd
root@ceph0X:~# systemctl restart sshd
3. cephadmパッケージのインストール(Cephノード#1のみ)
root@ceph01:~# apt install -y cephadm
4. Cephクラスタのデプロイ
root@ceph01:~# cephadm bootstratp --mon-ip 192.168.40.151
処理の途中に表示される以下の接続情報を用いてCephのダッシュボードへ接続できる
Ceph Dashboard is now available at:
URL: https://ceph01:8443/
User: admin
Password: パスワード
5. CephCLIの有効化
ceph-commnパッケージを導入することでcephコマンドが使えるようになる
root@ceph01:~# cephadm add-repo --release octpus
root@ceph01:~# cephadm install ceph-common
root@ceph01:~# cephadm shell
root@ceph01:/# exit
root@ceph01:~# ceph -s
6. ceph.pubキーの連携
root@ceph01:~# ssh-copy-id -f -i /etc/ceph/ceph.pub root@192.168.40.152
root@ceph01:~# ssh-copy-id -f -i /etc/ceph/ceph.pub root@192.168.40.153
各ノードに無事連携されているかを確認
root@ceph02:~# cat /root/.ssh/authorized_keys
root@ceph03:~# cat /root/.ssh/authorized_keys
7. Cephクラスタへのノード追加
root@ceph01:~# ceph orch host add ceph02 192.168.40.152
root@ceph01:~# ceph orch host add ceph03 192.168.40.153
ノード追加後の確認
root@ceph01:~# ceph orch host ls
HOST ADDR LABELS STATUS
ceph01 192.168.40.151 _admin
ceph02 192.168.40.152
ceph03 192.168.40.153
root@ceph01:~# ceph -s
cluster:
id: 1950c5ce-2528-11ef-af77-c9b795315e84
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 2m)
mgr: ceph01.ysiryi(active, since 22h), standbys: ceph02.yqwrrm
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
8. CephクラスタへのOSD(Object Storage Device)登録
以下のように「Available」が「Yes」となっているデバイスをOSDとして登録できる
root@kceph01:~# ceph orch device ls
HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS
ceph01 /dev/sdb hdd 10.0G Yes 16m ago
ceph02 /dev/sdb hdd 10.0G Yes 9m ago
ceph03 /dev/sdb hdd 10.0G Yes 3s ago
1つずつ指定して追加する場合には以下のようにコマンドを実行する
root@ceph01:~# ceph orch daemon add osd ceph01:/dev/sdb
root@ceph01:~# ceph orch daemon add osd ceph02:/dev/sdb
root@ceph01:~# ceph orch daemon add osd ceph03:/dev/sdb
OSD追加後の確認
root@ceph01:~# ceph -s
cluster:
id: 1950c5ce-2528-11ef-af77-c9b795315e84
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 68s)
mgr: ceph01.ysiryi(active, since 22h), standbys: ceph02.yqwrrm
osd: 3 osds: 3 up (since 96s), 3 in (since 2m)
data:
pools: 1 pools, 1 pgs
objects: 2 objects, 449 KiB
usage: 873 MiB used, 29 GiB / 30 GiB avail
pgs: 1 active+clean
root@ceph01:~# ceph orch device ls
HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS
ceph01 /dev/sdb hdd 10.0G Yes 6m ago Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph02 /dev/sdb hdd 10.0G Yes 3m ago Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph03 /dev/sdb hdd 10.0G Yes 2m ago Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph -sコマンドにおいてOSDの項目が3になったことが分かる
osd: 3 osds: 3 up (since 96s), 3 in (since 2m)
また、所定のOSD数(最低3)になったことで「HEALTH_OK」になった
cluster:
id: 1950c5ce-2528-11ef-af77-c9b795315e84
health: HEALTH_OK
なお「Available = Yes」のデバイスを一括で追加する場合には、以下のコマンドを実行すればOK
root@ceph01:~# ceph orch apply osd --all-available-devices
9. コンテナ確認
作業進行とは直接関係ないが、現時点での各Cephノードでのコンテナ稼働状況を確認してみる
root@ceph01:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PRTS NAMES
2b2c873579a7 quay.io/ceph/ceph "/usr/bin/ceph-osd -…" 27 minutes ago Up 27 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-osd-0
eef10e64774a quay.io/prometheus/prometheus:v2.43.0 "/bin/prometheus --c…" 32 minutes ago Up 32 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-prometheus-ceph01
9484d20bc252 quay.io/prometheus/alertmanager:v0.25.0 "/bin/alertmanager -…" 41 minutes ago Up 41 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-alertmanager-ceph01
c45dfe8d158d quay.io/ceph/ceph-grafana:9.4.7 "/bin/sh -c 'grafana…" 23 hours ago Up 23 hours ceph-1950c5ce-2528-11ef-af77-c9b795315e84-grafana-ceph01
a1673d9397c3 quay.io/prometheus/node-exporter:v1.5.0 "/bin/node_exporter …" 23 hours ago Up 23 hours ceph-1950c5ce-2528-11ef-af77-c9b795315e84-node-exporter-ceph01
40d7774df5ed quay.io/ceph/ceph "/usr/bin/ceph-crash…" 23 hours ago Up 23 hours ceph-1950c5ce-2528-11ef-af77-c9b795315e84-crash-ceph01
429e191b4f63 quay.io/ceph/ceph:v17 "/usr/bin/ceph-mgr -…" 23 hours ago Up 23 hours ceph-1950c5ce-2528-11ef-af77-c9b795315e84-mgr-ceph01-ysiryi
e09da78e5911 quay.io/ceph/ceph:v17 "/usr/bin/ceph-mon -…" 23 hours ago Up 23 hours ceph-1950c5ce-2528-11ef-af77-c9b795315e84-mon-ceph01
root@ceph02:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04c27c545028 quay.io/ceph/ceph "/usr/bin/ceph-osd -…" 26 minutes ago Up 26 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-osd-1
6edd80536822 quay.io/prometheus/node-exporter:v1.5.0 "/bin/node_exporter …" 44 minutes ago Up 44 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-node-exporter-ceph02
ca86e182e893 quay.io/ceph/ceph "/usr/bin/ceph-mon -…" 44 minutes ago Up 44 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-mon-ceph02
a20ab71af523 quay.io/ceph/ceph "/usr/bin/ceph-mgr -…" 44 minutes ago Up 44 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-mgr-ceph02-yqwrrm
435f30b32121 quay.io/ceph/ceph "/usr/bin/ceph-crash…" 44 minutes ago Up 44 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-crash-ceph02
root@ceph03:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24e1dc90b4b5 quay.io/ceph/ceph "/usr/bin/ceph-osd -…" 26 minutes ago Up 26 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-osd-2
975933ff8062 quay.io/prometheus/node-exporter:v1.5.0 "/bin/node_exporter …" 35 minutes ago Up 35 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-node-exporter-ceph03
2b3729196ff9 quay.io/ceph/ceph "/usr/bin/ceph-mon -…" 35 minutes ago Up 35 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-mon-ceph03
877c4df382dd quay.io/ceph/ceph "/usr/bin/ceph-crash…" 35 minutes ago Up 35 minutes ceph-1950c5ce-2528-11ef-af77-c9b795315e84-crash-ceph03
Cephノード#1でCephのサービス一覧を確認
root@ceph01:~# ceph orch ps
NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID
alertmanager.ceph01 ceph01 *:9093,9094 running (46m) 79s ago 23h 13.2M - 0.25.0 c8568f914cd2 9484d20bc252
crash.ceph01 ceph01 running (23h) 79s ago 23h 7100k - 17.2.7 ff4519c9e0a2 40d7774df5ed
crash.ceph02 ceph02 running (47m) 7m ago 47m 7088k - 17.2.7 ff4519c9e0a2 435f30b32121
crash.ceph03 ceph03 running (37m) 7m ago 37m 7100k - 17.2.7 ff4519c9e0a2 877c4df382dd
grafana.ceph01 ceph01 *:3000 running (23h) 79s ago 23h 76.9M - 9.4.7 954c08fa6188 c45dfe8d158d
mgr.ceph01.ysiryi ceph01 *:9283 running (23h) 79s ago 23h 505M - 17.2.7 ff4519c9e0a2 429e191b4f63
mgr.ceph02.yqwrrm ceph02 *:8443,9283 running (47m) 7m ago 47m 423M - 17.2.7 ff4519c9e0a2 a20ab71af523
mon.ceph01 ceph01 running (23h) 79s ago 23h 92.2M 2048M 17.2.7 ff4519c9e0a2 e09da78e5911
mon.ceph02 ceph02 running (47m) 7m ago 47m 41.3M 2048M 17.2.7 ff4519c9e0a2 ca86e182e893
mon.ceph03 ceph03 running (37m) 7m ago 37m 39.5M 2048M 17.2.7 ff4519c9e0a2 2b3729196ff9
node-exporter.ceph01 ceph01 *:9100 running (23h) 79s ago 23h 8859k - 1.5.0 0da6a335fe13 a1673d9397c3
node-exporter.ceph02 ceph02 *:9100 running (47m) 7m ago 47m 8536k - 1.5.0 0da6a335fe13 6edd80536822
node-exporter.ceph03 ceph03 *:9100 running (37m) 7m ago 37m 8116k - 1.5.0 0da6a335fe13 975933ff8062
osd.0 ceph01 running (32m) 79s ago 32m 63.5M 4096M 17.2.7 ff4519c9e0a2 2b2c873579a7
osd.1 ceph02 running (29m) 7m ago 29m 55.1M 4096M 17.2.7 ff4519c9e0a2 04c27c545028
osd.2 ceph03 running (28m) 7m ago 28m 55.0M 4096M 17.2.7 ff4519c9e0a2 24e1dc90b4b5
prometheus.ceph01 ceph01 *:9095 running (37m) 79s ago 23h 54.5M - 2.43.0 a07b618ecd1d eef10e64774a
CONTAINER IDが一致していることからも、Cephのサービスとして各コンテナが稼働していることが分かる
10. ブロックストレージ設定
Cephノード#1経由でCephクライアントに以下のコマンド群を実行する
root@ceph01:~# ssh ceph-client "apt install -y ceph-common"
root@ceph01:~# scp /etc/ceph/ceph.conf ceph-client:/etc/ceph/ceph.conf
root@ceph01:~# scp /etc/ceph/ceph.client.admin.keyring ceph-client:/etc/ceph/
root@ceph01:~# ssh ceph-client "chown ceph. /etc/ceph/ceph.*"
Cephクライアントにてブロックストレージ設定を実施する
root@ceph-client:~# ceph osd pool create test-pool 128
root@ceph-client:~# ceph osd pool set test-pool pg_autoscale_mode on
root@ceph-client:~# rbd pool init test-pool
root@ceph-client:~# ceph osd pool autoscale-status
POOL SIZE TARGET SIZE RATE RAW CAPACITY RATIO TARGET RATIO EFFECTIVE RATIO BIAS PG_NUM NEW PG_NUM AUTOSCALE BULK
.mgr 452.0k 3.0 30708M 0.0000 1.0 1 on False
test-pool 4096 3.0 30708M 0.0000 1.0 32 on False
root@ceph-client:~# rbd create --size 5G test-pool/rbd01
root@ceph-client:~# rbd map test-pool/rbd01
/dev/rbd0
root@ceph-client:~# lsblk
省略
rbd0 252:0 0 5G 0 disk
root@ceph-client:~# mkfs.xfs /dev/rbd0
root@ceph-client:~# df -hT
root@ceph-client:~# mount /dev/rbd0 /mnt
root@ceph-client:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
省略
/dev/rbd0 xfs 5.0G 69M 5.0G 2% /mnt
11. 動作確認
ブロックストレージへの書き込みを実施
root@ceph-client:~# ceph -s
cluster:
id: 1950c5ce-2528-11ef-af77-c9b795315e84
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 44m)
mgr: ceph01.ysiryi(active, since 2d), standbys: ceph02.yqwrrm
osd: 3 osds: 3 up (since 17h), 3 in (since 25h)
data:
pools: 2 pools, 33 pgs
objects: 16 objects, 6.8 MiB
usage: 914 MiB used, 29 GiB / 30 GiB avail
pgs: 33 active+clean
root@ceph-client:~# dd if=/dev/zero of=/mnt/write.tmp ibs=1M obs=1M count=1024
root@ceph-client:~# ceph -s
cluster:
id: 1950c5ce-2528-11ef-af77-c9b795315e84
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 52m)
mgr: ceph01.ysiryi(active, since 2d), standbys: ceph02.yqwrrm
osd: 3 osds: 3 up (since 17h), 3 in (since 25h)
data:
pools: 2 pools, 33 pgs
objects: 126 objects, 451 MiB
usage: 2.2 GiB used, 28 GiB / 30 GiB avail
pgs: 33 active+clean
io:
client: 34 KiB/s rd, 11 MiB/s wr, 39 op/s rd, 12 op/s wr
オブジェクト数や利用量が増加していることから、無事Ceph環境をストレージとして利用できたことが確認できた
関連調査メモ
RBDとは
RADOS Block Deviceの略
Cephにおけるブロックデバイスのことを指す模様
ラベル「_admin」について
1台目のホストには自動的に「_admin」というラベルが割り当てられた
これは「管理ノード」と呼ばれる位置付けのノード扱いになる模様
cephadm bootstrapコマンド実行時に「--skip-admin-label」オプションを付けない限りは、ブートストラップノードに自動的に付与される
管理ノードはクラスタ設定ファイルと管理キーリングの両方が含まれ、それらは「/etc/cephディレクトリ」配下に保存されている
他のノードにもラベル「_admin」を付与した場合、cephadmによって「ceph.conf」および「クラスタ名.client.adminキーリングファイル」がコピーされる
管理ノードになるための前提条件
- cephadmがインストールされた実行中のストレージクラスタ
- ストレージクラスタがmonノードおよびmgrノードを実行している
- クラスタ内のすべてのノードへのrootレベルアクセスが可能
Cephノード#1上で稼働している「prometheus」「alertmanager」「grafana」は何者か?
■Prometheus
モニタリングおよびアラートツールキット
各ノードで稼働している「prometheus/node-exporter」より提供されるデータを収集し、事前に定義された閾値に達した場合にはアラートを実行する
■Alertmanager
Prometheusサーバによって送信されるアラートを処理する
■Grafana
可視化およびアラートソフトウェア
ただし、アラート機能についてはAlertmanagerが担当しているため、このモニタリングスタックにおいては使用されない
Cephクラスタのブートストラップ時に以下の処理が行われていた
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
参考:第7章 Ceph Orchestrator を使用したモニタリングスタックの管理
Cephノードの4台目を追加した場合にもmonは自動起動する?
作業時点では「monは3台までは自動起動されるのでは?」と思っていたこともあり、試しに4台目を追加してみた
結果としては4台目についてもmonは自動的に起動してくる形となった
root@ceph01:~# ceph -s
cluster:
id: 1950c5ce-2528-11ef-af77-c9b795315e84
health: HEALTH_OK
services:
mon: 4 daemons, quorum ceph01,ceph02,ceph03,ceph04 ( age 16s)
mgr: ceph01.ysiryi(active, since 2d), standbys: ceph02.yqwrrm
osd: 3 osds: 3 up (since 18h), 3 in (since 26h)
data:
pools: 2 pools, 33 pgs
objects: 272 objects, 1.0 GiB
usage: 3.9 GiB used, 26 GiB / 30 GiB avail
pgs: 33 active+clean
root@ceph01:~# ceph orch ps | grep ceph04
crash.ceph04 ceph04 running (2h) 8m ago 2h 7088k - 17.2.7 ff4519c9e0a2 dcf08d732e3a
mon.ceph04 ceph04 running (2h) 8m ago 2h 359M 2048M 17.2.7 ff4519c9e0a2 47e8fb61d48f
node-exporter.ceph04 ceph04 *:9100 running (2h) 8m ago 2h 9488k - 1.5.0 0da6a335fe13 49c1d4d68ca1
osd.3 ceph04 running (2h) 8m ago 2h 105M 4096M 17.2.7 ff4519c9e0a2 7d772fb51d1a
参考情報
参考:Ubuntu20.04LTSでCeph構築
参考:ubuntu22.04でcephクラスタを構築する