せいさくちゅう

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

っで構成表

ホスト名役目IPアドレスbackendOSストレージCPU threads
ceph01Ceph Manager
Ceph Metadata Server
Ceph Monitor
192.168.0.47/2410.10.10.47/24Rockylinux9.4system(16GB)
/var/lib/ceph(8GB,monitor)
8 threads(monitor:4+metadata:2+manager:1+ ほか)
ceph02Ceph Manager
Ceph Metadata Server
Ceph Monitor
192.168.0.48/2410.10.10.48/24system(16GB)
/var/lib/ceph(8GB,monitor)
8 threads(monitor:4+metadata:2+manager:1+ ほか)
ceph-osd1Ceph OSDs
Ceph Monitor
192.168.0.49/2410.10.10.49/24system(24GB: os[16GB]+wal[8GB])
/var/lib/ceph(8GB,monitor)
block.db(16GB)
OSD(50GB)
6 threads(moitor:4t+osd:2)
ceph-osd2Ceph OSDs192.168.0.50/2410.10.10.50/24system(16GB)
block.db(32GB)
OSD(50GB)+OSD(50GB)
4 threads(OSD:2+OSD:2)
ceph-osd3Ceph OSDs192.168.0.51/2410.10.10.51/24system(16GB)
OSD(50GB)+OSD(50GB)
4 threads(OSD:2+OSD:2)

参照https://www.redbooks.ibm.com/redpieces/pdfs/redp5721.pdf

コンテナを入れる

cephのクライアント以外の全てのceph関連ノードに docker と lvm2 を入れてdockerは稼働状態にします.

dnf install yum-utils -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce lvm2 -y
systemctl enable docker --now

*SELinuxとfirewalldは有効のままでもいいみたい.

Cephadm

cephadmで構築を進めるのですが、Rockylinux9にcephadmパッケージを含むリポジトリ「centos-release-ceph-squid」が使えそうなのでそれを使います. リポジトリの中身は「dnf list available --disablerepo=* --enablerepo=centos-ceph-squid」で確認可
ここでは podman ではなく docker で運用したいのでpodmanは削除してます

[root@ceph01 ~]# dnf install centos-release-ceph-squid.noarch -y
[root@ceph01 ~]# dnf install cephadm python3-jinja2 -y
[root@ceph01 ~]# dnf remove podman -y
[root@ceph01 ~]# dnf install aardvark-dns conmon containers-common criu criu-libs crun libnet netavark protobuf-c shadow-utils-subid yajl python3-pyyaml -y
 
[root@ceph01 ~]# cephadm version
cephadm version 19.2.0 (16063ff2022298c9300e49a547a16ffda59baf13) squid (stable)
[root@ceph01 ~]#

っでcephクラスターを作るのですが、cephadmを実行するとそのノードは Ceph ManagerCeph Monitor ノードになります.
同時に「cluster network」を指定できて、この「cluster network」はOSDデーモン間のレプリケーション、リカバリ、ハートビート向けの回線となる
cephクライアントとかへの本業サービス向けを「public network」というみたい

[root@ceph01 ~]# cephadm bootstrap --mon-ip 192.168.0.47 --cluster-network 10.10.10.0/24
 :
(数分かかる. この間にdockerイメージを取得してコンテナが動きます)
 :
Ceph Dashboard is now available at:
 
             URL: https://ceph01.sybyl.local:8443/
            User: admin
        Password: sv8ozljlpi
 :
[root@ceph01 ~]#
[root@ceph01 ~]# cat /etc/ceph/ceph.conf
[global]
        fsid = 1526f374-b123-11ef-ae29-bc24112ffd94
        mon_host = [v2:192.168.0.47:3300/0,v1:192.168.0.47:6789/0]
 
[root@ceph01 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQA3dU5ndmnnNhAAJ6WSBkGYTNN1aOIKlrpTpg==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"
[root@ceph01 ~]#
[root@ceph01 ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED              STATUS              PORTS     NAMES
8477d5ca016e   quay.io/ceph/grafana:9.4.12               "/run.sh"                 3 minutes ago   Up 3 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-grafana-ceph01
8f22a4d59f9f   quay.io/prometheus/alertmanager:v0.25.0   "/bin/alertmanager -…"   3 minutes ago   Up 3 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-alertmanager-ceph01
af125824b463   quay.io/prometheus/prometheus:v2.43.0     "/bin/prometheus --c…"   3 minutes ago   Up 3 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-prometheus-ceph01
2ca2833da944   quay.io/prometheus/node-exporter:v1.5.0   "/bin/node_exporter …"   4 minutes ago   Up 4 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-node-exporter-ceph01
c3ae2d4c7e07   quay.io/ceph/ceph                         "/usr/bin/ceph-crash…"   4 minutes ago   Up 4 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-crash-ceph01
040f0c8dd787   quay.io/ceph/ceph                         "/usr/bin/ceph-expor…"   4 minutes ago   Up 4 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-ceph-exporter-ceph01
3a51d1339404   quay.io/ceph/ceph:v19                     "/usr/bin/ceph-mgr -…"   5 minutes ago   Up 5 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-mgr-ceph01-eujbzh
9f35e24e986f   quay.io/ceph/ceph:v19                     "/usr/bin/ceph-mon -…"   5 minutes ago   Up 5 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-mon-ceph01
[root@ceph01 ~]#

podmanが入っているとpodmanでcephコンテナらが動きます

この段階でDashboardにアクセスできます.

cephコマンドを入れる

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

[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」と同義)

作りたての状態では

[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     1526f374-b123-11ef-ae29-bc24112ffd94
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph01 (age 7m)
    mgr: ceph01.eujbzh(active, since 5m)
    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@ceph-mgr ~]#

健康状態(health)はOSDが3つ以上ないので警告状態とある. monとmgrは共にceph01が担当の様子.
一応dashboardからみるとこんな感じ 自動的にfirewallを調整してportを追加してくれます
2024y12m02d_215248138.png

既定のサービス構成

cephクラスターの仕様を調整します. まずは初期のサービス構成を出力してみる

[root@ceph01 ~]# ceph orch ls --export
 :
---
service_type: mgr
service_name: mgr
placement:
  count: 2
---
service_type: mon
service_name: mon
placement:
  count: 5
---
 :
[root@ceph01 ~]#

とmonが5つ、mgrが2つを想定している. ここではmonは3つにしたいので下記のようにyamlファイルに書き出して、修正して、再度読み込ませる. 加えてmonは4threadsが推奨なのでそれも加える. mgrは1threadsでいいみたい
mgrを1つにしたいなら「ceph orch ls --service_name=mgr --export > mgr.yaml」と書き出して、修正して読み込ませる

[root@ceph01 ~]# ceph orch ls --service_name=mon --export > mon.yaml
[root@ceph01 ~]# vi mon.yaml
cat mon.yaml
service_type: mon
service_name: mon
placement:
  count: 3
extra_container_args:
  - "--cpus=4"
 
[root@ceph01 ~]# ceph orch apply -i mon.yaml --dry-run
[root@ceph01 ~]# ceph orch apply -i mon.yaml               <-- monitorのdockerコンテナが再起動します

ここでこのあとホストを追加するのだが、加えたときに勝手にサービス(monitor, manager)にアサインされないようにするために下記を実施します.
加えてまだ先ですが、osdも参加した時に抱えるストレージを勝手にosdにアサインされるのを防ぐようにしておきます.

[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
 
(確認は「ceph orch ls --export」で見れる)

構成員を追加(ceph02)

追加対象のホストはdockerが入っている事が前提. っで初めのceph01マシンからrootで操作されるようにsshキー(/etc/ceph/ceph.pub)を各計算機に入れる必要があります.

(ceph02での事前措置)
dnf install yum-utils -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce lvm2 -y
systemctl enable docker --now
dnf remove podman -y
----ここまで----
 
[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph02

その後に追加作業を行います

[root@ceph01 ~]# ceph orch host add ceph02 192.168.0.48
(これで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にはまだ役割が与えられてないです

[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 ~]# ceph -s
  cluster:
    id:     1526f374-b123-11ef-ae29-bc24112ffd94
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph01 (age 7m)
    mgr: ceph01.eujbzh(active, since 7m)
    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側では下記のdockerが動いてます

[root@ceph02 ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS         PORTS     NAMES
27b127b00a79   quay.io/prometheus/node-exporter:v1.5.0   "/bin/node_exporter …"   2 minutes ago   Up 2 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-node-exporter-ceph02
153ea19b349f   quay.io/ceph/ceph                         "/usr/bin/ceph-crash…"   2 minutes ago   Up 2 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-crash-ceph02
37285917b087   quay.io/ceph/ceph                         "/usr/bin/ceph-expor…"   2 minutes ago   Up 2 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-ceph-exporter-ceph02
[root@ceph02 ~]#

構成員(ceph02)に役割を持たせる

ここでは ceph01とceph02 には Ceph MonitorCeph ManagerCeph Metadata Server の役目を負わせることにしました.

まずCeph Managerの枠割を ceph02 に持たせます

[root@ceph01 ~]# ceph orch apply mgr --placement="ceph01,ceph02"  --dry-run
[root@ceph01 ~]# ceph orch apply mgr --placement="ceph01,ceph02"

すると ceph02 で mgr のコンテナが自動的に用意される

[root@ceph02 ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS         PORTS     NAMES
74dce20ccbfd   quay.io/ceph/ceph                         "/usr/bin/ceph-mgr -…"   7 seconds ago   Up 6 seconds             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-mgr-ceph02-wdpfnf      <--- これ
27b127b00a79   quay.io/prometheus/node-exporter:v1.5.0   "/bin/node_exporter …"   3 minutes ago   Up 3 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-node-exporter-ceph02
153ea19b349f   quay.io/ceph/ceph                         "/usr/bin/ceph-crash…"   3 minutes ago   Up 3 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-crash-ceph02
37285917b087   quay.io/ceph/ceph                         "/usr/bin/ceph-expor…"   3 minutes ago   Up 3 minutes             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-ceph-exporter-ceph02
[root@ceph02 ~]#

そして「ceph -s」の出力でも mgr として ceph02 が加わってstandbys状態に入りました.

[root@ceph01 ~]# ceph -s
 :
  services:
    mon: 1 daemons, quorum ceph01 (age 11m)
    mgr: ceph01.eujbzh(active, since 11m), standbys: ceph02.wdpfnf   <-- ここ
    osd: 0 osds: 0 up, 0 in
 :
[root@ceph01 ~]#

Ceph Metadata Serverの役割付与は OSD の設定後にします.

構成員を追加(ceph-osd1)

まだmonを3つ作ってませんが、その構成員となる ceph-osd1 を加えます.
加え方は ceph02 と同じように事前にdockerらを入れて、ceph01から追加作業を行います

(ceph-osd1での事前措置)
dnf install yum-utils -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce lvm2 -y
systemctl enable docker --now
dnf remove podman -y
----ここまで----
 
[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd1

そしてceph-osd1をcephに参加させます

[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 ~]#

参加とともに自動的にdokcerコンテナが用意されます.

[root@ceph-osd1 ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED              STATUS              PORTS     NAMES
224da2d5a129   quay.io/prometheus/node-exporter:v1.5.0   "/bin/node_exporter …"   About a minute ago   Up About a minute             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-node-exporter-ceph-osd1
f37ba391e500   quay.io/ceph/ceph                         "/usr/bin/ceph-crash…"   About a minute ago   Up About a minute             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-crash-ceph-osd1
f7dc97240248   quay.io/ceph/ceph                         "/usr/bin/ceph-expor…"   About a minute ago   Up About a minute             ceph-1526f374-b123-11ef-ae29-bc24112ffd94-ceph-exporter-ceph-osd1
[root@ceph-osd1 ~]#

ここでmonを提供するマシンが揃ったので、monを作ります

(再確認)
[root@ceph01 ~]# ceph orch ls --service_name=mon --export
service_type: mon
service_name: mon
placement:
  count: 3
unmanaged: true
extra_container_args:
- --cpus=2
 
[root@ceph01 ~]# ceph orch apply mon --placement="ceph01,ceph02,ceph-osd1" --dry-run
[root@ceph01 ~]# ceph orch apply mon --placement="ceph01,ceph02,ceph-osd1"

これでceph02とceph-osd1にmonのdockerコンテナが追加されます
「ceph -s」で確認するとこんな感じ

[root@ceph01 ~]# ceph -s
 :
  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 73s)
    mgr: ceph01.smflkb(active, since 3h), standbys: ceph02.biarhk
    osd: 0 osds: 0 up, 0 in
 :
[root@ceph01 ~]#

一応dashboardの「Administration -> Services」では下記のように表示される
2024y12m03d_014555586.png

残りの構成員を参加させる

ceph-osd2とceph-osd3 を参加させます.

ceph-osd1と同じようにdockerを入れておきます. その上で

[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それぞれdockerが自動的にデプロイされて動きます

OSD設定

「ceph orch apply osd --all-available-devices --unmanaged=true」が有効なのでOSDsが自動登録させないようにしてます
ですが、osdは2 threads 持たせたいのでまずはその修正を行います

[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
extra_container_args:
  - "--cpus=2"
 
[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)デバイスを駆使した作成もできる

ここでは ceph-osd1 ではWAL/DBを使ってOSDの構築を想定してます。ceph-osd2 は DB のみ、ceph-osd3 はHDDのみを想定してます。

(ceph-osd1: /dev/sda3をlvmにしてみる)
[root@ceph-osd1 ~]# pvcreate /dev/sda3
[root@ceph-osd1 ~]# vgcreate ceph-wal /dev/sda3
[root@ceph-osd1 ~]# lvcreate -n l0 -l 100%FREE ceph-wal
 
(ceph-osd1: sddがHDDで、sdcがblock.db、ceph-wal(lvm)がblock.walとします)
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd1:data_devices=/dev/sdd,db_devices=/dev/sdc,wal_devices=/dev/ceph-wal/l0    <-- system diskの一部領域をlvmにすれば加えられるみたい
 
(ceph-osd2: sdbとsdcがHDDで、sddがblock.db、walはない)
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd2:data_devices=/dev/sdb,/dev/sdc,db_devices=/dev/sdd   <-- OSDが2つ作られて、/dev/sddはlvmでに分割されます
 
(ceph-osd3: sdbとsdcのHDDのみ)
[root@ceph01 ~]# ceph orch daemon add osd ceph-osd3:data_devices=/dev/sdb,/dev/sdc  <-- OSDが2つ作られます

この後に ceph-osdXでosdのdockerが立ち上がります.

状況は下記になります

[root@ceph01 ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME           STATUS  REWEIGHT  PRI-AFF
-1         0.29077  root default
-3         0.06439      host ceph-osd1
 0    hdd  0.06439          osd.0           up   1.00000  1.00000
-5         0.12878      host ceph-osd2
 1    hdd  0.06439          osd.1           up   1.00000  1.00000
 2    hdd  0.06439          osd.2           up   1.00000  1.00000
-7         0.09760      host ceph-osd3
 3    hdd  0.04880          osd.3           up   1.00000  1.00000
 4    hdd  0.04880          osd.4           up   1.00000  1.00000
[root@ceph01 ~]#
 
[root@ceph01 ~]# ceph orch device ls
HOST       PATH      TYPE  DEVICE ID                   SIZE  AVAILABLE  REFRESHED  REJECT REASONS
ceph-osd1  /dev/sdc  hdd   QEMU_HARDDISK_drive-scsi2  16.0G  No         14m ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd1  /dev/sdd  hdd   QEMU_HARDDISK_drive-scsi3  50.0G  No         14m ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdb  hdd   QEMU_HARDDISK_drive-scsi2  50.0G  No         3m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdc  hdd   QEMU_HARDDISK_drive-scsi3  50.0G  No         3m ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdd  ssd   QEMU_HARDDISK_drive-scsi1  32.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         60s ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd3  /dev/sdc  hdd   QEMU_HARDDISK_drive-scsi2  50.0G  No         60s ago    Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
[root@ceph01 ~]#
 
[root@ceph01 ~]# ceph -s
  cluster:
    id:     1526f374-b123-11ef-ae29-bc24112ffd94
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 3h)
    mgr: ceph01.eujbzh(active, since 4h), standbys: ceph02.wdpfnf
    osd: 5 osds: 5 up (since 92s), 5 in (since 117s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 577 KiB
    usage:   48 GiB used, 250 GiB / 298 GiB avail
    pgs:     1 active+clean
 
[root@ceph01 ~]#

OSDを用意すると勝手にpoolが作られる

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

プール作成

cephFSを作成するには2つのプール、データ用とメタデータ用が必要となる.
プールには「replicated」と「erasure-coded」の2つの作成方法があって、データ用はこのどちらかを選べる. メタデータ用は今のところ「replicated」のみ.
「replicated」はデータを複数のOSDに複製します.
「erasure-coded」はRAID5っぽくて最低3つのOSDホストが必要でデータ ブロックを複数個にパリティ ブロックにも複数個用意できる.
RAID5みないたものなのでデータ2つ、パリティー1つの合計3つのOSDが最低となる

OSDを組み込むと「.mgr」といわれるcephシステム側のpoolが作成されてしまう. これはそのままとして
まずはメタデータ用のpoolを作る. こちらは「replicated」のみ対応で既定では同じデータを3つ作成する. なので最低OSDホストが3つ必要となる

[root@ceph-mgr ~]# ceph osd pool create emfs-meta 64 replicated
pool 'emfs-meta' created
 
[root@ceph-mgr ~]#

「64」はpg_num. 詳細は難しい. 参照https://docs.ceph.com/en/reef/rados/operations/placement-groups/#placement-groups
次にデータ用のpoolを作成します. 作成方法ですが、「erasure-coded」はより効率よくストレージを使うのでこっちを使います.
こちらは事前にプロファイルが必要で、既定で入っているプロファイルは「ceph osd erasure-code-profile get default」で確認できる

[root@ceph-mgr ~]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van
[root@ceph-mgr ~]#

こちらは、オブジェクト(データ)を2つに分けて(k)、そしてパリティブロック(コーディング)を2つ用意している. OSDホストを3台で運用するにはこのパリティブロック(コーディング)の値(m)を1にします.
OSDホストが12台なら8(k)+3(m)とか提案されている. https://www.redbooks.ibm.com/redpieces/pdfs/redp5721.pdfの94ページ.
それぞれのプロファイルを作ってみます. 使用するライブラリでまた細かな項目がありますが、ここは既定のjerasureプラグインを使います

[root@ceph-mgr ~]# ceph osd erasure-code-profile set jerasure-k2-m1-profile plugin=jerasure k=2  m=1  technique=reed_sol_van  crush-failure-domain=host
[root@ceph-mgr ~]# ceph osd erasure-code-profile set jerasure-k8-m3-profile plugin=jerasure k=8  m=3  technique=reed_sol_van  crush-failure-domain=host
[root@ceph-mgr ~]# ceph osd erasure-code-profile ls
default
jerasure-k2-m1-profile
jerasure-k8-m3-profile
[root@ceph-mgr ~]#

ここではOSDホストが3台なので「jerasure-k2-m1-profile」で「erasure-coded」なpoolを作成します

[root@ceph-mgr ~]# ceph osd pool create emfs-data erasure jerasure-k2-m1-profile
 
[root@ceph-mgr ~]# ceph osd pool ls
.mgr
emfs-meta
emfs-data
[root@ceph-mgr ~]#

SSDだけのosdで構築したpoolはメタデータ用向けに最適です. 作成方法はCeph/MDS#jee381c8に記載済み

作ったpoolの性格を充てます. cephfsにはcephfs、RBD向けならrbd, RGWならrgwと.

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

ここで様子を見ると

[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     cbf4bdce-a455-11ee-8e61-000c29721d9f
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-mgr,ceph-osd1,ceph-mds (age 18h)
    mgr: ceph-mgr.xfrivf(active, since 18h), standbys: ceph-mds.luefsj
    osd: 6 osds: 6 up (since 17h), 6 in (since 17h)
 
  data:
    pools:   3 pools, 97 pgs
    objects: 2 objects, 449 KiB
    usage:   48 GiB used, 300 GiB / 348 GiB avail
    pgs:     97 active+clean
 
[root@ceph-mgr ~]#

となる

ファイルシステムの作成

ようやく下準備が完了して、ファイルシステムを作ります
...なんかファイルシステムを作成するのにcephadmではpoolの事前作成は不要みたい...

[root@ceph-mgr ~]# ceph fs volume create cephfs
[root@ceph-mgr ~]# ceph fs ls
name: cephfs, metadata pool: cephfs.cephfs.meta, data pools: [cephfs.cephfs.data ]
 
[root@ceph-mgr ~]# ceph osd pool ls
.mgr
emfs-meta
emfs-data
cephfs.cephfs.meta
cephfs.cephfs.data
 
[root@ceph-mgr ~]#

あれぇ...勝手にpoolを作ってくれた...せっかく事前に作ったpoolたち、しかもデータもメタも「replicated」で作ってくれる..

[root@ceph-mgr ~]# ceph osd pool ls detail
pool 1 '.mgr' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on (略
pool 3 'emfs-meta' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 autoscale_mode on (略
pool 4 'emfs-data' erasure profile jerasure-k2-m1-profile size 3 min_size 2 crush_rule 1 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on (略
pool 5 'cephfs.cephfs.meta' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 16 pgp_num 16 autoscale_mode on (略
pool 6 'cephfs.cephfs.data' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 256 pgp_num 256 autoscale_mode on (略
 
[root@ceph-mgr ~]#

一応従来からのコマンドでは

[root@ceph-mgr ~]# ceph osd pool get emfs-data allow_ec_overwrites
allow_ec_overwrites: false
 
[root@ceph-mgr ~]# ceph osd pool set emfs-data allow_ec_overwrites true
set pool 4 allow_ec_overwrites to true
 
[root@ceph-mgr ~]# ceph fs new emfs emfs-meta emfs-data --force
  Pool 'emfs-data' (id '4') 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 3 and data pool 4
 
[root@ceph-mgr ~]# 
[root@ceph-mgr ~]# ceph fs ls
name: cephfs, metadata pool: cephfs.cephfs.meta, data pools: [cephfs.cephfs.data ]
name: emfs, metadata pool: emfs-meta, data pools: [emfs-data ]
[root@ceph-mgr ~]#

と新規のcephfsが作れる. ただこの際は

[root@ceph-mgr ~]# ceph -s
 :
  services:
    mon: 3 daemons, quorum ceph-mgr,ceph-osd1,ceph-mds (age 18h)
    mgr: ceph-mgr.xfrivf(active, since 18h), standbys: ceph-mds.luefsj
    mds: 2/2 daemons up
    osd: 6 osds: 6 up (since 17h), 6 in (since 17h)
 :
[root@ceph-mgr ~]#

と「mds: 2/2 daemons」となる.

あとmdsを複数用意することが求められる. MDSのフェイルオーバーです. 用意できないなら

ceph fs set emfs standby_count_wanted 0
ceph fs set cephfs standby_count_wanted 0

でその警告は停止します

client接続

cephのパッケージをインストールします

cat << _EOF_  > /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for \$basearch
baseurl=https://download.ceph.com/rpm-reef/el9/\$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
dnf install epel-release -y
dnf install ceph-common -y

その後「/etc/ceph/ceph.conf」と「キーリング」を取得します

[root@ceph-client ~]# ssh root@ceph-mds "sudo ceph config generate-minimal-conf" | tee /etc/ceph/ceph.conf

キーリングは
「sudo ceph fs authorize <filesystem> client.<CephX user> / rw」で得られる. <filesystem>はここではemfsとかcephfs. <CephX user>はPOSIXアカウントとは関係ないです.

[root@ceph-client ~]# ssh root@ceph-mgr "cephadm shell -- ceph fs authorize emfs client.emfs     / rwp" | tee /etc/ceph/ceph.client.emfs.keyring
 
[root@ceph-client ~]# ssh root@ceph-mgr "cephadm shell -- ceph fs authorize cephfs client.cephfs / rwp" | tee /etc/ceph/ceph.client.cephfs.keyring

*「rw」ではquotaは使えないです。「rwp」が必要です。

っでmount

[root@ceph-client ~]# mkdir -p /emfs /cephfs
 
[root@ceph-client ~]# mount -t ceph emfs@.emfs=/      /emfs
[root@ceph-client ~]# mount -t ceph cephfs@.cephfs=/ /cephfs
 
[root@ceph-client ~]# df -lTht ceph
Filesystem                                           Type  Size  Used Avail Use% Mounted on
emfs@03d9320e-b236-11ee-8f5f-000c29721d9f.emfs=/     ceph  189G     0  189G   0% /emfs
cephfs@03d9320e-b236-11ee-8f5f-000c29721d9f.cephfs=/ ceph   95G     0   95G   0% /cephfs
[root@ceph-client ~]#

システム停止手順

参照先:
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つにする

[root@ceph-mgr ~]# ceph fs set emfs max_mds 1
[root@ceph-mgr ~]# ceph fs set cephfs max_mds 1

3-2. ファイルシステムを停止させる(その1)

[root@ceph-mgr ~]# ceph fs fail emfs
[root@ceph-mgr ~]# ceph fs fail cephfs
[root@ceph-mgr ~]# ceph -s
 :
    mds: 0/2 daemons up (2 failed), 2 standby
 :
[root@ceph-mgr ~]#

3-3. ファイルシステムを停止させる(その2)

[root@ceph-mgr ~]# ceph fs set emfs joinable false
[root@ceph-mgr ~]# ceph fs set cephfs joinable false

4. OSDの機能停止

[root@ceph-mgr ~]# ceph osd set noout
[root@ceph-mgr ~]# ceph osd set norecover
[root@ceph-mgr ~]# ceph osd set norebalance
[root@ceph-mgr ~]# ceph osd set nobackfill
[root@ceph-mgr ~]# ceph osd set nodown
[root@ceph-mgr ~]# ceph osd set pause
 
[root@ceph-mgr ~]# ceph -s
 :
    mds: 0/2 daemons up (2 failed), 2 standby
    osd: 6 osds: 6 up (since 21h), 6 in (since 21h)
         flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
 :
[root@ceph-mgr ~]#

5. OSDホストを順次停止

[root@ceph-mgr ~]# ssh root@ceph-osd1 "shutdown -h now"
[root@ceph-mgr ~]# ssh root@ceph-osd2 "shutdown -h now"
[root@ceph-mgr ~]# ssh root@ceph-osd3 "shutdown -h now"

6. MONホストを順次停止

[root@ceph-mgr ~]# ssh root@ceph-mds "shutdown -h now"

7. MGRホストを停止

[root@ceph-mgr ~]# shutdown -h now

システム起動手順

前段の逆を行います

1. MGRホストをboot
2. MONホストをboot
3. OSDホストをboot
4. MGRホストにてOSDの各種機能を有効化

[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     cbf4bdce-a455-11ee-8e61-000c29721d9f
    health: HEALTH_ERR
            2 filesystems are degraded
            2 filesystems are offline
            pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover flag(s) set
 
  services:
    mon: 3 daemons, quorum ceph-mgr,ceph-osd1,ceph-mds (age 3h)
    mgr: ceph-mgr.xfrivf(active, since 4h), standbys: ceph-mds.luefsj
    mds: 0/2 daemons up (2 failed), 2 standby
    osd: 6 osds: 6 up (since 3h), 6 in (since 26h)
         flags pauserd,pausewr,nodown,noout,nobackfill,norebalance,norecover
 
  data:
    volumes: 0/2 healthy, 2 failed
    pools:   5 pools, 321 pgs
    objects: 46 objects, 454 KiB
    usage:   48 GiB used, 300 GiB / 348 GiB avail
    pgs:     321 active+clean
 
[root@ceph-mgr ~]#
[root@ceph-mgr ~]# ceph osd unset noout
[root@ceph-mgr ~]# ceph osd unset norecover
[root@ceph-mgr ~]# ceph osd unset norebalance
[root@ceph-mgr ~]# ceph osd unset nobackfill
[root@ceph-mgr ~]# ceph osd unset nodown
[root@ceph-mgr ~]# ceph osd unset pause
 
[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     cbf4bdce-a455-11ee-8e61-000c29721d9f
    health: HEALTH_ERR
            2 filesystems are degraded
            2 filesystems are offline
 
  services:
    mon: 3 daemons, quorum ceph-mgr,ceph-osd1,ceph-mds (age 3h)
    mgr: ceph-mgr.xfrivf(active, since 4h), standbys: ceph-mds.luefsj
    mds: 0/2 daemons up (2 failed), 2 standby
    osd: 6 osds: 6 up (since 3h), 6 in (since 26h)
 
  data:
    volumes: 0/2 healthy, 2 failed
    pools:   5 pools, 321 pgs
    objects: 46 objects, 454 KiB
    usage:   48 GiB used, 300 GiB / 348 GiB avail
    pgs:     321 active+clean
 
[root@ceph-mgr ~]#

5. ファイルシステムを有効にする

[root@ceph-mgr ~]# ceph fs set emfs joinable true
[root@ceph-mgr ~]# ceph fs set cephfs joinable true

コンテナ毎にcpu数を定義するには

https://docs.ceph.com/en/reef/cephadm/services/#extra-container-arguments
キーワード:cephadm osd "extra_container_args" cpus

最新の60件
2025-01-23 2025-01-22 2025-01-21 2025-01-20 2025-01-13 2025-01-12 2025-01-08 2024-12-30 2024-12-29 2024-12-22 2024-12-20 2024-12-17 2024-12-15 2024-12-14 2024-12-12 2024-12-11 2024-12-10 2024-12-09 2024-12-08 2024-12-04
  • Ceph/cephadm
2024-11-28 2024-11-22 2024-11-15 2024-11-14 2024-11-12 2024-11-06 2024-11-05 2024-11-04 2024-11-02 2024-11-01 2024-10-29 2024-10-28 2024-10-27 2024-10-23 2024-10-18 2024-10-17 2024-10-15 2024-10-14 2024-10-13 2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-05

edit


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