CephFS MDSs
https://ceph.readthedocs.io/en/latest/start/intro/から
MDSs: A Ceph Metadata Server (MDS, ceph-mds) stores metadata on behalf of the Ceph File System (i.e., Ceph Block Devices and Ceph Object Storage do not use MDS).
Ceph Metadata Servers allow POSIX file system users to execute basic commands (like ls, find, etc.) without placing an enormous burden on the Ceph Storage Cluster.
(deepL先生訳)
データシート: Cephメタデータサーバ(MDS、ceph-mds)は、Cephファイルシステムに代わってメタデータを格納します(つまり、CephブロックデバイスとCephオブジェクトストレージはMDSを使用しません)。
Cephメタデータサーバにより、POSIXファイルシステムのユーザは、Cephストレージクラスタに大きな負担をかけることなく、基本的なコマンド(ls、findなど)を実行できます。
CephをPOSIXファイルシステムとして利用するなら必要な機能を提供します
まずはmetadata server(MDS)を構築して、次にそのmetadata serverに読ませるpool を作ってファイルシステムを用意します.
ここでは ceph01 と ceph02 に metadata serverを設ける.
参照先 https://docs.ceph.com/docs/master/install/manual-deployment/#adding-mds,https://docs.ceph.com/en/latest/cephfs/add-remove-mds/
まずは ceph01 にMDSを作ります
[root@ceph01 ~]# dnf install ceph-mds -y
[root@ceph01 ~]# mkdir -p /var/lib/ceph/mds/ceph-ceph01
[root@ceph01 ~]# ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph01/keyring --gen-key -n mds.ceph01
[root@ceph01 ~]# ceph auth add mds.ceph01 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph01/keyring
(確認)
[root@ceph01 ~]# ceph auth get mds.ceph01
[mds.ceph-mds]
key = AQDCdJllGKBnCRAAbDjPeiHH3iJYpeLoqqkeSg==
caps mds = "allow *"
caps mon = "allow profile mds"
caps osd = "allow rwx"
[root@ceph01 ~]# chown -R ceph. /var/lib/ceph/mds/ceph-ceph01
これで事前設定は完了で、次にデーモンを起動させます.
「/usr/lib/systemd/system/ceph-mds@.service」の中身を見ると
:
Environment=CLUSTER=ceph
:
ExecStart=/usr/bin/ceph-mds -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph
:
とあるので、ここでも下記のようにして起動させます
[root@ceph01 ~]# systemctl enable ceph-mds@ceph01.service --now
これでデーモンが稼働します.
「/etc/ceph/ceph.conf」の末尾に下記を加えます
[mds.ceph01]
host = ceph01
直ぐに MDSとして追加のceph02を足しますけど.
ただ「ceph -s」を叩いても反映されていないですが、そうゆう物みたい.
[root@ceph01 ~]# ceph -s
:
services:
mon: 3 daemons, quorum ceph-mgr,ceph-mds,ceph-osd1 (age 4m)
mgr: ceph-mgr(active, since 22m)
osd: 3 osds: 3 up (since 81s), 3 in (since 92s)
:
[root@ceph01 ~]#
次に、このMDSを追加します
次に ceph02 にMDSを立ててみます
[root@ceph02 ~]# dnf install ceph-mds -y
[root@ceph02 ~]# mkdir -p /var/lib/ceph/mds/ceph-ceph02
[root@ceph02 ~]# ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph02/keyring --gen-key -n mds.ceph02
[root@ceph02 ~]# ceph auth add mds.ceph02 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph02/keyring
[root@ceph02 ~]# ceph auth get mds.ceph02
[mds.ceph02]
key = AQA4ewtoqs9FNRAAcWgceEGbxdCTPB6tdqgT8w==
caps mds = "allow *"
caps mon = "allow profile mds"
caps osd = "allow rwx"
[root@ceph02 ~]#
[root@ceph02 ~]# chown -R ceph. /var/lib/ceph/mds/ceph-ceph02
[root@ceph02 ~]# systemctl enable ceph-mds@ceph02.service --now
「/etc/ceph/ceph.conf」の末尾に下記を加えます
[mds.ceph02]
host = ceph02
次にMDSができたのでファイルシステムを作る
っがその前に
ファイルシステムを作るには2種類のプール(metadata向けとdata向け)が必要になります. プールというのは「オブジェクトを保存するために使用される論理パーティション」
そのプールにはデータをいくつ持たせるのか(レプリケーション)、とRAID的な要素で組み上げるかの選択肢が現れます.
デフォルトでは同じデータを3つのODSに分散させるレプリケーションで作られます.
3 ODSあるなら、それぞれにデータが分散され、6 OSDなら半分の3つのどれかにデータが置かれるって感じ
もう一つはRAID的な要素の「erasure-code(消去符号化)」というモードです.
(原文から,deepL先生訳 https://docs.ceph.com/en/latest/rados/operations/erasure-code/)
対照的に、消去符号化 プールでは、レプリケーションとは異なるデータ保護方法が使用されます。
イレイジャーコーディングでは、データはデータ ブロックとパリティ ブロックの 2 種類のフラグメントに分割されます。
ドライブに障害が発生したり破損した場合、パリティ ブロックを使用してデータが再構築されます。大規模な場合、イレイジャーコーディングはレプリケーションに比べてスペースを節約します。
このドキュメントでは、データ ブロックを「データ チャンク」と呼び、パリティ ブロックを「コーディング チャンク」と呼びます。
消失符号は「前方誤り訂正符号」とも呼ばれます。最初の前方誤り訂正符号は、1950 年にベル研究所のリチャード・ハミングによって開発されました。
https://docs.ceph.com/en/latest/rados/operations/erasure-code/
ここが分かりやすかった https://access.redhat.com/documentation/ja-jp/red_hat_ceph_storage/4/html-single/storage_strategies_guide/index
実際のプールの作成においてレプリケーションなら複製数を指定します.
「erasure-code(消去符号化)」で作る場合は事前にそのプロファイルを用意する必要があります
既定で用意されているレプリケーションのルールは「replicated_rule」で障害ドメインの切り分け区分が「host」なもの.
ファイルシステム作成時にmetadata部分になるものは、この「レプリケーション」で定義する必要があるので、どうせならSSDをmetadataに使いたい. そのような「レプリケーション」ルールを新設する
[root@ceph01 ~]# ceph osd crush rule create-replicated meta-ssd default host ssd
[root@ceph01 ~]# ceph osd crush rule ls
replicated_rule
meta-ssd
[root@ceph01 ~]# ceph osd crush rule dump <ルール>
詳細は「ceph osd crush rule dump <ルール>」で見れるが、、見ても分からないので省略
次にイレイジャーコーディング.
既定のイレイジャーコーディングである「erasure-code」の設定内容は下記にて確認できる
[root@ceph01 ~]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van
[root@ceph01 ~]#
2個のデータチャンクに2個のコーディングチャンクを用意するものです。なので4つのOSDノードがあって、2つOSDノードが止まってもデータは引き出せます.
ここでは2個のデータチャンクに1つのコーディんチャンクを設けて、使用するのはHDDデバイスに限定するプロファイル「k2-m1-profile」を作ります
「crush-failure-domain」は障害ドメインの切り分け区分でhostとかrackとかで指定します
[root@ceph01 ~]# ceph osd erasure-code-profile set k2-m1-profile k=2 m=1 crush-failure-domain=host crush-device-class=hdd
(プロファイルの確認)
[root@ceph01 ~]# ceph osd erasure-code-profile get {name}
(プロファイルの削除)
[root@ceph01 ~]# ceph osd erasure-code-profile rm {name}
参照 https://ceph.readthedocs.io/en/latest/cephfs/
ファイルシステムを作るには2種類のpoolが必要で、1つはデータ向け、もう一つはメタデータ向け.
poolにはレプリケーションとイレイジャーコーディングと2つの作り方がある。
だが、メタデータ向けは「レプリケーション」で作られたpoolが前提となっています。
前段で作ったプロファイルを使ってメタデータ向けとデータ向けのpoolを作成します
(データ向けのpool)
[root@ceph01 ~]# ceph osd pool create emfs-data erasure k2-m1-profile
(メタデータ向けのpool)
[root@ceph01 ~]# ceph osd pool create emfs-metadata 64 meta-ssd
メタデータ向けのプール作成時に指定した数字は PG と言われるもの. この値がどうも肝で「64 PG から 512 PG」で良いみたい
参照先: https://access.redhat.com/documentation/ja-jp/red_hat_ceph_storage/4/html/file_system_guide/creating-the-ceph-file-systems
次に作ったpoolの関連付けを行う. 今回は2つのpool共「cephfs」アプリケーションに適用させる
[root@ceph01 ~]# ceph osd pool application enable emfs-data cephfs
[root@ceph01 ~]# ceph osd pool application enable emfs-metadata cephfs
作ったpoolのリストは「ceph osd lspools」で確認できます
[root@ceph01 ~]# ceph osd lspools
1 .mgr
2 emfs-data
3 emfs-metadata
[root@ceph01 ~]#
これでファイルシステムの下地が用意できた
反対にpoolの削除は「ceph osd pool delete」で行えます
[root@ceph01 ~]# ceph osd lspools
1 .mgr
2 emfs-data
3 emfs-metadata
[root@ceph01 ~]# ceph config set mon mon_allow_pool_delete true <--事前におまじないが必要
[root@ceph01 ~]# ceph osd pool delete emfs-data emfs-data --yes-i-really-really-mean-it
pool 'emfs-data' removed
[root@ceph01 ~]# ceph osd pool delete cemfs-metadata emfs-metadata --yes-i-really-really-mean-it
pool 'emfs-metadata' removed
[root@ceph01 ~]# ceph osd lspools
1 .mgr
[root@ceph01 ~]# ceph config set mon mon_allow_pool_delete false <--おまじないの解除
と達成できる
作ったpoolを使ってファイルシステムを作ります
まず始めにここでは「erasure-code」なpoolをデータpoolとしているので、そのpoolの「allow_ec_overwrites」を有効にする必要がある
っで一度 有効にすると元に戻せないみたい
[root@ceph01 ~]# ceph osd pool get emfs-data allow_ec_overwrites
allow_ec_overwrites: false
[root@ceph01 ~]# ceph osd pool set emfs-data allow_ec_overwrites true <--有効に
加えて「bulk」も有効にする
[root@ceph01 ~]# ceph osd pool get emfs-data bulk
bulk: false
[root@ceph01 ~]# ceph osd pool set emfs-data bulk true
っでファイルシステム emfs を作成
[root@ceph01 ~]# ceph fs new emfs emfs-metadata emfs-data --force
[root@ceph01 ~]# ceph fs ls
name: emfs, metadata pool: emfs-metadata, data pools: [emfs-data ]
[root@ceph01 ~]# ceph fs status
emfs - 0 clients
====
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph02 Reqs: 0 /s 10 13 12 0
POOL TYPE USED AVAIL
emfs-metadata metadata 96.0k 47.4G
emfs-data data 0 176G
STANDBY MDS
ceph01
MDS version: ceph version 19.2.2 (0eceb0defba60152a8182f7bd87d164b639885b8) squid (stable)
[root@ceph01 ~]#
これでcephfs「emfs」は利用可能になります
実際の利用方法はCeph/ClientとかCeph/sambaを参照してください
ファイルシステムを作成すると自動的にmetadata serverが割り当てられるみたい
[root@ceph01 ~]# ceph -s
:
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 4h)
mgr: ceph01(active, since 4h)
mds: 1/1 daemons up, 1 standby
osd: 9 osds: 9 up (since 4h), 9 in (since 4h)
:
[root@ceph01 ~]#
「ceph fs dump」で作ったファイルシステムの詳細が分かります
[root@ceph01 ~]# ceph fs dump
:
fs_name emfs
:
max_mds 1
:
[mds.ceph02{0:44479} state up:active seq 827 addr [v2:192.168.0.48:6800/3368807406,v1:192.168.0.48:6801/3368807406] compat {c=[1],r=[1],i=[1fff]}]
Standby daemons:
[mds.ceph01{-1:4731} state up:standby seq 1 addr [v2:192.168.0.47:6802/391465513,v1:192.168.0.47:6803/391465513] compat {c=[1],r=[1],i=[1fff]}]
:
[root@ceph01 ~]#
metadata serverは「ceph02」が担当して、「ceph01」はstandbyみたい.
切り替えとかはここを参照
https://docs.ceph.com/en/latest/cephfs/standby/