【Ceph】学習用ローカル環境の構築に関する学習記録

2024年6月12日

こんにちは、キクです。

本記事は、僕が自己学習で学んだことをブログでアウトプットするシリーズになります。

最近「Ceph」という分散型のストレージソフトウェアを使うようになったのですが、僕自身これまでCephを触ったことがなかったので分からないことばかりで。
用語や登場人物については何となく分かってきつつも、「やっぱり実際に触ってみないと分からないことも多いよね!」という状況でした。

そんなわけで、今回は『Ceph学習用環境の構築』について書いていこうと思います。

それでは、よろしくお願いします。

注意事項

本記事は自己学習としてのアウトプットが目的となります。

そのため、本記事には誤った情報が含まれる可能性もありますが、ご了承ください。

Cephについて

冒頭で「Cephは分散型のストレージソフトウェア」ということについて触れましたが、本項でもう少しだけ整理しておきます。

Cephはオープンソースのストレージソフトウェアに分類され、以下複数のストレージタイプを提供できる

  1. オブジェクトストレージ
  2. ブロックストレージ
  3. ファイルシステム

Cephでは「RADOS(Reliable Automatic Distributed Object Store)」と呼ばれるオブジェクトデータストアが基盤となっており、メタデータを含むCephが引き受けるデータはすべてここに集約される

そして「RADOSGW」「RBD」「CEPHFS」という3つのインターフェイスから、各ストレージタイプを扱うことが可能になっている

なお、本記事では「ブロックストレージ」を用いての動作確認もしていきます。

Ceph環境の構築

1. 仮想マシン準備

今回はVMware Workstationにて、以下の仮想マシンを準備する

Cephノード

台数   :3台

OS    :Ubuntu 22.04

CPU    :2コア

メモリ  :4GB

ディスク1:20GB

ディスク2:10GB

IPアドレス:192.168.40.151/24 ~ 192.168.40.153/24

Cephクライアント

台数   :1台

OS    :Ubuntu 22.04

CPU    :2コア

メモリ  :4GB

ディスク1:20GB

IPアドレス:192.168.40.160/24

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

ポイント

作業中は「なんでDockerを入れる?」とか思ってましたが、後半で登場する「MON」や「OSD」などCephにおける重要なサービスをCephノード上で稼働させる際にコンテナ技術を用いていることが分かりました。

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

ポイント

Ubuntuではデフォルトでrootでの接続は禁止されているためパスワード設定もされていないため、sshd-configファイルの編集と合わせて実施する

3. cephadmパッケージのインストール(Cephノード#1のみ)

root@ceph01:~# apt install -y cephadm

cephadmとは

Cephクラスタのデプロイメントと管理を自動化するためのツール
この後実施するcephadm bootstrapによる初期セットアップも自動化の一種

ノードの追加や削除、サービスの配置などのタスクを容易に実行することができる

サービスの配置においては、コンテナ技術を用いてCephの各コンポーネント(mon, mgr, osdなど)をデプロイする

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

ceph-commonとは

Cephのクライアント側で利用されるパッケージ
Cephクライアントを構成するために必要な基本的なツールやライブラリが含まれている

Ceph運用でも多用する「cephコマンド」も含まれており、これを利用してクラスタの状態確認や管理操作が可能となる
rados, rdb, ceph-fuseなどのツールやライブラリも含まれており、これらを利用してCephストレージを利用するアプリケーションを開発/運用できる

なお、本パッケージのみを入れた状態の/etc/cephディレクトリ配下は以下の状態だった

root@cephclient:~# ll /etc/ceph/
total 12
drwxr-xr-x  2 root root 4096 Jun 10 00:05 ./
drwxr-xr-x 98 root root 4096 Jun 10 00:06 ../
-rw-r--r--  1 root root   92 Feb  8 11:33 rbdmap

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:

メモ

ノード追加に合わせて「mon」と「mgr」が自動的に追加されていることが分かる

mon :1 → 3
mgr  :1 → 2

これらはcephadmにより自動的に追加されたもので、それぞれ必要な台数分がデプロイされたものという認識

mgrは今回の作業からも分かるようにおそらく最大2つまでは自動的にデプロイされる

monは以下サイトを参考にすると最大5つまで自動的にデプロイされると思われる

参考:3.19.管理ノード設定

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におけるブロックデバイスのことを指す模様

参考:Cephでブロックデバイス(RBD)を作る

ラベル「_admin」について

1台目のホストには自動的に「_admin」というラベルが割り当てられた
これは「管理ノード」と呼ばれる位置付けのノード扱いになる模様

cephadm bootstrapコマンド実行時に「--skip-admin-label」オプションを付けない限りは、ブートストラップノードに自動的に付与される

管理ノードはクラスタ設定ファイルと管理キーリングの両方が含まれ、それらは「/etc/cephディレクトリ」配下に保存されている
他のノードにもラベル「_admin」を付与した場合、cephadmによって「ceph.conf」および「クラスタ名.client.adminキーリングファイル」がコピーされる

管理ノードになるための前提条件

  • cephadmがインストールされた実行中のストレージクラスタ
  • ストレージクラスタがmonノードおよびmgrノードを実行している
  • クラスタ内のすべてのノードへのrootレベルアクセスが可能

参考:3.19. 管理ノードの設定

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クラスタを構築する

-学習記録, Ceph
-,