Ceph デーモンサービスの制御
Ceph クラスターの運用において、各ノード上で動作するデーモンプロセスの管理は基本的かつ重要なタスクです。systemd を利用することで、グローバル単位、タイプ単位、および個別インスタンス単位での制御が可能です。
全デーモンの一括管理
特定のノード上で実行されているすべての Ceph 関連サービスを一括で起動または停止するには、以下の systemd コマンドを使用します。
すべてのデーモンを起動
sudo systemctl start ceph.target
すべてのデーモンを停止
sudo systemctl stop ceph*.service ceph*.target
サービスタイプ別の管理
MON、OSD、MDS など、特定の役割を持つデーモン群だけを操作することもできます。
タイプ単位での起動
sudo systemctl start ceph-osd.target
sudo systemctl start ceph-mon.target
sudo systemctl start ceph-mds.target
タイプ単位での停止
sudo systemctl stop ceph-mon*.service ceph-mon.target
sudo systemctl stop ceph-osd*.service ceph-osd.target
sudo systemctl stop ceph-mds*.service ceph-mds.target
個別インスタンスの制御
特定の OSD や MON インスタンスのみを再起動する必要がある場合、インスタンス ID またはホスト名を指定して操作します。
特定デーモンの起動
sudo systemctl start ceph-osd@{id}
sudo systemctl start ceph-mon@{hostname}
sudo systemctl start ceph-mds@{hostname}
具体例:
sudo systemctl start ceph-osd@5
sudo systemctl start ceph-mon@ceph-srv-01
sudo systemctl start ceph-mds@ceph-srv-01
特定デーモンの停止
sudo systemctl stop ceph-osd@{id}
sudo systemctl stop ceph-mon@{hostname}
sudo systemctl stop ceph-mds@{hostname}
運用デモンストレーション
実際のクラスター状態を確認しながら、OSD サービスの停止と起動を行い、状態変化を観察します。
# クラスター全体の OSD ツリー確認
[admin@ceph-srv-01 ~]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.29279 root default
-3 0.09760 host ceph-srv-01
5 hdd 0.04880 osd.5 up 1.00000 1.00000
8 hdd 0.04880 osd.8 up 1.00000 1.00000
-5 0.09760 host ceph-srv-02
6 hdd 0.04880 osd.6 up 1.00000 1.00000
9 hdd 0.04880 osd.9 up 1.00000 1.00000
-7 0.09760 host ceph-srv-03
7 hdd 0.04880 osd.7 up 1.00000 1.00000
10 hdd 0.04880 osd.10 up 1.00000 1.00000
# OSD ターゲットを停止し、ceph-srv-01 上の全 OSD をダウンさせる
[admin@ceph-srv-01 ~]$ systemctl stop ceph-osd.target
# 状態確認:ceph-srv-01 所属の OSD が down になっている
[admin@ceph-srv-01 ~]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.29279 root default
-3 0.09760 host ceph-srv-01
5 hdd 0.04880 osd.5 down 1.00000 1.00000
8 hdd 0.04880 osd.8 down 1.00000 1.00000
... (他のノードは up のまま)
# 個別に osd.5 を起動
[admin@ceph-srv-01 ~]$ systemctl start ceph-osd@5
# 状態確認:osd.5 が復旧
[admin@ceph-srv-01 ~]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-3 0.09760 host ceph-srv-01
5 hdd 0.04880 osd.5 up 1.00000 1.00000
8 hdd 0.04880 osd.8 down 1.00000 1.00000
# 残りの osd.8 も起動して完全復旧
[admin@ceph-srv-01 ~]$ systemctl start ceph-osd@8
Ceph サービスログの解析
トラブルシューティングの際、各デーモンが出力するログを確認することは不可欠です。
ログファイルの所在地
標準的なログ出力ディレクトリは以下の通りです。
ログ格納場所:/var/log/ceph/
MON デーモンのログ確認
モニターノードの動作ログをリアルタイムで監視します。
[admin@ceph-srv-01 ceph]# tail -f /var/log/ceph/ceph-mon.ceph-srv-01.log
2023-05-15 10:20:30.061 7fee793c7700 4 rocksdb: [db/db_impl_compaction_flush.cc:1403] [default] Manual compaction starting
2023-05-15 10:20:34.997 7fee803d5700 1 mon.ceph-srv-01@0(leader).osd e450 _set_new_cache_sizes cache_size:1020054731 inc_alloc: 71303168
OSD 障害の模拟とログ調査
特定の OSD を停止させて障害を模拟し、ログに記録される終了シーケンスを確認します。
# osd.5 を停止して障害を模拟
[admin@ceph-srv-01 ceph]# systemctl stop ceph-osd@5
# クラスター状態を確認
[admin@ceph-srv-01 ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-3 0.09760 host ceph-srv-01
5 hdd 0.04880 osd.5 down 1.00000 1.00000
# osd.5 のログ末尾を確認
[admin@ceph-srv-01 ceph]# tail -10f /var/log/ceph/ceph-osd.5.log
...
2023-05-15 10:25:05.991 7fed76190700 -1 received signal: Terminated from /usr/lib/systemd/systemd
2023-05-15 10:25:05.991 7fed76190700 -1 osd.5 450 *** Got signal Terminated ***
2023-05-15 10:25:05.991 7fed76190700 -1 osd.5 450 *** Immediate shutdown (osd_fast_shutdown=true) ***
# サービスを再開
[admin@ceph-srv-01 ceph]# systemctl start ceph-osd@5
クラスター状態のモニタリング
Ceph クラスターの健全性を確認するには、主にインタラクティブモードとコマンドラインモードの 2 種類の方法があります。
監視方法の比較
インタラクティブモード
ceph シェルに入り、複数のコマンドを連続して実行します。
[admin@ceph-srv-01 ~]$ ceph
ceph> health
HEALTH_OK
ceph> status
ceph> quorum_status
ceph> mon stat
ceph> exit
コマンドラインモード
シェルコマンドとして直接実行します。スクリプト化に適しています。
[admin@ceph-srv-01 ~]$ ceph -s
cluster:
id: a1b2c3d4-5678-90ab-cdef-1234567890ab
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-srv-01,ceph-srv-02,ceph-srv-03
mgr: ceph-srv-02(active)
osd: 6 osds: 6 up, 6 in
data:
pools: 8 pools, 256 pgs
objects: 250 objects, 200 MiB
usage: 5.0 GiB used, 295 GiB / 300 GiB avail
動的監視
ceph -w を使用すると、クラスター状態の変化をリアルタイムでウォッチできます。
[admin@ceph-srv-01 ~]$ ceph -w
...
2023-05-15 11:00:19.714395 mon.ceph-srv-01 [INF] osd.5 failed (root=default,host=ceph-srv-01)
2023-05-15 11:00:20.458219 mon.ceph-srv-01 [WRN] Health check failed: 1 osds down (OSD_DOWN)
2023-05-15 11:00:50.486208 mon.ceph-srv-01 [INF] Health check cleared: OSD_DOWN
2023-05-15 11:00:50.493443 mon.ceph-srv-01 [INF] osd.5 boot
2023-05-15 11:01:03.826378 mon.ceph-srv-01 [INF] Cluster is now healthy
詳細な状態確認
ストレージ容量の使用状況
[admin@ceph-srv-01 ~]$ ceph df
RAW STORAGE:
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 300 GiB 293 GiB 857 MiB 6.8 GiB 2.28
POOLS:
POOL ID STORED OBJECTS USED %USED MAX AVAIL
primary-data 1 300 MiB 100 603 MiB 0.21 139 GiB
.rgw.root 2 1.2 KiB 4 768 KiB 0 93 GiB
OSD の詳細情報
[admin@ceph-srv-01 ~]$ ceph osd stat
6 osds: 6 up, 6 in; epoch: e330
[admin@ceph-srv-01 ~]$ ceph osd df
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA AVAIL %USE VAR PGS STATUS
5 hdd 0.04880 1.00000 50 GiB 1.1 GiB 147 MiB 49 GiB 2.29 1.00 147 up
6 hdd 0.04880 1.00000 50 GiB 1.2 GiB 155 MiB 49 GiB 2.30 1.01 148 up
MON クォーラム情報
[admin@ceph-srv-01 ~]$ ceph mon stat
e3: 3 mons at {ceph-srv-01=[v2:192.168.100.10:3300/0],ceph-srv-02=[v2:192.168.100.11:3300/0],ceph-srv-03=[v2:192.168.100.12:3300/0]}, election epoch 28, leader 0 ceph-srv-01
[admin@ceph-srv-01 ~]$ ceph quorum_status
{"election_epoch":34,"quorum":[0,1,2],"quorum_names":["ceph-srv-01","ceph-srv-02","ceph-srv-03"],"quorum_leader_name":"ceph-srv-01"}
MDS の状態
[admin@ceph-srv-01 ~]$ ceph mds stat
cephfs-alpha:1 {0=ceph-srv-02=up:active} 2 up:standby
[admin@ceph-srv-01 ~]$ ceph fs dump
...
Filesystem 'cephfs-alpha' (1)
max_mds 1
in 0
up {0=34638}
data_pools [9]
metadata_pool 8
Admin Socket の活用
実行中のデーモンプロセスに対して、設定確認や詳細情報のダンプを行うことができます。
# 利用可能なコマンド一覧
[admin@ceph-srv-01 ~]$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-01.asok help
{
"config show": "dump current config settings",
"mon_status": "show current monitor status",
"perf dump": "dump perfcounters value"
}
# 設定値の確認(clock 関連)
[admin@ceph-srv-01 ~]$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-01.asok config show | grep clock
"mon_clock_drift_allowed": "0.050000",
"osd_op_queue_mclock_client_op_res": "1000.000000"
# クォーラム状態の詳細取得
[admin@ceph-srv-01 ~]$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-01.asok quorum_status
{
"election_epoch": 34,
"quorum": [0, 1, 2],
"quorum_names": ["ceph-srv-01", "ceph-srv-02", "ceph-srv-03"]
}
リソースプール(Pool)の管理
プールはオブジェクト存储の論理的な区画であり、レプリケーション数、PG 数、CRUSH ルールなどを定義できます。
プールの基本操作
既存プールの一覧
[admin@ceph-srv-01 ~]$ ceph osd lspools
1 primary-data
2 .rgw.root
3 default.rgw.control
8 cephfs_metadata
9 cephfs_data
新規プールの作成
PG 数を指定してプールを作成します。
[admin@ceph-srv-01 ~]$ ceph osd pool create backup-storage 32 32
pool 'backup-storage' created
プールパラメータの参照と変更
# サイズ(レプリカ数)の確認
[admin@ceph-srv-01 ~]$ ceph osd pool get backup-storage size
size: 3
# PG 数の確認
[admin@ceph-srv-01 ~]$ ceph osd pool get backup-storage pg_num
pg_num: 32
# レプリカ数を変更(3 から 2 へ)
[admin@ceph-srv-01 ~]$ ceph osd pool set backup-storage size 2
set pool 10 size to 2
[admin@ceph-srv-01 ~]$ ceph osd pool get backup-storage size
size: 2
アプリケーションタイプの設定
プールがどの用途(rbd, cephfs, rgw)で使用されるかを明示します。
[admin@ceph-srv-01 ~]$ ceph osd pool application enable backup-storage rbd
enabled application 'rbd' on pool 'backup-storage'
[admin@ceph-srv-01 ~]$ ceph osd pool application get backup-storage
{
"rbd": {}
}
クォータ設定と容量確認
プールごとのオブジェクト数やバイト数の制限を設定できます。
# オブジェクト数の上限を 100 に設定
[admin@ceph-srv-01 ~]$ ceph osd pool set-quota backup-storage max_objects 100
# クォータ確認
[admin@ceph-srv-01 ~]$ ceph osd pool get-quota backup-storage
quotas for pool 'backup-storage':
max objects: 100 objects
max bytes : N/A
# 全プールの使用量確認
[admin@ceph-srv-01 ~]$ rados df
POOL_NAME USED OBJECTS
primary-data 603 MiB 103
backup-storage 0 B 0
PG(Placement Group)のデータ分布
PG はオブジェクトを OSD にマッピングする中間層であり、クラスターの拡張性と性能に直結します。
PG の役割
- データ分布の決定: PG 数が多いほどデータは分散され、障害時の影響範囲が小さくなります。
- 計算効率の向上: 個々のオブジェクトではなく PG 単位で管理することで、メタデータ操作のオーバーヘッドを削減します。
PG 数の算出
適切な PG 数は OSD 数とプールサイズに基づいて計算します。一般的に、50 OSD を超えるクラスターでは OSD あたり 50〜100 PG を目指します。
総 PG 数 = (OSD 数 × 100) / プールサイズ
計算結果は、データの均等分散のため 2 のべき乗に切り上げる必要があります。例えば、200 OSD でレプリカ数 3 の場合、約 6667 となるため、8192 を選択します。
クラスター設定の調整
特定の操作(例:プール削除)を許可するための設定変更手順です。
プール削除の実施
デフォルトではプール削除は無効化されています。
[admin@ceph-srv-01 ~]$ ceph osd pool rm backup-storage backup-storage --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true
# 現在の設定確認
[admin@ceph-srv-01 ~]$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-01.asok config show | grep mon_allow_pool_delete
"mon_allow_pool_delete": "false",
設定の一時変更
Admin Socket を利用して、実行中のプロセス設定のみを変更します(再起動で元に戻ります)。
[admin@ceph-srv-01 ~]$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-01.asok config set mon_allow_pool_delete true
{
"success": "mon_allow_pool_delete = 'true' "
}
# 他ノード также 変更が必要
[admin@ceph-srv-01 ~]$ ssh ceph-srv-02 "ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-02.asok config set mon_allow_pool_delete true"
[admin@ceph-srv-01 ~]$ ssh ceph-srv-03 "ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-03.asok config set mon_allow_pool_delete true"
# 削除再試行
[admin@ceph-srv-01 ~]$ ceph osd pool rm backup-storage backup-storage --yes-i-really-really-mean-it
pool 'backup-storage' removed
# サービス再起動後、設定は元に戻る
[admin@ceph-srv-01 ~]$ systemctl restart ceph-mon@ceph-srv-01
[admin@ceph-srv-01 ~]$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-srv-01.asok config show | grep mon_allow_pool_delete
"mon_allow_pool_delete": "false",
設定の恒久化
設定ファイルを変更し、クラスター全体に配布することで永続化します。
# ceph.conf の編集
[global]
fsid = a1b2c3d4-5678-90ab-cdef-1234567890ab
mon_allow_pool_delete = true
# 設定ファイルの配布
[admin@ceph-srv-01 ~]$ ceph-deploy --overwrite-conf config push ceph-srv-01 ceph-srv-02 ceph-srv-03
# サービス再起動
[admin@ceph-srv-01 ~]$ ansible all -m shell -a "systemctl restart ceph-mon.target"
# 有効確認
[admin@ceph-srv-01 ~]$ ansible all -m shell -a "ceph --admin-daemon /var/run/ceph/ceph-mon.*.asok config show | grep mon_allow_pool_delete"
ceph-srv-01 | CHANGED | rc=0 >> "mon_allow_pool_delete": "true",
ceph-srv-02 | CHANGED | rc=0 >> "mon_allow_pool_delete": "true",
ceph-srv-03 | CHANGED | rc=0 >> "mon_allow_pool_delete": "true",