CephFS MDSs

https://ceph.readthedocs.io/en/latest/start/intro/から
「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.」
とありCephをPOSIXファイルシステムとして利用するなら必要な機能部分.

っでその構築
https://docs.ceph.com/docs/master/install/manual-deployment/#adding-mds

まずCephFS/OSDと同じようにCephFS Monitorノードから「ceph.conf」と管理者権限の「管理者キーリング」をmdsに持ってくる.

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

次にmdsデータディレクトリを作る

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

「ceph.con」にmdsの場所を記載してデーモンを起動させる.
もしエラーが発生したら「systemctl reset-failed ceph-mon@mds.service」を行ってから再起動します

[root@mds ~]# vi /etc/ceph/ceph.conf
[global]
fsid = 95f5eb4a-2ea2-4539-b0a3-bda3b6358ba5
mon initial members = mgr,mon1,mon2
mon host = 192.168.0.47,192.168.0.112,192.168.0.113
 
[mon.mgr]
host = mgr
addr = 192.168.0.47
[mon.mon1]
host = mon1
addr = 192.168.0.112
[mon.mon2]
host = mon2
addr = 192.168.0.113
 
[mds.mds]                #これを追加
host = mds
 
[root@mds ~]# systemctl enable ceph-mds@mds
[root@mds ~]# systemctl start  ceph-mds@mds

Monitor側から確認してみると

[root@mds ~]# ceph -s
  cluster:
    id:     95f5eb4a-2ea2-4539-b0a3-bda3b6358ba5
    health: HEALTH_WARN
            Module 'restful' has failed dependency: No module named 'pecan'
 
  services:
    mon: 3 daemons, quorum mgr,mon1,mon2 (age 43h)
    mgr: mgr(active, since 42h)
    mds:  1 up:standby
    osd: 3 osds: 3 up (since 25h), 3 in (since 25h)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 48 TiB / 48 TiB avail
    pgs:     1 active+clean
 
[root@mds ~]#

とmdsが稼働したことが分かる(mds: 1 up:standby)

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

プール作成時のレプリカ数

cephは同じデータを複数のODSに分散させる
通常は3
なので、ODS全ての容量の1/3が使える量になる.
「erasure-code」を使ったプールでは設定によるがそれが調整できるみたい.
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」の設定内容は下記にて確認できる

[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
 
[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}

プール作成

論理パーティション「pool」を作成します
ファイルシステム cephfs として利用するには データ向けのpoolとメタデータ向けのpoolの2つが必要
https://ceph.readthedocs.io/en/latest/cephfs/

データ向けのpoolは「erasure-code」に対応されているが、メタデータ向けのpoolは従来の「replicated」形式を使う必要がある

(データ向けの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」で行えますが、実際にはMonitorノードの「/etc/ceph/ceph.conf」の調整が必要で

[global]
fsid = 95f5eb4a-2ea2-4539-b0a3-bda3b6358ba5
mon initial members = mgr,mon1,mon2
mon host = 192.168.0.47,192.168.0.112,192.168.0.113
 
[mon.mgr]
host = mgr
addr = 192.168.0.47
mon allow pool delete = true
[mon.mon1]
host = mon1
addr = 192.168.0.112
mon allow pool delete = true
[mon.mon2]
host = mon2
addr = 192.168.0.113
mon allow pool delete = true

と各ノードに「mon allow pool delete = true」を加えて「ceph-mon@.service」を再起動して置く必要がある。
そうした上で

[root@mds ~]# ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
pool 'cephfs_data' removed
[root@mds ~]#

と達成できる

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@mds ~]# ceph fs set emfs down true          --> [ceph -s]の出力で「mds: emfs:1 {0=mds=up:stopping}」となる
emfs marked down.
 
[root@mds ~]# ceph fs set emfs down false         --> [ceph -s]の出力で「mds: emfs:1 {0=mds=up:starting}」となる
emfs marked up, max_mds = 1
 
[root@mds ~]#

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

[root@mds ~]# ceph fs set emfs down true
[root@mds ~]# systemctl stop ceph-mds@mds.service
[root@mds ~]# 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]#

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-09-30 (木) 02:18:13 (70d)