#author("2026-04-06T02:28:40+00:00","default:sysosa","sysosa")
#author("2026-04-06T04:28:18+00:00","default:sysosa","sysosa")
cephadmで作ってみた.
[[Ceph]]はOSの上にcephを構築する手順です. [[https://docs.ceph.com/en/latest/install/>+https://docs.ceph.com/en/latest/install/]]にある「Ceph can also be installed manually.」で行ったもの.
っでここは「RECOMMENDED METHODS」となるCephadmを使って構築したらの巻.  docker/podmanなコンテナ技術をベースにその上にcephを構築してます.
OSの上に載せるか、docker/podmanなコンテナ技術の上に載せるかの違いですね. アップデートは後者が楽みたい. っがそもそもおっかなくてupdateなんてしたくないなぁ〜な本音があるけど.

っで構成表

|BGCOLOR(YELLOW):ホスト名|BGCOLOR(YELLOW):役目|BGCOLOR(YELLOW):IPアドレス|BGCOLOR(YELLOW):backend|BGCOLOR(YELLOW):OS|BGCOLOR(YELLOW):ストレージ|BGCOLOR(YELLOW):CPU threads|
|ceph01    |&color(crimson){Ceph Manager};         &br;&color(limegreen){Ceph Metadata Server}; &br;&color(magenta){Ceph Monitor};|192.168.0.47/24|    |Rockylinux9.4|system(16GB) &br; /var/lib/ceph(8GB,monitor)|8 threads(monitor:4+metadata:2+manager:1+ ほか)|
|ceph02    |&color(crimson){Ceph Manager};         &br;&color(limegreen){Ceph Metadata Server}; &br;&color(magenta){Ceph Monitor};|192.168.0.48/24|    |~|system(16GB)  &br; /var/lib/ceph(8GB,monitor)|8 threads(monitor:4+metadata:2+manager:1+ ほか)|
|ceph-osd1 |&color(orangered){Ceph OSDs};            &br;&color(magenta){Ceph Monitor};|192.168.0.49/24|  10.10.10.49/24  |~|system(16GB) &br; /var/lib/ceph(8GB,monitor) &br; OSD(50GB:SSD:meta)&br;OSD(50GB:HDD:data)|7 threads(moitor:4t+osd:2[ssd]*1+osd:1[hdd]*1)|
|ceph-osd2 |&color(orangered){Ceph OSDs};                            |192.168.0.50/24|  10.10.10.50/24  |~|system(16GB) &br; OSD(50GB:SSD:meta)&br;OSD(50GB:HDD:data)+OSD(50GB:HDD:data)+OSD(40GB:SSD:block)+OSD(20GB:SSD:wal) |4 threads(osd:2[ssd]*1+osd:1[hdd]*2)|
|ceph-osd3 |&color(orangered){Ceph OSDs};                            |192.168.0.51/24|  10.10.10.51/24  |~|system(16GB) &br; OSD(50GB:SSD:meta)&br;OSD(50GB:HDD:data)+OSD(50GB:HDD:data)+OSD(50GB:HDD:data)+OSD(60GB:SSD:block)|5 threads(osd:2[ssd]*1+osd:1[hdd]*3)|

要求threadsはOSDで1つのssdあたり2つ、hddなら1つ. Monitorなら追加で4つ. monitorは4.metadataは2. managerは1としてます.
1つのOSDノードで 10個のHDD があるなら 10threads分のCPU能力があればいい. もし10個のSSDなら 20threads 分となります. 
ですが、OSDノード内で起動されるコンテナ(podman.docker)に対して 1 threads, 2threads を定義する必要はない。OSDノード全体でその分量のthreadsがあれば十分見たい. これはmgr, monともに.


参照[[https://www.redbooks.ibm.com/redpieces/pdfs/redp5721.pdf>+https://www.redbooks.ibm.com/redpieces/pdfs/redp5721.pdf]]

メモ [[Ceph/cephadm/memo]]
nfs [[Ceph/cephadm/nfs]]
smb [[Ceph/cephadm/smb]]

***コンテナを入れる [#kaa71f83]
cephのクライアント以外の全てのceph関連ノードに podman と lvm2 を入れます.   &size(10){podmanの代わりにdockerでも構いません. その際はpodmanは削除します};
#code(nonumber){{
dnf install podman lvm2 -y
}}
&color(red){*};SELinuxとfirewalldは有効のままでもいいみたい.

***Cephadm [#k0d7c243]
cephadmで構築を進めるのですが、Rockylinux9にcephadmパッケージを含むリポジトリ「centos-release-ceph-squid」が使えそうなのでそれを使います. &size(10){リポジトリの中身は「dnf list available --disablerepo=* --enablerepo=centos-ceph-squid」で確認可};
#code(nonumber){{
[root@ceph01 ~]# dnf install centos-release-ceph-squid.noarch -y
[root@ceph01 ~]# dnf install cephadm   python3-jinja2   python3-pyyaml -y

[root@ceph01 ~]# cephadm version
cephadm version 19.2.3 (c92aebb279828e9c3c1f5d24613efca272649e62) squid (stable)
[root@ceph01 ~]#
}}

っでcephクラスターを作るのですが、cephadmを実行するとそのノードは &color(crimson){Ceph Manager}; 兼 &color(magenta){Ceph Monitor}; ノードになります. 
同時に「cluster network」を指定できて、この「cluster network」はOSDデーモン間のレプリケーション、リカバリ、ハートビート向けの回線となる
&size(10){cephクライアントとかへの本業サービス向けを「public network」というみたい};
&size(10){dashboard-password-noupdateで初回時強制パスワード変更を回避できます};
&size(10){initial-dashboard-passwordで初期パスワードを定義できます. ここでは admin としてます};
&size(10){skip-monitoring-stackでmonitoringなサービス(prometheus, grafana, alertmanager, node-exporter)の構築がskipします};

#code(nonumber){{
[root@ceph01 ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp6s18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000        * 10.10.10.xのnicは用意してないです
    link/ether bc:24:11:2f:fd:94 brd ff:ff:ff:ff:ff:ff

[root@ceph01 ~]#
[root@ceph01 ~]# cephadm bootstrap --mon-ip 192.168.0.47 --cluster-network 10.10.10.0/24  --dashboard-password-noupdate --initial-dashboard-password adminpass --skip-monitoring-stack
 :
(数分かかる. この間にpodmanは(docker)イメージを取得して各種コンテナを起動します)
 :
Ceph Dashboard is now available at:

             URL: https://ceph01.sybyl.local:8443/
            User: admin
        Password: adminpass
 :
[root@ceph01 ~]#
[root@ceph01 ~]# cat /etc/ceph/ceph.conf
# minimal ceph.conf for 225c3676-7676-11f0-9203-bc24112ffd94
[global]
        fsid = 225c3676-7676-11f0-9203-bc24112ffd94
        mon_host = [v2:192.168.0.47:3300/0,v1:192.168.0.47:6789/0]

[root@ceph01 ~]#
[root@ceph01 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQBQg5lol1bxDhAAQx7NUN4wZWMLYlmkR4YTfg==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

[root@ceph01 ~]#
[root@ceph01 ~]# podman ps
CONTAINER ID  IMAGE                                                                                      COMMAND               CREATED        STATUS        PORTS       NAMES
d62565cc1304  quay.io/ceph/ceph:v19                                                                      -n mon.ceph01 -f ...  5 minutes ago  Up 5 minutes              ceph-225c3676-7676-11f0-9203-bc24112ffd94-mon-ceph01
fbbfa416fb5b  quay.io/ceph/ceph:v19                                                                      -n mgr.ceph01.ldy...  5 minutes ago  Up 5 minutes              ceph-225c3676-7676-11f0-9203-bc24112ffd94-mgr-ceph01-ldyztd
8889b669c7c2  quay.io/ceph/ceph@sha256:7c69e59beaeea61ca714e71cb84ff6d5e533db7f1fd84143dd9ba6649a5fd2ec  -n client.crash.c...  5 minutes ago  Up 5 minutes              ceph-225c3676-7676-11f0-9203-bc24112ffd94-crash-ceph01

[root@ceph01 ~]#
}}
この段階でDashboardにアクセスできます. 上記のURLでアカウントは「admin」パスワードは「adminpass」となる

もしコマンドが間違って作られた環境を破棄したいなら
#code(nonumber){{
[root@ceph01 ~]# ceph fsid
225c3676-7676-11f0-9203-bc24112ffd94

[root@ceph01 ~]# cephadm rm-cluster --fsid  225c3676-7676-11f0-9203-bc24112ffd94  --force
[root@ceph01 ~]# rm -rf /etc/ceph  /var/lib/ceph
}}
で作られたpodmanのコンテナらが消えます

***cephコマンドを入れる [#uc4a870b]
設定ファイルとキーリングがあれば「cephadm shell」経由でコンテナ内でコマンドが実行できる.
例えば「ceph -s」は「cephadm shell -- ceph -s」とする. っが面倒. 「ceph-common」パッケージを入れれば「cephadm shell」を使わずダイレクトに「ceph」コマンドが使える.

ただし libcrypto.so.3(OPENSSL_3.4.0) が要求されるので rockylinux9(openssl-3.2.2) では無理. 別途rpmbuildで openssl-3.5.1 なrpmを作って差し替える [[Ceph/cephadm/memo#c7946709]]

#code(nonumber){{
[root@ceph01 ~]# cephadm add-repo --release squid    <-- 「/etc/yum.repos.d/」にceph.repo , epel.repo らが追加される
Writing repo to /etc/yum.repos.d/ceph.repo...
Enabling EPEL...
Completed adding repo.

[root@ceph01 ~]# cephadm install ceph-common
Installing packages ['ceph-common']...

[root@ceph01 ~]# ceph -s
(「cephadm shell -- ceph -s」と同義)
}}

作りたての状態では
#code(nonumber){{
[root@ceph01 ~]# ceph -s
  cluster:
    id:     225c3676-7676-11f0-9203-bc24112ffd94
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum ceph01 (age 94m)
    mgr: ceph01.ldyztd(active, since 94m)
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

[root@ceph01 ~]#
}}
健康状態(health)はOSDが3つ以上ないので警告状態とある. monとmgrは共にceph01が担当の様子.
一応dashboardからみるとこんな感じ  &size(10){自動的にfirewallを調整してportを追加してくれます};
&ref(2024y12m02d_215248138.png,nolink,40%);


***既定のサービス構成 [#s8b430ca]
cephクラスターの仕様を調整します. まずは初期のサービス構成を出力してみる
#code(nonumber){{
[root@ceph01 ~]# ceph orch ls --export
service_type: crash
service_name: crash
placement:
  host_pattern: '*'
---
service_type: mgr
service_name: mgr
placement:
  count: 2
---
service_type: mon
service_name: mon
placement:
  count: 5

[root@ceph01 ~]#
}}
とmonが5つ、mgrが2つを想定している. ここでcephにホスト追加すると勝手にサービス(monitor, manager, osd)を順次登録してしまう. 必要な数だけ.
なので初めにそれらが機能しないように制限を加えます
#code(nonumber){{
[root@ceph01 ~]# ceph orch set-unmanaged mon
[root@ceph01 ~]# ceph orch set-unmanaged mgr
[root@ceph01 ~]# ceph orch apply osd --all-available-devices --unmanaged=true
}}
この変更で各サービスの構成に「unmanaged: true」が追加される   &size(10){確認は「ceph orch ls --export」で};


***構成員を追加(ceph02) [#hb9c6631]
追加対象のホストはpodman/dockerが入っている事が前提. っで初めのceph01マシンからrootで操作されるようにsshキー(/etc/ceph/ceph.pub)を各計算機に入れる必要があります.     &size(10){「/root/.ssh/authorized_keys」にキーが追加されます};
#code(nonumber){{
(ceph02での事前措置)
dnf install podman lvm2 -y
----ここまで----

[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph02        * ssh-copy-id コマンドは openssh-clients パッケージに存在する普通のプログラム.
}}
その後に追加作業を行います

#code(nonumber){{
[root@ceph01 ~]# ceph orch host add ceph02 192.168.0.48                  *「ceph orch host add ceph02」でも可.  ipはfile,dnsから取れるみたい.
(これでssh経由で相手先[ceph02]に必要なコンテナが用意されます)

(確認)
[root@ceph01 ~]# ceph orch host ls
HOST    ADDR          LABELS  STATUS
ceph01  192.168.0.47  _admin
ceph02  192.168.0.48        <--- 追加されました
2 hosts in cluster
[root@ceph01 ~]#
}}
と新規ホスト ceph02 が登録されましたが、この時点ではceph02にはまだ役割が与えられてないです
#code(nonumber){{
[root@ceph01 ~]# ceph -s
  cluster:
    id:     225c3676-7676-11f0-9203-bc24112ffd94
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum ceph01 (age 4h)
    mgr: ceph01.ldyztd(active, since 4h)
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

[root@ceph01 ~]#
}}
ceph02側では下記のコンテナが動いてます
#code(nonumber){{
[root@ceph02 ~]# podman ps
CONTAINER ID  IMAGE                                                                                      COMMAND               CREATED        STATUS        PORTS       NAMES
089daecb287d  quay.io/ceph/ceph@sha256:7c69e59beaeea61ca714e71cb84ff6d5e533db7f1fd84143dd9ba6649a5fd2ec  -n client.crash.c...  4 minutes ago  Up 4 minutes              ceph-225c3676-7676-11f0-9203-bc24112ffd94-crash-ceph02

[root@ceph02 ~]#
}}

***構成員(ceph02)に役割を持たせる [#g7953166]
ここでは ceph01とceph02 には &color(crimson){Ceph Manager};  と &color(magenta){Ceph Monitor}; と &color(limegreen){Ceph Metadata Server}; の役目を負わせることにしました.
ceph02に&color(crimson){Ceph Manager}; の役目を持たせるために、managerの構成表のみを書き出して修正を加えます. 「count」指定を「hosts」にしてmanagerが動くホストを指名します.
単に「ceph orch apply mgr --placement="ceph01,ceph02"」でもいいのです
#code(nonumber){{
[root@ceph01 ~]# ceph orch ls --service_name=mgr --export > mgr.yaml
[root@ceph01 ~]# cat mgr.yaml
service_type: mgr
service_name: mgr
placement:
  count: 2
unmanaged: true
[root@ceph01 ~]# vi mgr.yaml
service_type: mgr
service_name: mgr
placement:
  hosts:            <-- ここ以下を修正します
  - ceph01
  - ceph02
[root@ceph01 ~]# ceph orch apply -i mgr.yaml --dry-run
[root@ceph01 ~]# ceph orch apply -i mgr.yaml 
}}
すると ceph02 で mgr のコンテナが自動的に用意される
#code(nonumber){{
[root@ceph02 ~]# podman ps
CONTAINER ID  IMAGE                                                                                      COMMAND               CREATED        STATUS        PORTS       NAMES
089daecb287d  quay.io/ceph/ceph@sha256:7c69e59beaeea61ca714e71cb84ff6d5e533db7f1fd84143dd9ba6649a5fd2ec  -n client.crash.c...  9 minutes ago  Up 9 minutes              ceph-225c3676-7676-11f0-9203-bc24112ffd94-crash-ceph02
042f5fd6b97e  quay.io/ceph/ceph@sha256:7c69e59beaeea61ca714e71cb84ff6d5e533db7f1fd84143dd9ba6649a5fd2ec  -n mgr.ceph02.mbl...  2 minutes ago  Up 2 minutes              ceph-225c3676-7676-11f0-9203-bc24112ffd94-mgr-ceph02-mblbhg

[root@ceph02 ~]#
}}
そして「ceph -s」の出力でも mgr として ceph02 が加わってstandbys状態に入りました.
#code(nonumber){{
[root@ceph01 ~]# ceph -s
 :
  services:
    mon: 1 daemons, quorum ceph01 (age 4h)
    mgr: ceph01.ldyztd(active, since 4h), standbys: ceph02.mblbhg   <-- ここ. ceph01.ocyothの「ocyoth」はランダム文字列みたい.
    osd: 0 osds: 0 up, 0 in
 :
[root@ceph01 ~]#
}}
&color(limegreen){Ceph Metadata Server};の役割付与は OSD の設定後にします.

***構成員を追加(ceph-osd1) [#t1cd183a]
まだmonを3つ作ってませんが、その構成員となる ceph-osd1 を加えます.
加え方は ceph02 と同じように事前にpodman/dockerらを入れて、ceph01から追加作業を行います
#code(nonumber){{
(ceph-osd1での事前措置)
dnf install podman lvm2 -y
----ここまで----

[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd1
}}
そしてceph-osd1をcephに参加させます
#code(nonumber){{
[root@ceph01 ~]# ceph orch host add ceph-osd1 192.168.0.49
[root@ceph01 ~]# ceph orch host ls
HOST       ADDR          LABELS  STATUS
ceph01     192.168.0.47  _admin
ceph02     192.168.0.48
ceph-osd1  192.168.0.49        <--- 追加されました
3 hosts in cluster
[root@ceph01 ~]#
}}
参加とともに自動的にpodman/dokcerコンテナが用意されます.
#code(nonumber){{
[root@ceph-osd1 ~]# podman ps
CONTAINER ID  IMAGE                                                                                      COMMAND               CREATED        STATUS        PORTS       NAMES
d3e6379d2121  quay.io/ceph/ceph@sha256:7c69e59beaeea61ca714e71cb84ff6d5e533db7f1fd84143dd9ba6649a5fd2ec  -n client.crash.c...  5 minutes ago  Up 5 minutes              ceph-225c3676-7676-11f0-9203-bc24112ffd94-crash-ceph-osd1

[root@ceph-osd1 ~]#
}}

ここでmonを提供するマシンが3台揃ったので、monitorを設定します
#code(nonumber){{
[root@ceph01 ~]# ceph orch ls --service_name=mon --export > mon.yaml
[root@ceph01 ~]# cat mon.yaml
service_type: mon
service_name: mon
placement:
  count: 5
unmanaged: true
[root@ceph01 ~]# vi mon.yaml
service_type: mon
service_name: mon
placement:
  hosts:
  - ceph01
  - ceph02
  - ceph-osd1

[root@ceph01 ~]# ceph orch apply -i mon.yaml --dry-run
[root@ceph01 ~]# ceph orch apply -i mon.yaml
}}
これでceph02とceph-osd1にmonのコンテナが追加されます
「ceph -s」で確認するとこんな感じ
#code(nonumber){{
[root@ceph01 ~]# ceph -s
 :
  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 2m)            <-- ceph01, ceph02, ceph-osd1 と3つ揃いました.
    mgr: ceph01.ldyztd(active, since 4h), standbys: ceph02.mblbhg
    osd: 0 osds: 0 up, 0 in
 :
[root@ceph01 ~]#
}}
一応dashboardの「Administration -> Services」では下記のように表示される
&ref(2024y12m03d_014555586.png,nolink,40%);

***残りの構成員を参加させる [#wb60f5ca]
ceph-osd2とceph-osd3 を参加させます.

ceph-osd1と同じようにpodman/dockerを入れておきます「dnf install podman lvm2 -y」. その上で
#code(nonumber){{
[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd2
[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd3

[root@ceph01 ~]# ceph orch host add ceph-osd2 192.168.0.50
[root@ceph01 ~]# ceph orch host add ceph-osd3 192.168.0.51
[root@ceph01 ~]# ceph orch host ls
HOST       ADDR          LABELS  STATUS
ceph01     192.168.0.47  _admin
ceph02     192.168.0.48
ceph-osd1  192.168.0.49
ceph-osd2  192.168.0.50
ceph-osd3  192.168.0.51
5 hosts in cluster
[root@ceph01 ~]#
}}
ceph-osd2, ceph-osd3それぞれpodman/dockerが自動的にデプロイされて動きます


***OSD設定 [#ga342c80]
前段で「ceph orch apply osd --all-available-devices --unmanaged=true」としたので OSDsは自動登録させないようにしてます

#code(nonumber){{
[root@ceph01 ~]# ceph orch ls --service_type=osd --export >  osd.yaml
[root@ceph01 ~]# vi osd.yaml
service_type: osd
service_id: all-available-devices
service_name: osd.all-available-devices
placement:
  host_pattern: '*'
unmanaged: true            <--- これで自動登録が停止されます
spec:
  data_devices:
    all: true
  filter_logic: AND
  objectstore: bluestore

[root@ceph01 ~]# ceph orch apply -i osd.yaml --dry-run
[root@ceph01 ~]# ceph orch apply -i osd.yaml
}}
また、osd.yamlで10TB-12TBのHDDは「data_devices」として、SSDは「db_devices」、250GBのSSDは「wal_devices」と定義もできますが、ミスったら嫌なので個別指定にしたいと思います
bluestoreで作成するのですが、data_devices(HDDね)のみ指定するのもあれば、WAL(wal_devices)/DB(db_devices)デバイスを駆使した作成もできる

下記は"例"としてOSDの作り方を示します. &size(10){本来なら同じdata_devices, block.db, block.wal を持たせるのかなと. デバイスがHDDかSSDかは「cat /sys/block/sdc/queue/rotational」で確認できます};

#code(nonumber){{
(ceph-osd1: /dev/sdc[SSD(meta)], /dev/sdd[HDD(data)] をそれぞれosdとして登録)
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd1:data_devices=/dev/sdc,/dev/sdd    <-- OSDが2つ作られます. block.db と block.wal は用意してません

(ceph-osd2: /dev/sdb[SSD(meta)]はそのままosdとして登録. /dev/sdc[HDD(data)]と/dev/sdd[HDD(data)]は /dev/sde[SSD(db)] をblock.db、/dev/sdf[SSD(wal)]をblock.walとしてosdを作る. BlueStoreを活用してます)
(db_deviceとwal_deveiceは事前にdata_device分だけ領域を作っておく必要があります. パーティションかLVMで作っておきます)
(ここでは2つのdata_device(sdcとsdd)向けに作るので2分割です)

[root@ceph-osd2 ~]# pvcreate /dev/sde
[root@ceph-osd2 ~]# vgcreate db /dev/sde
[root@ceph-osd2 ~]# lvcreate -n 0 -l 50%VG db
[root@ceph-osd2 ~]# lvcreate -n 1 -l 50%VG db

[root@ceph-osd2 ~]# pvcreate /dev/sdf
[root@ceph-osd2 ~]# vgcreate wal /dev/sdf
[root@ceph-osd2 ~]# lvcreate -n 0 -l 50%VG wal
[root@ceph-osd2 ~]# lvcreate -n 1 -l 50%VG wal

(そのうえでceph01から操作します)
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd2:data_devices=/dev/sdc,db_devices=/dev/db/0,wal_devices=/dev/wal/0 
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd2:data_devices=/dev/sdd,db_devices=/dev/db/1,wal_devices=/dev/wal/1 
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd2:data_devices=/dev/sdb

(ceph-osd3: /dev/sd[bcd]がdata_device[data]で/dev/sdeが3つのdata_device[data]のblock.db、そして/dev/sdfはdata_device[meta]としてます. block.walは用意しないです)
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd3:data_devices=/dev/sdb,/dev/sdc,/dev/sdd,db_devices=/dev/sde
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd3:data_devices=/dev/sdf
}}
この後に ceph-osdXでosdのコンテナが立ち上がります.
&size(10){前のversionでは db_deviceはdata_deviceに応じて勝手に分割されていましたが、それはなくなりdata_device分事前に用意することになったみたい. wal_deviceと同じ奉仕になった模様};



状況は下記になります
#code(nonumber){{
[root@ceph01 ~]# ceph osd tree
ID   CLASS  WEIGHT   TYPE NAME           STATUS  REWEIGHT  PRI-AFF
 -1         0.53714  root default
 -3         0.09760      host ceph-osd1
  1    hdd  0.04880          osd.1           up   1.00000  1.00000
  0    ssd  0.04880          osd.0           up   1.00000  1.00000
 -7         0.18558      host ceph-osd2
  2    hdd  0.06839          osd.2           up   1.00000  1.00000
  3    hdd  0.06839          osd.3           up   1.00000  1.00000
  4    ssd  0.04880          osd.4           up   1.00000  1.00000
-10         0.25397      host ceph-osd3
  5    hdd  0.06839          osd.5           up   1.00000  1.00000
  6    hdd  0.06839          osd.6           up   1.00000  1.00000
  7    hdd  0.06839          osd.7           up   1.00000  1.00000
  8    ssd  0.04880          osd.8           up   1.00000  1.00000

[root@ceph01 ~]# ceph orch device ls
HOST       PATH      TYPE  DEVICE ID                   SIZE  AVAILABLE  REFRESHED  REJECT REASONS
ceph01     /dev/sr0  hdd   QEMU_DVD-ROM_QM00003       10.7G  No         11m ago    Has a FileSystem
ceph-osd1  /dev/sdc  ssd   QEMU_HARDDISK_drive-scsi2  50.0G  No         6m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd1  /dev/sdd  hdd   QEMU_HARDDISK_drive-scsi3  50.0G  No         6m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdb  ssd   QEMU_HARDDISK_drive-scsi1  50.0G  No         3m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdc  hdd   QEMU_HARDDISK_drive-scsi2  50.0G  No         3m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdd  hdd   QEMU_HARDDISK_drive-scsi3  50.0G  No         3m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sde  ssd   QEMU_HARDDISK_drive-scsi4  40.0G  No         3m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdf  ssd   QEMU_HARDDISK_drive-scsi5  20.0G  No         3m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd3  /dev/sdb  hdd   QEMU_HARDDISK_drive-scsi1  50.0G  No         68s ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd3  /dev/sdc  hdd   QEMU_HARDDISK_drive-scsi2  50.0G  No         68s ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd3  /dev/sdd  hdd   QEMU_HARDDISK_drive-scsi3  50.0G  No         68s ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd3  /dev/sde  ssd   QEMU_HARDDISK_drive-scsi4  60.0G  No         68s ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd3  /dev/sdf  ssd   QEMU_HARDDISK_drive-scsi5  50.0G  No         68s ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
[root@ceph01 ~]#
}}
デバイスの性格からCLASSが自動的に割り当てられます. 規定で[HDD]と[SSD]が用意されている. &size(10){手動で変更を望むなら「ceph osd crush set-device-class hdd|ssd osd.X」と実行する};

あと各osd.Xのdb_/wal_deviceの構成要素を確認したいなら、OSDノードに「cephadm」をインストールして「cephadm shell -- ceph-volume lvm list X」で得られる



#code(nonumber){{
[root@ceph01 ~]# ceph -s
  cluster:
    id:     4ce725c6-eb0d-11ef-980a-bc24112ffd94
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 5h)
    mgr: ceph01.nuffcu(active, since 6h), standbys: ceph02.foawmo
    osd: 9 osds: 9 up (since 11m), 9 in (since 12m)

  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 577 KiB
    usage:   100 GiB used, 449 GiB / 550 GiB avail
    pgs:     1 active+clean
 
[root@ceph01 ~]#
}}

OSDを用意すると勝手にpool(.mgr)が作られる. &size(10){「ceph osd lspools」で得られます};

次にサービス配置の最後にmdsを加えますが、これはプール(後述)を作成してその後に「ceph fs new <fs_name> <metadata> <data>」の後で定義する

&size(10){追加作業していないのに以前の情報を残したストレージには「wipefs」コマンドで対処する. その後「ceph orch device zap ceph-osd3 /dev/sdb --force」で消して再度追加します};

用意したosdを外して1から作り直すには
#code(nonumber){{
ceph osd out 2
ceph -s
ceph orch daemon rm osd.2 --force            <--- ceph-osd2のpodmanが停止
ceph osd purge 2 --yes-i-really-mean-it

@ceph-osd2
lvremove <LVM領域>
sgdisk --zap-all /dev/sdX
wipefs -a /dev/sdX
reboot                <-- rebootしないとリセットされない感じがした
}}




***OSD設定(その2) [#o874b6a2]

&color(red){注意}; この方式ですが、19.2.3で walデバイスの取り扱いが上手く行かないです. なので(その1)の方法を使ってください.

OSDのサービス構成(osd.yaml)を修正して適用する方法もある.
前段は個別に手動でHDD/SSDらを組み込んでいるが、ほぼ同じ構成のOSD nodeならcephに追加したと同時にHDD/SSDらが登録されるのが楽. あとミスも減る.


#code(nonumber){{
[root@ceph01 ~]# ceph orch ls
NAME                       PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
crash                                 5/5  9m ago     8h   *
mgr                                   2/2  9m ago     6h   ceph01;ceph02
mon                                   3/3  9m ago     8h   ceph01;ceph02;ceph-osd1
osd.all-available-devices               0  -          8h   <unmanaged>

[root@ceph01 ~]# ceph orch rm osd.all-available-devices
Removed service osd.all-available-devices

[root@ceph01 ~]# ceph orch ls
NAME   PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
crash             5/5  5s ago     8h   *
mgr               2/2  5s ago     6h   ceph01;ceph02
mon               3/3  5s ago     8h   ceph01;ceph02;ceph-osd1
[root@ceph01 ~]#
}}

#code(nonumber){{
[root@ceph01 ~]# vi osd.yaml
service_type: osd
service_id: ceph-osd1-ssd
service_name: osd.ceph-osd1-ssd
placement:
  hosts:
  - ceph-osd1
spec:
  data_devices:
    rotational: 0
---
service_type: osd
service_id: ceph-osd1-hdd
service_name: osd.ceph-osd1-hdd
placement:
  hosts:
  - ceph-osd1
spec:
  data_devices:
    rotational: 1
---
service_type: osd
service_id: ceph-osd2-ssd
service_name: osd.ceph-osd2-ssd
placement:
  hosts:
  - ceph-osd2
spec:
  data_devices:
    paths:
    - /dev/sdb
---
service_type: osd
service_id: ceph-osd2-hdd
service_name: osd.ceph-osd2-hdd
placement:
  hosts:
  - ceph-osd2
spec:
  data_devices:
    paths:
    - /dev/sdc
    - /dev/sdd
  db_devices:
    paths:
    - /dev/sde
  wal_devices:
    paths:
    - /dev/sdf
---
service_type: osd
service_id: ceph-osd3-ssd
service_name: osd.ceph-osd3-ssd
placement:
  hosts:
  - ceph-osd3
spec:
  data_devices:
    paths:
    - /dev/sdf
---
service_type: osd
service_id: ceph-osd3-hdd
service_name: osd.ceph-osd3-hdd
placement:
  hosts:
  - ceph-osd3
spec:
  data_devices:
    paths:
    - /dev/sdb
    - /dev/sdc
    - /dev/sdd
  db_devices:
    paths:
    - /dev/sde

[root@ceph01 ~]# 
}}
とhost毎にPATHまで指定して定義してますが、同じ構成のOSDなら「placement:」を「host_pattern: 'ceph-osd*'」とかでパターンにして定義することも可能です.
っで作った仕様をテストしてみます

#code(nonumber){{
[root@ceph01 ~]# ceph orch apply -i osd.yaml --dry-run
(略
################
OSDSPEC PREVIEWS
################
+---------+---------------+-----------+----------+----------+----------+
|SERVICE  |NAME           |HOST       |DATA      |DB        |WAL       |
+---------+---------------+-----------+----------+----------+----------+
|osd      |ceph-osd1-ssd  |ceph-osd1  |/dev/sdc  |-         |-         |
|osd      |ceph-osd1-hdd  |ceph-osd1  |/dev/sdd  |-         |-         |
|osd      |ceph-osd2-ssd  |ceph-osd2  |/dev/sdb  |-         |-         |
|osd      |ceph-osd2-hdd  |ceph-osd2  |/dev/sdc  |/dev/sde  |/dev/sdf  |
|osd      |ceph-osd2-hdd  |ceph-osd2  |/dev/sdd  |/dev/sde  |/dev/sdf  |
|osd      |ceph-osd3-ssd  |ceph-osd3  |/dev/sdf  |-         |-         |
|osd      |ceph-osd3-hdd  |ceph-osd3  |/dev/sdb  |/dev/sde  |-         |
|osd      |ceph-osd3-hdd  |ceph-osd3  |/dev/sdc  |/dev/sde  |-         |
|osd      |ceph-osd3-hdd  |ceph-osd3  |/dev/sdd  |/dev/sde  |-         |
+---------+---------------+-----------+----------+----------+----------+
[root@ceph01 ~]#
}}
と意図したようにblueStoreが出来そうなので「--dry-run」を外して適用します
#code(nonumber){{
[root@ceph01 ~]# ceph orch apply -i osd.yaml
Scheduled osd.ceph-osd1-ssd update...
Scheduled osd.ceph-osd1-hdd update...
Scheduled osd.ceph-osd2-ssd update...
Scheduled osd.ceph-osd2-hdd update...
Scheduled osd.ceph-osd3-ssd update...
Scheduled osd.ceph-osd3-hdd update...
[root@ceph01 ~]#
}}





***プールのCRUSH配置ルール(crush rule)作成 [#e9044cdf]
cephFSの作成には「メタデータ用」「データ用」の2つのプールが必要です。

プールの作成にはデバイス違い
-HDD
-SSD

と冗長性の確保方法としの
-replicated
-erasure-coded

の組み合わせによるルール(CRUSH配置ルール)を作って、それでプールを作る流れになります。
「メタデータ用」プールのルール(CRUSH配置ルール)としては「SSD由来」で「replicated」を適用します.  &size(10){メタ情報は迅速に読ませたいので「SSD由来」のデバイスで作ります. メタデータ向けのpool typeは目下「replicated」しか対応していない};
#code(nonumber){{
[root@ceph01 ~]# ceph osd crush rule create-replicated meta-ssd default host           ssd
                 ceph osd crush rule create-replicated NAME     ROOT    FAILURE_DOMAIN CLASS
                                 *NAME: 名称
                                 *ROOT: CRUSH 階層のルート
                                 *FAILURE_DOMAIN: 障害ドメイン, 切り分け. host とか rack とか.
                                 *CLASS: ストレージデバイスクラス. hdd とか ssd とか.

[root@ceph01 ~]# ceph osd crush rule ls
}}
&size(10){障害ドメインを「host」にすると「ceph config get osd osd_pool_default_size」の値は規定で3なので3台のOSDが必要となります};

「データ用」プールのルール(CRUSH配置ルール)としては容量効率のために「erasure-coded」をpool typeとして使います.
「erasure-coded」はRAID5/6な感じで パリティー ブロックが用意されます. データ2つに1つのパリティ、データ5つに2つのパリティとか用意できる. &size(10){5つに2つなら 5/7 な実容量. 10個で2つなら 10/12 となる. OSDノード数分にデータを分散させ、停止していいノード数をパリティとか};
既定の「erasure-coded」は
#code(nonumber){{
[root@ceph01 ~]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van
[root@ceph01 ~]#
}}
と2つのデータに2つのパリティを用意することになっていて、2/4の実容量でしょうか. ここではosdが3台なのでデータ2(k)、パリティ1(m)なイレイジャーコードプロファイルを作ります. あとこのルールを使うとストレージはHDDのみとさせます.
&size(10){ほかの例: [[https://www.redbooks.ibm.com/redpieces/pdfs/redp5721.pdf>+https://www.redbooks.ibm.com/redpieces/pdfs/redp5721.pdf]]の94ページ.};
#code(nonumber){{
[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 ls
default
k2-m1-profile
[root@ceph01 ~]#
}}

「メタデータ用」プールには、 レプリカの crush rule「meta-ssd」でプールを作り
「データ用」プールには、erasure-codedのイレイジャーコードプロファイル「k2-m1-profile」でHDD由来のプールを作ることにします


&color(red){*}; 重要
「.mgr」プール向けのCRUSH配置ルール(crush rule)を用意して、適用することが必要
#code(nonumber){{
ceph osd crush rule create-replicated replicated-mgr default host ssd

ceph osd pool set .mgr crush_rule replicated-mgr
}}
CRUSH配置ルール(crush rule)の「default」は使用するデバイス(hdd or ssd)を特定していないです
デフォで作られる .mgr プールにはこの「default」が適用されます
そうすると 「meta-ssd」で作られたプールと重複していると言われscalingに失敗します
「pool 1 contains an overlapping root -1... skipping scaling」とかで
こうなるとscaling, rebalanceが行われなくなり、結果HDDの消費に偏りが発生します。
参照先 [[https://blog.mei-home.net/posts/ceph-rook-crush-rules/>+https://blog.mei-home.net/posts/ceph-rook-crush-rules/]]

***プール作成 [#g6ee6bcf]

OSDを組み込むと「.mgr」といわれるcephシステム側のpoolが作成される. これはそのままとして
#code(nonumber){{
[root@ceph01 ~]# ceph osd lspools
1 .mgr
[root@ceph01 ~]#
}}
まず「メタデータ用」プールを作る
#code(nonumber){{
[root@ceph01 ~]# ceph osd pool create emfs-meta 64 meta-ssd
pool 'emfs-meta' created
[root@ceph01 ~]#
}}
「64」はpg_num. 詳細は難しい. 参照[[https://docs.ceph.com/en/reef/rados/operations/placement-groups/#placement-groups>+https://docs.ceph.com/en/reef/rados/operations/placement-groups/#placement-groups]] とか [[https://www.ibm.com/docs/ja/storage-ceph/7?topic=groups-placement-group-count>+https://www.ibm.com/docs/ja/storage-ceph/7?topic=groups-placement-group-count]],[[https://documentation.suse.com/ja-jp/ses/7.1/html/ses-all/ceph-pools.html>+https://documentation.suse.com/ja-jp/ses/7.1/html/ses-all/ceph-pools.html]]

次に「データ用」のプールを作成します.
こちらはイレイジャーコードを使い、先ほど作成した「k2-m1-profile」で作ります
#code(nonumber){{
[root@ceph01 ~]# ceph osd pool create emfs-data erasure k2-m1-profile
pool 'emfs-data' created

[root@ceph01 ~]# ceph osd pool ls    (「ceph osd lspools」でも同様の結果が表示される)
.mgr
emfs-meta
emfs-data
[root@ceph01 ~]# ceph osd pool set emfs-data allow_ec_overwrites true           <-- cephfsの場合これが必要
[root@ceph01 ~]# ceph osd pool set emfs-data bulk true
}}
&size(10){SSDだけのosdで構築したpoolはメタデータ用向けに最適です};

次に作ったpoolの性格を充てます. cephfsにはcephfs、RBD向けならrbd, RGWならrgwと.
#code(nonumber){{
[root@ceph01 ~]# ceph osd pool application enable emfs-meta cephfs
enabled application 'cephfs' on pool 'emfs-meta'

[root@ceph01 ~]# ceph osd pool application enable emfs-data cephfs
enabled application 'cephfs' on pool 'emfs-data'

[root@ceph01 ~]#
}}
各poolの詳細は「ceph osd pool get <pool名> all」で得られる. &size(10){各項目の値は[[https://documentation.suse.com/ja-jp/ses/7.1/html/ses-all/ceph-pools.html#ceph-pools-values>+https://documentation.suse.com/ja-jp/ses/7.1/html/ses-all/ceph-pools.html#ceph-pools-values]]参照};
#code(nonumber){{
[root@ceph01 ~]# ceph osd pool get emfs-data all

size: 3
min_size: 2
pg_num: 1
pgp_num: 1
crush_rule: emfs-data
hashpspool: true
allow_ec_overwrites: true
nodelete: false
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
erasure_code_profile: k2-m1-profile
fast_read: 0
pg_autoscale_mode: on
eio: false
bulk: true
[root@ceph01 ~]#
}}

ここで様子を見ると
#code(nonumber){{
[root@ceph01 ~]# ceph -s
  cluster:
    id:     4ce725c6-eb0d-11ef-980a-bc24112ffd94
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 16h)
    mgr: ceph01.ocyoth(active, since 16h), standbys: ceph02.uuiyno
    osd: 8 osds: 8 up (since 10h), 8 in (since 10h)

  data:
    pools:   3 pools, 66 pgs
    objects: 2 objects, 577 KiB
    usage:   291 MiB used, 400 GiB / 400 GiB avail
    pgs:     66 active+clean

[root@ceph01 ~]#
}}
となる

***ファイルシステムの作成 [#u034b063]
[[https://docs.ceph.com/en/latest/cephfs/createfs/>+https://docs.ceph.com/en/latest/cephfs/createfs/]]

ようやく下準備が完了して、ファイルシステムを作ります
まずはMDSサービスをデプロイします
#code(nonumber){{
[root@ceph01 ~]# vi mds.yaml
service_type: mds
service_id: emfs           <-- 作成するファイルシステム名を記載します
placement:
  hosts:
  - ceph01
  - ceph02

[root@ceph01 ~]# ceph orch apply -i mds.yaml --dry-run
[root@ceph01 ~]# ceph orch apply -i mds.yaml

(mdsのコンテナ状態を確認)
[root@ceph01 ~]# ceph orch ps --daemon_type=mds
NAME                    HOST    PORTS  STATUS         REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
mds.emfs.ceph01.datuel  ceph01         running (16s)    13s ago  16s    15.2M        -  19.2.2   f2efb0401a30  9cc691407ece
mds.emfs.ceph02.kicdez  ceph02         running (18s)    14s ago  18s    15.2M        -  19.2.2   f2efb0401a30  a2d63395b0b1

[root@ceph01 ~]#
[root@ceph01 ~]# ceph fs new emfs emfs-meta emfs-data    <--これでファイルシステムを作成します
Error EINVAL: pool 'emfs-data' (id '3') is an erasure-coded pool. Use of an EC pool for the default data pool is discouraged; see the online CephFS documentation for more information. Use --force to override.

[root@ceph01 ~]#
}}
とエラーが言われる. cephfsは「replicated」で用意されたdata/metaが基本としていて、そっちの方が早いそうな. っが、大容量を賄いたいので「erasure-coded」を使っている. その場合は「--force」を用いることが必要みたい.
#code(nonumber){{
[root@ceph01 ~]# ceph fs new emfs emfs-meta emfs-data --force
}}
もし
#code(nonumber){{
  Pool 'emfs-data' (id '3') has pg autoscale mode 'on' but is not marked as bulk.
  Consider setting the flag by running
    # ceph osd pool set emfs-data bulk true
new fs with metadata pool 2 and data pool 3
}}
と言われたら「ceph osd pool set emfs-data bulk true」を実行してmefs-dataのbulkを有効にして再度「ceph fs new emfs emfs-meta emfs-data --force」を実施します.
&size(10){なぜ必要かはPGを理解する必要があるかも. [[https://docs.ceph.com/en/reef/rados/operations/placement-groups/>+https://docs.ceph.com/en/reef/rados/operations/placement-groups/]]};

#code(nonumber){{
[root@ceph01 ~]# ceph fs ls
name: emfs, metadata pool: emfs-meta, data pools: [emfs-data ]

[root@ceph01 ~]# ceph -s
 :
  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 18h)
    mgr: ceph01.ocyoth(active, since 18h), standbys: ceph02.uuiyno
    mds: 1/1 daemons up, 1 standby
    osd: 8 osds: 8 up (since 12h), 8 in (since 12h)
 :
[root@ceph01 ~]#
}}


mdsを複数用意することが求められる. MDSのフェイルオーバーです. 用意できないなら
#code(nonumber){{
ceph fs set emfs standby_count_wanted 0
ceph fs set cephfs standby_count_wanted 0
}}
でその警告は停止します

***client接続 [#ma4afb62]
&color(red){*};&size(10){バックエンドの「10.10.10.x」に接続する必要はありません.};

cephのパッケージをインストールします.   &size(10){rockylinux8ならrpmbuildでパッケージを作る必要あり [[Ceph/cephadm/memo#z560055c]]};
#code(nonumber){{
(rockylinux9なら)
dnf install centos-release-ceph-squid.noarch  epel-release -y
dnf install ceph-common -y
}}
その後「&color(magenta){ceph 構成ファイル};」(/etc/ceph/ceph.conf) と「&color(orangered){キーリング};」を用意します.
「&color(magenta){ceph 構成ファイル};」はcephadmが実行できる場所で作らせて、クライアントに「/etc/ceph/ceph.conf」として配置させる.
#code(nonumber){{
[root@ceph-client ~]# ssh root@ceph01 "ceph config generate-minimal-conf" | tee /etc/ceph/ceph.conf

(中身は)
[root@ceph-client ~]# cat /etc/ceph/ceph.conf
# minimal ceph.conf for 4ce725c6-eb0d-11ef-980a-bc24112ffd94
[global]
        fsid = 4ce725c6-eb0d-11ef-980a-bc24112ffd94
        mon_host = [v2:192.168.0.49:3300/0,v1:192.168.0.49:6789/0] [v2:192.168.0.47:3300/0,v1:192.168.0.47:6789/0] [v2:192.168.0.48:3300/0,v1:192.168.0.48:6789/0]

[root@ceph-client ~]#
}}
「&color(orangered){キーリング};」は
「ceph fs authorize <filesystem> client.<CephX user> / rw」で得られる. <filesystem>はここではemfs. <CephX user>はPOSIXアカウントとは関係なく r9 としてみた.
#code(nonumber){{
[root@ceph-client ~]# ssh root@ceph01 "ceph fs authorize emfs client.r9  / rwp" | tee /etc/ceph/ceph.client.r9.keyring
[client.r9]
        key = AQDUEsNn70N+LhAAYU16+oki2YWAk/40VZRwsA==
        caps mds = "allow rwp fsname=emfs"
        caps mon = "allow r fsname=emfs"
        caps osd = "allow rw tag cephfs data=emfs"

[root@ceph-client ~]#

*quotaを使うなら「p」を追加して「rwp」とします. 
}}
「&color(orangered){キーリング};」が入ったファイル名は上記の「ceph.client.r9.keyring」か「ceph.keyring」にします.

っでmount
#code(nonumber){{
[root@ceph-client ~]# mkdir -p /emfs

[root@ceph-client ~]# mount -t ceph ceph01:6789,ceph02:6789,ceph-osd1:6789:/ /emfs -o name=r9,fs=emfs
(とか)
[root@ceph-client ~]# mount -t ceph ceph01:6789,ceph02:6789,ceph-osd1:6789:/ /emfs -o nowsync,name=r9,fs=emfs    <--非同期オプション
(とか)
[root@ceph-client ~]# mount -t ceph r9@.emfs=/      /emfs

[root@ceph-client ~]# df -Tht ceph
Filesystem                                              Type  Size  Used Avail Use% Mounted on
192.168.0.47:6789,192.168.0.48:6789,192.168.0.49:6789:/ ceph  253G     0  253G   0% /emfs

[root@ceph-client ~]#
}}
&color(red){*};&size(10){rockylinux9とかkernelが新しいと「r9@4ce725c6-eb0d-11ef-980a-bc24112ffd94.emfs=/」がmount先の表記になります};

autofsでの表記は下記になります
#code(nonumber){{
[root@ceph-client ~]# cat /etc/auto.master
/- /etc/auto.home --timeout=60

[root@ceph-client ~]# cat /etc/auto.home
/emfs -fstype=ceph  r9@.emfs=/

(あるいは)
/emfs  -fstype=ceph,name=r9,fs=emfs  ceph01:6789,ceph02:6789,ceph-osd1:6789:/

[root@ceph-client ~]#
}}
/etc/fstabでmount表記なら
#code(nonumber){{
[root@ceph-client ~]# cat /etc/fstab
 :
r9@.emfs=/ /emfs ceph rw 0 0
[root@ceph-client ~]# 
}}

作成した「&color(orangered){キーリング};」は「ceph auth ls」で確認できます
#code(nonumber){{
[root@ceph01 ~]# ceph auth ls
 :                                                             ("ceph fs authorize emfs client.r9 / rwp"の場合)
client.r9                                                      [client.r9]
        key: AQDUEsNn70N+LhAAYU16+oki2YWAk/40VZRwsA==                  key = AQDUEsNn70N+LhAAYU16+oki2YWAk/40VZRwsA==
        caps: [mds] allow rwp fsname=emfs                              caps mds = "allow rwp fsname=emfs"
        caps: [mon] allow r fsname=emfs                                caps mon = "allow r fsname=emfs"
        caps: [osd] allow rw tag cephfs data=emfs                      caps osd = "allow rw tag cephfs data=emfs"
 :
[root@ceph01 ~]#
}}
削除は「ceph auth rm client.r9」で行えます.

クライアント側に置かれる「ceph.client.r9.keyring」とフォーマットが若干異なります,

***subvolume [#nf3b851c]
こうして提供される /emfs であるが、その配下に /emfs/people とか mkdir で作るのはもったいない。フォルダの作成は mkdir で作成できるが、
cephでは、作ったフォルダに対して個別にクォータ(容量制限),スナップショット,パフォーマンス制御(ec or replicated)を設けたいなら subvolume にする。
subvolumegroupとsubvolumeの2つのフォルダ特性を持たせられる。
|BGCOLOR(YELLOW):項目|BGCOLOR(YELLOW):subvolumegroup|BGCOLOR(YELLOW):subvolume|BGCOLOR(YELLOW):mkdir (通常のディレクトリ)|
|役割|グルーピング|実データ領域|単なる整理(フォルダ)|
|中身|subvolumeを持つ|ファイル・フォルダを持つ|ファイルやディレクトリを持つ|
|クォータ|グループ単位で可能|個別に可能|一応可能だが管理しにくい|
|スナップショット|基本しない|できる|基本できない(単体では不可)|
|利用単位|管理者目線|ユーザ/アプリ目線|ユーザー目線(軽い用途)|
|LVMに例えると|VolumeGroup|LogicalVolume|単なるmkdir|
|分けるもの|project,data,backup|ユーザ領域,プロジェクト領域,長期データ|一時データ,日付ディレクトリ,軽い整理|

#code(nonumber){{
/emfs
 ├ people    ← subvolumegroup
 │   ├ userA (subvolume)
 │   │   ├ documents  (mkdir)
 │   │   ├ download   (mkdir)
 │   │   └ picture    (mkdir)
 │   ├ userB (subvolume)
 ├ project   ← subvolumegroup
 │   ├ group1 (subvolume)
 │   └ group2 (subvolume)
 │
 └ data      ← subvolumegroup
     ├ group1 (subvolume)
     │    └ MMYYDD (mkdir)
     └ group2 (subvolume)
}}
とにかく管理面からも運用的には/emfsの配下には subvolumegrop でフォルダを作るのが大事
作り方:
#code(nonumber){{
ceph fs subvolumegroup create emfs people
ceph fs subvolumegroup create emfs project
ceph fs subvolumegroup create emfs data
ceph fs subvolumegroup create emfs people     --pool_layout emfs-data
ceph fs subvolumegroup create emfs project    --pool_layout emfs-data
ceph fs subvolumegroup create emfs data       --pool_layout emfs-data
  (複数 data用poolでfsを作っているなら、--pool_layout で使うpoolを指定できる. ec対応のpoolとか指定)

[people配下]
ceph fs subvolume create emfs userA --group_name people
ceph fs subvolume create emfs userA --group_name people  (  --pool_layout xxxx ) # 親のpoolをそのまま引き継ぐが、「--pool_layout」で変更可能)
ceph fs subvolume create emfs userB --group_name people

[project配下]
ceph fs subvolume create emfs group1 --group_name project
ceph fs subvolume create emfs group2 --group_name project

[data配下]
ceph fs subvolume create emfs group1 --group_name data
ceph fs subvolume create emfs group2 --group_name data
}}

***システム停止手順 [#c32d43cb]
参照先:
[[https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/administration_guide/understanding-process-managemnet-for-ceph#powering-down-and-rebooting-a-red-hat-ceph-storage-cluster-management>+https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/administration_guide/understanding-process-managemnet-for-ceph#powering-down-and-rebooting-a-red-hat-ceph-storage-cluster-management]]

1. cephを利用しているクライアントを全てシャットダウン.
2. 「ceph -s」でhealthが「HEALTH_OK」でかつ、pgsの値がすべて「active+clean」であることを確認
3-1. ceph-mdsのフェイルオーバーを先を1つにする
#code(nonumber){{
[root@ceph01 ~]# ceph fs set emfs max_mds 1
}}
3-2. ファイルシステムを停止させる(その1)
#code(nonumber){{
[root@ceph01 ~]# ceph fs fail emfs
emfs marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed.

[root@ceph01 ~]# ceph -s
 :
    mds: 1/1 daemons up, 1 standby
     ↓
    mds: 0/1 daemons up (1 failed), 2 standby
 :
[root@ceph01 ~]# 
}}
3-3. ファイルシステムを停止させる(その2)
#code(nonumber){{
[root@ceph01 ~]# ceph fs set emfs joinable false
emfs marked not joinable; MDS cannot join as newly active.

[root@ceph01 ~]#
}}
4. OSDの機能停止
#code(nonumber){{
[root@ceph01 ~]# ceph osd set noout
[root@ceph01 ~]# ceph osd set norecover
[root@ceph01 ~]# ceph osd set norebalance
[root@ceph01 ~]# ceph osd set nobackfill
[root@ceph01 ~]# ceph osd set nodown
[root@ceph01 ~]# ceph osd set pause

[root@ceph01 ~]# ceph -s
 :
    mds: 1/1 daemons up, 1 standby
    osd: 8 osds: 8 up (since 38h), 8 in (since 38h)
    ↓
    mds: 0/1 daemons up (1 failed), 2 standby
    osd: 8 osds: 8 up (since 38h), 8 in (since 38h)
         flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
 :
[root@ceph01 ~]#
}}
5. OSDホストを順次停止
#code(nonumber){{
[root@ceph01 ~]# ssh root@ceph-osd1 "shutdown -h now"
[root@ceph01 ~]# ssh root@ceph-osd2 "shutdown -h now"
[root@ceph01 ~]# ssh root@ceph-osd3 "shutdown -h now"
}}
6. MONホストを順次停止
#code(nonumber){{
[root@ceph01 ~]# ssh root@ceph02 "shutdown -h now"
}}
7. MGRホストを停止
#code(nonumber){{
[root@ceph01 ~]# shutdown -h now
}}

***システム起動手順 [#w63cba21]

前段の逆を行います

1. MGRホストをboot
2. MONホストをboot
3. OSDホストをboot
4. MGRホストにてOSDの各種機能を有効化
#code(nonumber){{
[root@ceph01 ~]# ceph -s
  cluster:
    id:     4ce725c6-eb0d-11ef-980a-bc24112ffd94
    health: HEALTH_ERR
            1 filesystem is degraded
            1 filesystem is offline
            pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover flag(s) set

  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 6m)
    mgr: ceph01.ocyoth(active, since 6m), standbys: ceph02.uuiyno
    mds: 0/1 daemons up (1 failed), 2 standby
    osd: 8 osds: 8 up (since 6m), 8 in (since 38h)
         flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover

  data:
    volumes: 0/1 healthy, 1 failed
    pools:   3 pools, 66 pgs
    objects: 24 objects, 586 KiB
    usage:   1.0 GiB used, 399 GiB / 400 GiB avail
    pgs:     66 active+clean

[root@ceph01 ~]#
[root@ceph01 ~]# ceph osd unset noout
[root@ceph01 ~]# ceph osd unset norecover
[root@ceph01 ~]# ceph osd unset norebalance
[root@ceph01 ~]# ceph osd unset nobackfill
[root@ceph01 ~]# ceph osd unset nodown
[root@ceph01 ~]# ceph osd unset pause

[root@ceph01 ~]# ceph -s
  cluster:
    id:     4ce725c6-eb0d-11ef-980a-bc24112ffd94
    health: HEALTH_ERR
            1 filesystem is degraded
            1 filesystem is offline

  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 8m)
    mgr: ceph01.ocyoth(active, since 8m), standbys: ceph02.uuiyno
    mds: 0/1 daemons up (1 failed), 2 standby
    osd: 8 osds: 8 up (since 8m), 8 in (since 38h)

  data:
    volumes: 0/1 healthy, 1 failed
    pools:   3 pools, 66 pgs
    objects: 24 objects, 586 KiB
    usage:   231 MiB used, 400 GiB / 400 GiB avail
    pgs:     66 active+clean

[root@ceph-mgr ~]#
}}
5. ファイルシステムを有効にする
#code(nonumber){{
[root@ceph01 ~]# ceph fs set emfs joinable true
emfs marked joinable; MDS may join as newly active.

[root@ceph01 ~]# ceph -s
  cluster:
    id:     4ce725c6-eb0d-11ef-980a-bc24112ffd94
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 11m)
    mgr: ceph01.ocyoth(active, since 11m), standbys: ceph02.uuiyno
    mds: 1/1 daemons up, 1 standby
    osd: 8 osds: 8 up (since 11m), 8 in (since 38h)

  data:
    volumes: 1/1 healthy
    pools:   3 pools, 66 pgs
    objects: 24 objects, 587 KiB
    usage:   231 MiB used, 400 GiB / 400 GiB avail
    pgs:     66 active+clean

}}
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS