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