はじめに
分散ストレージのオープンソフトウェアのCephには、以下の3つのインターフェイスが用意されています。
※それぞれどのようなものかは筆者のざっくりとした認識で書いており間違っているかもしれません。
- (1) RADOS(Reliable Autonomic Distributed Object Store)
- オブジェクトストレージ。AWSでいうS3、AzureだとBlob Storageのようなもの
- (2) RBD(RADOS Block Device)
- デバイス。パソコンの内蔵ハードディスクや外付けハードディスクのようなもの(
/dev/sda
として認識されるような感じ)
- デバイス。パソコンの内蔵ハードディスクや外付けハードディスクのようなもの(
- (3) CephFS(Ceph File System)
- ネットワーク経由で他のマシンと共有可能なファイルシステム。Samba(CIFS)、NFSのようなもの
またストレージの拡張や、データを冗長化して障害に耐えられる機能も備えています。変幻自在で何とも興味深いCeph!
(ちょっと興奮してしまいましたが...、話はインターフェイスに戻ります。)上記3つのインターフェイスで、(3)のCephFSについてはこちらの記事で試して動作確認できました。
今回は(2)のRBDが使えるか試してみたので、その手順をご紹介します。
前提条件
下記の記事(筆者記事になりますが)などを参考にCephをセットアップして、OSDが追加できていることが前提となります。
手順
RBDおよびイメージの作成
BASIC BLOCK DEVICE COMMANDSの手順を参考に作っていきます。
イメージ作成用のpoolをまずは作成します。本例ではrbd-pool
という名前にしています。
$ sudo ceph osd pool create rbd-pool
pool 'rbd-pool' created
念のため、poolが作られたことを確認します。
$ sudo ceph osd lspools
3 rbd-pool
poolをRBDとして使うための初期化を行います。
$ sudo rbd pool init rbd-pool
RBDのイメージを作成します。以下の例ではイメージのサイズを1GiBにしています。
$ sudo rbd create --size 1024 rbd-pool/rbd1
イメージが出来ていることを確認します。
$ sudo rbd ls rbd-pool
rbd1
より詳細な情報は以下のように見れます。
$ sudo rbd info rbd-pool/rbd1
rbd image 'rbd1':
size 1 GiB in 256 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 121b341b48e3a
block_name_prefix: rbd_data.121b341b48e3a
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Sun Feb 5 16:47:04 2023
access_timestamp: Sun Feb 5 16:47:04 2023
modify_timestamp: Sun Feb 5 16:47:04 2023
RBDにアクセス可能なユーザの作成
次のようなコマンドで、RBDにアクセス可能なユーザを作成します。本例ではrbduser
という名前で作っています。
keyが標準出力され、/etc/ceph/ceph.client.rbduser.keyring
にも同時にその内容を保存しています。
$ sudo ceph auth get-or-create client.rbduser \
mon 'profile rbd' \
osd 'profile rbd pool=rbd-pool' \
mgr 'profile rbd pool=rbd-pool' \
| sudo tee /etc/ceph/ceph.client.rbduser.keyring
(出力結果)
[client.rbduser]
key = AQDk...
作成したユーザは次のように確認可能です。
$ sudo ceph auth list
...
client.rbduser
key: AQDk...
caps: [mgr] profile rbd pool=rbd-pool
caps: [mon] profile rbd
caps: [osd] profile rbd pool=rbd-pool
...
RBDMAPの実行
RBDMAPのEXAMPLESの内容を参考にして、作成したイメージをデバイスとして認識させるためのコマンドを以下のように実行します。
引数として、前の手順で作成したユーザの認証情報が必要です。
$ sudo rbd map rbd-pool/rbd1 \
--id rbduser \
--keyring /etc/ceph/ceph.client.rbduser.keyring
(出力結果)
/dev/rbd0
出力結果が/dev/rbd0
となりました。確かにrbd0のデバイスが作られています!
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
rbd0 252:0 0 1G 0 disk
...
マウントしてみる
作成したデバイス/dev/rbd0
は、普通のHDDと同じような感覚でマウントできます。実際にやってみましょう。
まずはマウントするためのファイルシステムを作ります。本例ではXFSにしています。
$ sudo mkfs.xfs /dev/rbd0
(出力結果)
meta-data=/dev/rbd0 isize=512 agcount=8, agsize=32768 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=16 swidth=16 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=16 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
FSを作った後は、以下のようにマウントできます。
$ mkdir /path/to/dir
$ sudo mount /dev/rbd0 /path/to/dir -v
mount: /dev/rbd0 mounted on /path/to/dir.
マウントできたかの確認。
$ df -h
...
/dev/rbd0 1014M 40M 975M 4% /path/to/dir
...
おわりに
Cephを試して間もなく大した知識もノウハウもないですが、非常に興味深い印象です!