Ceph クラスター運用ガイド:デーモン管理から設定調整まで

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",

タグ: ceph distributed-storage linux-admin system-operations storage-system

8月20日 10:38 投稿