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ファイルシステムとして利用するなら必要な機能を提供します

っでそのMDSを構築します

MDSの構築

参照先 https://docs.ceph.com/docs/master/install/manual-deployment/#adding-mds,https://docs.ceph.com/en/latest/cephfs/add-remove-mds/

まずCeph/OSDと同じようにCephFS Monitorノードから「ceph.conf」と管理者権限の「管理者キーリング」をmdsに持ってくる. 既にmonitorとして運用なら不要. 同じものをコピーするので

[root@ceph-mgr ~]# scp /etc/ceph/ceph.conf                  root@ceph-mds:/etc/ceph/ceph.conf
[root@ceph-mgr ~]# scp /etc/ceph/ceph.client.admin.keyring  root@ceph-mds:/etc/ceph/ceph.client.admin.keyring

その後にmdsで下記のようにします.

[root@ceph-mds ~]# mkdir -p /var/lib/ceph/mds/ceph-ceph-mds
 
[root@ceph-mds ~]# ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph-mds/keyring --gen-key -n mds.ceph-mds
 
[root@ceph-mds ~]# cat /var/lib/ceph/mds/ceph-ceph-mds/keyring
[mds.ceph-mds]
        key = AQDCdJllGKBnCRAAbDjPeiHH3iJYpeLoqqkeSg==
 
[root@ceph-mds ~]# ceph auth add mds.ceph-mds osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph-mds/keyring
 
(確認)
[root@ceph-mds ~]# ceph auth get mds.ceph-mds
[mds.ceph-mds]
        key = AQDCdJllGKBnCRAAbDjPeiHH3iJYpeLoqqkeSg==
        caps mds = "allow *"
        caps mon = "allow profile mds"
        caps osd = "allow rwx"
 
[root@ceph-mds ~]# chown -R ceph:ceph /etc/ceph/ /var/lib/ceph/

これで事前設定は完了で、次にデーモンを起動させます.
「/usr/lib/systemd/system/ceph-mds@.service」の中身を見ると

 :
ExecStart=/usr/bin/ceph-mds -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph
 :

とあるので、ここでも下記のようにして起動させます

[root@ceph-mds ~]# systemctl enable ceph-mds@ceph-mds.service
 
[root@ceph-mds ~]# systemctl start ceph-mds@ceph-mds.service

これでデーモンが稼働します.
Monitor側から確認してみると

[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     c2d06c20-9197-40b4-a8c4-1a0604936ce8
    health: HEALTH_OK
 
  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)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   81 MiB used, 48 GiB / 48 GiB avail
    pgs:     1 active+clean
 
[root@ceph-mgr ~]#

となる、一見するとmdsが動いていないように見えます. 以前のバージョンなら「mds: 1 up:standby」と表記されていたが、今のバージョンではないみたい
ファイルシステムを作成するとmdsの項目が表示されるようです

次にMDSができたのでファイルシステムを作る

プールの作成(レプリケーションとイレイジャーコーディング)

ファイルシステムを作るには2種類のプール(metadata向けとdata向け)が必要になります. プールというのは「オブジェクトを保存するために使用される論理パーティション」
そのプールにはデータをいくつ持たせるのか(レプリケーション)、とRAID的な要素で組み上げるかの選択肢が現れます.

デフォルトでは同じデータを3つのODSに分散させるレプリケーションで作られます.
3ODSあるなら、それぞれにデータが分散され、6OSDなら半分の3つのどれかにデータが置かれるって感じ

もう一つは「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(消去符号化)」で作る場合は事前にそのプロファイルを用意する必要があります

プールの作成(イレイジャーコーディングのプロファイル定義)

既定の「erasure-code」の設定内容は下記にて確認できる

[root@mds ~]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure                                    * jerasureプラグインの場合の「crush-failure-domain」は「host」がデフォルト値
technique=reed_sol_van
 
[root@mds ~]# ceph osd erasure-code-profile set test k=4 m=2 plugin=jerasure crush-device-class=hdd
 
[root@mds ~]# ceph osd erasure-code-profile ls
default
test
[root@mds ~]#
 
[root@mds ~]#
(プロファイルの作成)
[root@mds ~]# ceph osd erasure-code-profile set {name} \
     [{directory=directory}] \
     [{plugin=plugin}] \
     [{stripe_unit=stripe_unit}] \
     [{key=value} ...] \
     [--force]
 
(プロファイルの確認)
[root@mds ~]# ceph osd erasure-code-profile get {name}
 
(プロファイルの削除)
[root@mds ~]# ceph osd erasure-code-profile rm {name}

プール作成

参照 https://ceph.readthedocs.io/en/latest/cephfs/

ファイルシステムを作るには2種類のpoolが必要で、ここではデータ向けのpoolには「erasure-code」に対応させ、
メタデータ向けのpoolは従来の「レプリケーション」で作ります. そもそもメタデータは「erasure-code」が現状使えないです

(データ向けのpool)
[root@mds ~]# ceph osd pool create cephfs_data erasure test     # erasure-code-profileの「test」を適用します
 
(メタデータ向けのpool)
[root@mds ~]# ceph osd pool create cephfs_metadata 64

プールのサイズについてメタデータプールは小さくて良いので「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@mds ~]# ceph osd pool application enable cephfs_data cephfs
[root@mds ~]# ceph osd pool application enable cephfs_metadata cephfs

作ったpoolのリストは「ceph osd lspools」で確認できます

[root@mds ~]# ceph osd lspools
1 device_health_metrics
4 cephfs_data
 
[root@mds ~]#

反対にpoolの削除は「ceph osd pool delete」で行えます

[root@ceph-mgr ~]# ceph osd lspools
1 .mgr
2 cephfs_data
3 cephfs_metadata
 
[root@ceph-mgr ~]# ceph config set mon  mon_allow_pool_delete true    <--事前におまじないが必要
 
[root@ceph-mgr ~]# ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
pool 'cephfs_data' removed
 
[root@ceph-mgr ~]# ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
pool 'cephfs_metadata' removed
 
[root@ceph-mgr ~]# ceph osd lspools
1 .mgr
[root@ceph-mgr ~]#

と達成できる

autoscale

https://docs.ceph.com/en/latest/rados/operations/placement-groups/

[root@mds ~]# ceph osd pool autoscale-status
POOL                     SIZE  TARGET SIZE  RATE  RAW CAPACITY   RATIO  TARGET RATIO  EFFECTIVE RATIO  BIAS  PG_NUM  NEW PG_NUM  AUTOSCALE
device_health_metrics      0                 3.0        499.9G  0.0000                                  1.0       1              on
cephfs_data                0                 2.0        499.9G  0.0000                                  1.0      32              on
cephfs_metadata            0                 3.0        499.9G  0.0000                                  1.0      64              on
 
[root@mds ~]#

ファイルシステムの作成

作ったpoolを使ってファイルシステムを作ります
まず始めにここでは「erasure-code」なpoolをデータpoolとしているので、そのpoolの「allow_ec_overwrites」を有効にする必要がある
っで一度 有効にすると元に戻せないみたい

[root@mds ~]# ceph osd pool get cephfs_data allow_ec_overwrites
allow_ec_overwrites: false
 
[root@mds ~]#
[root@mgr ~]# ceph osd pool set cephfs_data allow_ec_overwrites true

「allow_ec_overwrites=true」はBlueStoreバックエンドではないと出来ないみたい

っでファイルシステム emfs を作成

[root@mgr ~]# ceph fs new emfs cephfs_metadata cephfs_data --force
 
 
[root@mds ~]# ceph fs ls
name: emfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
 
[root@mds ~]# ceph fs status
emfs - 0 clients
====
RANK  STATE   MDS     ACTIVITY     DNS    INOS
 0    active  mds  Reqs:    0 /s    10     13
      POOL         TYPE     USED  AVAIL
cephfs_metadata  metadata  1536k   219G
  cephfs_data      data       0    328G
MDS version: ceph version 15.2.9 (357616cbf726abb779ca75a551e8d02568e15b17) octopus (stable)
 
[root@mds ~]#

これでcephfs「emfs」は利用可能になります
実際の利用方法はCephFS/ClientとかCephFS/sambaを参照してください

ファイルシステムを一時停止/再開

[root@ceph-mgr ~]# ceph fs set emfs down true
emfs marked down.
 
[root@mds ~]# ceph fs set emfs down false
emfs marked up, max_mds = 1
 
[root@mds ~]#

作ったファイルシステムの削除

[root@ceph-mgr ~]# ceph fs set emfs down true
[root@ceph-mgr ~]# ceph fs rm emfs --yes-i-really-mean-it

キャッシュの階層化

階層化ストレージにも出来るみたい. っが必ず速くなるものでもないようで、要取り扱い注意な様子.
https://docs.ceph.com/en/latest/rados/operations/cache-tiering/

pool作成時にHDD/SSDで色を付けたい

参照先https://alanxelsys.files.wordpress.com/2019/02/configuring-separate-ssd-and-hdd-pools-with-ceph-mimic.pdf

下記の場合はHDDのみで構成されているが、SSDのみで「ceph-volume lvm create」すると、「CLASS」欄に「SSD」なosdが表示される。

[root@mgr ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME      STATUS  REWEIGHT  PRI-AFF
-1         0.68381  root default
-3         0.19537      host osd1
 0    hdd  0.09769          osd.0      up   1.00000  1.00000
 3    hdd  0.09769          osd.3      up   1.00000  1.00000
-5         0.19537      host osd2
 1    hdd  0.09769          osd.1      up   1.00000  1.00000
 4    hdd  0.09769          osd.4      up   1.00000  1.00000
-7         0.19537      host osd3
 2    hdd  0.09769          osd.2      up   1.00000  1.00000
 5    hdd  0.09769          osd.5      up   1.00000  1.00000
-9         0.09769      host osd4
 6    hdd  0.09769          osd.6      up   1.00000  1.00000
[root@mgr ~]#

SSDだけで作ったpool、HDDだけで作ったpoolを作るには

[root@mgr ~]# ceph osd crush rule create-replicated highcapacitypool default host hdd
[root@mgr ~]# ceph osd crush rule create-replicated highspeedpool default host ssd
 
(確認)
[root@mgr ~]# ceph osd crush rule ls
replicated_rule
erasure-code
cephfs_data
highcapacitypool
 
[root@mgr ~]# ceph osd crush rule dump highcapacitypool
{
    "rule_id": 3,
    "rule_name": "highcapacitypool",
    "ruleset": 3,
    "type": 1,
    "min_size": 1,
    "max_size": 10,
    "steps": [
        {
            "op": "take",
            "item": -2,
            "item_name": "default~hdd"
        },
        {
            "op": "chooseleaf_firstn",
            "num": 0,
            "type": "host"
        },
        {
            "op": "emit"
        }
    ]
}
 
[root@mgr ~]#

とする。
作った「crush-rule-name」を使ってpoolを作成する

(メタデータ向けのpoolでssh由来のみにするなら)
[root@mds ~]# ceph osd pool create cephfs_metadata 64 highspeedpool

「erasure-code」の場合は「erasure-code」のプロファイルで「crush-device-class」(「ceph osd crush class ls」の値)で定義できる
参照先https://access.redhat.com/documentation/ja-jp/red_hat_ceph_storage/4/html/storage_strategies_guide/device_classes

[root@mds ~]# ceph osd erasure-code-profile set {name} \
     plugin=jerasure \
     k={data-chunks} \
     m={coding-chunks} \
     technique={reed_sol_van|reed_sol_r6_op|cauchy_orig|cauchy_good|liberation|blaum_roth|liber8tion} \
     [crush-root={root}] \
     [crush-failure-domain={bucket-type}] \
     [crush-device-class={device-class}] \ 
     [directory={directory}] \
     [--force]

1つのファイルシステムに複数のpool(圧縮あり,圧縮無し,ssd由来)を加える

色んなタイプのpoolが作れます. 前段ではssdから構成されるpool、圧縮機能をもったpoolなどなど.
これらpoolをファイルシステムに組み込ませ、subvolumeで特定のpoolをあてがう事ができる

まずは圧縮機能が働くpoolを作ってみる

[root@mds ~]# ceph osd pool create cephfs_data_compress erasure test
pool 'cephfs_data_compress' created
[root@mds ~]# ceph osd pool set cephfs_data_compress  allow_ec_overwrites true    <-- 「erasure-code」なpoolなので「allow_ec_overwrites」を有効にする
[root@mds ~]# ceph osd pool application enable cephfs_data_compress cephfs        <--  poolの関連付け
 
 
[root@mds ~]# ceph osd pool set cephfs_data_compress compression_algorithm snappy
[root@mds ~]# ceph osd pool set cephfs_data_compress compression_mode aggressive

参照先https://documentation.suse.com/ja-jp/ses/5.5/html/ses-all/ceph-pools.html#sec-ceph-pool-compression

っで作ったpool「cephfs_data_compress」を既設のファイルシステム「emfs」に加える

(確認)
[root@mds ~]# ceph fs ls
name: emfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
 
(poolの追加)
[root@mds ~]# ceph fs add_data_pool emfs cephfs_data_compress
 
(確認)
[root@mds ~]# ceph fs ls
name: emfs, metadata pool: cephfs_metadata, data pools: [cephfs_data cephfs_data_compress ]    <-- data poolとして追加された
 
[root@mds ~]#

ここから次第にややこしくなるのだが,,,ファイルシステム「emfs」を作った段階で「Ceph File System ボリューム」は決まっている

[root@mds ~]# ceph fs volume ls
[
    {
        "name": "emfs"
    }
]
[root@mds ~]#

ファイルシステム名と同じ.

次に「ファイルシステムサブボリュームグループ」を用意します.
ここで「em」グループを作ってここにはpool「cephfs_data」
もう一つ「Movies」グループを作ってここにはpool「cephfs_data_compress」を割り当ててみる

[root@mds ~]# ceph fs subvolumegroup create emfs em --pool_layout cephfs_data_compress
[root@mds ~]# ceph fs subvolumegroup create emfs movies --pool_layout cephfs_data

するとclientでマウントしている場所にフォルダ「volumes/{em,movies}」フォルダが追加されます

[root@client ~]# ls -l /em/volumes/
total 0
drwxr-xr-x 1 root root 0 Mar 10 20:40 em
drwxr-xr-x 1 root root 0 Mar 10 20:41 movies
[root@client ~]#

「ceph fs subvolumegroup create」と連動してフォルダが作られます.
ぅーん. brtfsやzfsの香り

もっと短絡的にあるフォルダ以下をこのpoolへ

参照先https://docs.ceph.com/en/latest/cephfs/file-layouts/#adding-a-data-pool-to-the-file-system

ceph fs add_data_pool cephfs cephfs_data_ssd
mkdir /mnt/cephfs/myssddir
setfattr -n ceph.dir.layout.pool -v cephfs_data_ssd /mnt/cephfs/myssddir
[root@client volumes]# getfattr -n  ceph.dir.layout.pool em
# file: em
ceph.dir.layout.pool="cephfs_data_compress"
 
[root@client volumes]#
最新の60件
2024-04-19 2024-04-18 2024-04-17 2024-04-16 2024-04-15 2024-04-11 2024-04-06 2024-04-05 2024-03-30 2024-03-29 2024-03-19 2024-03-17 2024-03-15 2024-03-06 2024-03-05 2024-03-03 2024-02-23 2024-02-22 2024-02-21 2024-02-20 2024-02-19 2024-02-18 2024-02-17 2024-02-13 2024-02-12 2024-02-09 2024-02-04 2024-02-03 2024-01-31 2024-01-30 2024-01-29 2024-01-28 2024-01-22 2024-01-16 2024-01-13 2024-01-09 2024-01-08
  • Ceph/MDS
2024-01-07 2024-01-03 2023-12-22 2023-12-17

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-01-08 (月) 02:36:42