Cephとは、オープンソースの分散ストレージシステムです。複数のサーバーを束ねることで、高可用性を実現します。Cephの特徴のひとつが、クライアントが計算によってデータの配置場所を決定する点です。中央管理サーバーを介さずにデータを管理できるため、容量のスケールがしやすくなっています。
Cephはその拡張性と柔軟性により、大規模なデータの保存が求められる現場でよく使われています。例えばクラウド基盤のバックエンドストレージや、S3互換のオブジェクトストレージなどは、Cephが選択される代表的な例でしょう。
MicroCephとは
Cephは非常に便利な分散ストレージですが、分散システム特有の面倒くささもあります。そのため小規模な環境で使おうとすると、利便性よりも構築や運用にかかるコストが上回ってしまうこともありがちです。
そこでお勧めしたいのが、MicroCephです。MicroCephとは、Canonicalが開発しているCephのオーケストレーションツールです。Snapパッケージで提供されており、シンプルなCephクラスターを簡単にデプロイできます。
「小規模環境ならRAIDで十分では?」
今回はMicroCephを使い、家庭内に小規模なCephクラスターを構築する方法を紹介します。
MicroCephの動作環境
MicroCephの動作環境としては、2コアのCPUと4GiBのメモリが要求されます。セットアップ時にはインターネット接続も必要です。またCephには、ループファイルやパーティションではなく、物理的なストレージをまるごと割り当てることが推奨されています。そのためOSをインストールするSSDとは別に、Ceph用に2台目のSSDを搭載しておきましょう。なおCeph自体が冗長性を提供するため、RAIDは不要です。
Cephクラスターを構築するには、最低3台のノードが必要です[1]。今回は以下を満たすノードを3台用意しました
- 2コア以上のCPU
- 4GiB以上のメモリ
- 12GiBのディスクスペース
(システム領域) - Cephに割り当てるSSD
- インターネット接続
(パッケージインストール用)
MicroCephクラスターのセットアップ
OSは最新のLTSが推奨されているため、すべてのノードにUbuntu 24.
すべてのノードで、以下のコマンドを実行し、microcephパッケージをインストールしてください。また意図しないアップデートによるトラブルを回避するためにも、バージョンをホールドすることが推奨されています[2]。
$ sudo snap install microceph $ sudo snap refresh --hold microceph
ceph1ノードで、以下のコマンドを実行してください。クラスターの初期化を行います。
$ sudo microceph cluster bootstrap
続いてceph2ノードとceph3ノードをクラスターに参加させるためのトークンを発行します。ceph1ノードで以下のコマンドを実行してください。
$ sudo microceph cluster add ceph2 $ sudo microceph cluster add ceph3
するとトークン文字列が表示されますので、それぞれ控えておいてください。なおこのトークン文字列は、シークレット、フィンガープリント、Join先のアドレスを含んだJSONをbase64エンコードしたものになります。
ceph2およびceph3ノードで、それぞれ以下のコマンドを実行してください。トークンはノードごとに違うため、取り違えないよう注意しましょう。
$ sudo microceph cluster join そのノード用のトークン
これで3台のノードによるCephクラスターができました。
ストレージの追加
できたばかりのCephクラスターには、まだストレージがありません。各ノードに搭載されているCeph用のSSDを、クラスターから利用できるようにしましょう。
まずノードに搭載されている、未フォーマットのストレージを調べましょう。以下のコマンドを実行してください。ストレージの名前や容量と、デバイスファイルのパスが表示されますので、このパスを控えておきましょう。
$ sudo microceph disk list Available unpartitioned disks on this system: +---------------+----------+------+------------------------------------------------------+ | MODEL | CAPACITY | TYPE | PATH | +---------------+----------+------+------------------------------------------------------+ | QEMU HARDDISK | 64.00GiB | scsi | /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 | +---------------+----------+------+------------------------------------------------------+
続いて以下のコマンドで、ストレージをCephに追加します。これをceph1/
$ sudo microceph disk add /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1
追加が完了したら、
$ sudo microceph disk list Disks configured in MicroCeph: +-----+----------+------------------------------------------------------+ | OSD | LOCATION | PATH | +-----+----------+------------------------------------------------------+ | 1 | ceph3 | /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 | +-----+----------+------------------------------------------------------+ | 2 | ceph1 | /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 | +-----+----------+------------------------------------------------------+ | 3 | ceph2 | /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 | +-----+----------+------------------------------------------------------+
「microceph.
$ sudo microceph.ceph df --- RAW STORAGE --- CLASS SIZE AVAIL USED RAW USED %RAW USED TOTAL 192 GiB 192 GiB 83 MiB 83 MiB 0.04 --- POOLS --- POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL .mgr 1 1 577 KiB 2 1.7 MiB 0 61 GiB
ファイルシステムの作成
それではCephをLinuxからマウントして利用できるよう、ファイルシステムを作成していきましょう。
Cephでは物理的なストレージを束ねた上に、
$ sudo microceph.ceph osd pool create cephfs_meta $ sudo microceph.ceph osd pool create cephfs_data
Poolを作成しただけでは、まだファイルシステムとして使うことはできません。続いて以下のコマンドを実行して、紐づけを行います。
$ sudo microceph.ceph fs new cephfs cephfs_meta cephfs_data
これで
$ sudo microceph.ceph fs ls name: cephfs, metadata pool: cephfs_meta, data pools: [cephfs_data ]
「microceph.
$ sudo microceph.ceph fs get cephfs
Filesystem 'cephfs' (1)
fs_name cephfs
epoch 6
flags 12 joinable allow_snaps allow_multimds_snaps
created 2026-01-09T01:36:52.754379+0000
modified 2026-01-09T01:36:54.101978+0000
tableserver 0
root 0
session_timeout 60
session_autoclose 300
max_file_size 1099511627776
max_xattr_size 65536
required_client_features {}
last_failure 0
last_failure_osd_epoch 0
compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,7=mds uses inline data,8=no anchor table,9=file layout v2,10=snaprealm v2,11=minor log segments,12=quiesce subvolumes}
max_mds 1
in 0
up {0=24117}
failed
damaged
stopped
data_pools [3]
metadata_pool 2
inline_data disabled
balancer
bal_rank_mask -1
standby_count_wanted 1
qdb_cluster leader: 24117 members: 24117
[mds.ceph3{0:24117} state up:active seq 549 addr [v2:192.168.1.93:6800/4274409479,v1:192.168.1.93:6801/4274409479] compat {c=[1],r=[1],i=[1fff]}]
CephをバックエンドにしたSambaを構築する
ここまでの手順で、Ceph上にファイルシステムが作成できました。応用例として、このファイルシステムを別サーバーからマウントし、そのディレクトリをSambaで共有してみましょう。もちろんCephをインストールしたサーバーのいずれかに、Sambaを直接インストールしてもかまいません。ただしバックエンドとなるストレージサーバーと、前段に位置するサーバーは分離するほうが運用しやすく、定番です。そのため本記事では、別サーバーを用意してSambaをインストールすることにします。
まずCephを利用するため、クラスター上にユーザーを作成します。以下のコマンドを実行してください。
$ sudo microceph.ceph auth get-or-create client.samba mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs_data, allow rw pool=cephfs_meta'
「auth」
コマンドを実行すると、以下のようにキーが出力されます。これを控えておいてください。
[client.samba]
key = AQCCXWBpqad...(略)
以降はSambaサーバー側での作業になります。同じネットワーク上に、Ubuntu 24.
$ apt install ceph-common
認証情報を設定ファイルに保存しておきましょう。
$ cat << EOF | sudo tee /etc/ceph/ceph.client.samba.keyring
[client.samba]
key = AQCCXWBpqad...(略)
EOF
$ sudo chmod 600 /etc/ceph/ceph.client.samba.keyring
Cephのホスト情報も設定ファイルに記述しておくと便利です。
$ cat << EOF | sudo tee /etc/ceph/ceph.conf
[global]
mon_host = 192.168.1.91,192.168.1.92,192.168.1.93
EOF
それではCephFSをマウントします。まずはマウントポイントとして
$ sudo mkdir /mnt/ceph
「/etc/
ここで見なれないマウントオプション
$ sudo cat << EOF | sudo tee -a /etc/fstab :/ /mnt/ceph ceph name=samba,_netdev,defaults 0 0 EOF
fstabを書き換えているため、一度
$ sudo systemctl daemon-reload $ sudo mount -a
正しくマウントできているか、dfコマンドで確認しておきましょう。
$ df -h /mnt/ceph/ Filesystem Size Used Avail Use% Mounted on 192.168.1.91:6789,192.168.1.92:6789,192.168.1.93:6789:/ 61G 0 61G 0% /mnt/ceph
あとは通常通り、Sambaをインストールして共有設定してあげればよいでしょう。例えば
[CephStorage]
path = /mnt/ceph/samba
browseable = yes
read only = no
guest ok = no
force user = mizuno
MicroCephを使えば、手軽にCephクラスターを構築し、その動作を試すことができます。本記事で紹介したSambaのバックエンドなど、個人レベルや中小規模の社内システムでも、色々と活用できる場面もあるのではないでしょうか。