せいさくちゅう

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ストレージ
ceph-mgrCeph Manager
Ceph Monitor
192.168.0.47/2410.10.10.47/24Rockylinux9.2os(16GB)
ceph-mdsCeph Manager
Ceph Metadata Server
Ceph Monitor
192.168.0.48/2410.10.10.48/24os(16GB)
ceph-osd1Ceph OSDs
Ceph Monitor
192.168.0.49/2410.10.10.a349/24os(16GB), osd(SSD:16GB)*1,osd(HDD:50GB)*2
ceph-osd2Ceph OSDs192.168.0.50/2410.10.10.50/24os(16GB), osd(SSD:16GB)*1,osd(HDD:50GB)*2
ceph-osd3Ceph OSDs192.168.0.51/2410.10.10.51/24os(16GB), osd(SSD:16GB)*1,osd(HDD:50GB)*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は有効のままでもいいみたい.

[root@ceph-mgr ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192 ens224
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
 
[root@ceph-mgr ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33
[root@ceph-mgr ~]#

Cephadm

cephadmで構築を進めるのですが、Rockylinux9にcephadmパッケージを含むリポジトリ「centos-release-ceph-reef」が使えそうなのでそれを使います

[root@ceph-mgr ~]# dnf install centos-release-ceph-reef.noarch -y
[root@ceph-mgr ~]# dnf install cephadm -y
(このまま進むとpodmanがインストールされる. docker-ce一色にしたいのなら
 dnf remove podman -y
 dnf install aardvark-dns conmon containers-common criu criu-libs crun libnet netavark protobuf-c shadow-utils-subid yajl -y
とする)
 
[root@ceph-mgr ~]# cephadm version
cephadm version 18.2.1 (7fe91d5d5842e04be3b4f514d6dd990c54b29c76) reef (stable)
[root@ceph-mgr ~]#

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

[root@ceph-mgr ~]# cephadm bootstrap --mon-ip 192.168.0.47 --cluster-network 10.10.10.0/24
 :
(数分かかる. この間にdockerイメージを取得してコンテナが動きます)
 :
Ceph Dashboard is now available at:
 
             URL: https://ceph-mgr.sybyl.local:8443/
            User: admin
        Password: 0q45gscqok
 :
[root@ceph-mgr ~]#
[root@ceph-mgr ~]# cat /etc/ceph/ceph.conf
[global]
        fsid = cbf4bdce-a455-11ee-8e61-000c29721d9f
        mon_host = [v2:192.168.0.47:3300/0,v1:192.168.0.47:6789/0]
 
[root@ceph-mgr ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQBqe4tlvQvMDBAAM2YdKVPxferOow9n/5qwjA==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"
[root@ceph-mgr ~]#
[root@ceph-mgr ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS         PORTS     NAMES
9e2fc054abfd   quay.io/ceph/ceph-grafana:9.4.7           "/bin/sh -c 'grafana…"   2 minutes ago   Up 2 minutes             (略)-grafana-ceph-mgr
87f33ec831e0   quay.io/prometheus/alertmanager:v0.25.0   "/bin/alertmanager -…"   2 minutes ago   Up 2 minutes             (略)-alertmanager-ceph-mgr
a5c17189b3df   quay.io/prometheus/prometheus:v2.43.0     "/bin/prometheus --c…"   2 minutes ago   Up 2 minutes             (略)-prometheus-ceph-mgr
6aff7cce9f51   quay.io/prometheus/node-exporter:v1.5.0   "/bin/node_exporter …"   3 minutes ago   Up 3 minutes             (略)-node-exporter-ceph-mgr
fdc38b97e58b   quay.io/ceph/ceph                         "/usr/bin/ceph-crash…"   3 minutes ago   Up 3 minutes             (略)-crash-ceph-mgr
0923e8bdc3da   quay.io/ceph/ceph                         "/usr/bin/ceph-expor…"   3 minutes ago   Up 3 minutes             (略)-ceph-exporter-ceph-mgr
08b11194c104   quay.io/ceph/ceph:v18                     "/usr/bin/ceph-mgr -…"   4 minutes ago   Up 4 minutes             (略)-mgr-ceph-mgr-wfeube
763b0680903f   quay.io/ceph/ceph:v18                     "/usr/bin/ceph-mon -…"   4 minutes ago   Up 4 minutes             (略)-mon-ceph-mgr
[root@ceph-mgr ~]#

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

この段階でDashboardが使えて、アクセスできます.

cephコマンドを入れる

[root@ceph-mgr ~]# cephadm add-repo --release reef
Writing repo to /etc/yum.repos.d/ceph.repo...
Enabling EPEL...
Completed adding repo.
 
[root@ceph-mgr ~]# cat /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph $basearch
baseurl=https://download.ceph.com/rpm-reef/el9/$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.gpg
 :
[root@ceph-mgr ~]#
[root@ceph-mgr ~]# cephadm install ceph-common
Installing packages ['ceph-common']...
 
[root@ceph-mgr ~]# less /var/log/dnf.log    <--何がインストールされたか確認できます

っでcephコマンドを使ってみます.

[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     cbf4bdce-a455-11ee-8e61-000c29721d9f
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph-mgr (age 13m)
    mgr: ceph-mgr.bqmawu(active, since 12m)
    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は共にceph-mgrが担当の様子.

既定のサービス構成

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

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

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

[root@ceph-mgr ~]# ceph orch ls --service_name=mon --export > mon.yaml
[root@ceph-mgr ~]# vi mon.yaml
cat mon.yaml
service_type: mon
service_name: mon
placement:
  count: 3
 
[root@ceph-mgr ~]# ceph orch apply -i mon.yaml --dry-run
[root@ceph-mgr ~]# ceph orch apply -i mon.yaml

あとホストを加えたときに勝手にサービス(monitor, manager)をアサインされないようにするために下記を実施します.

[root@ceph-mgr ~]# ceph orch set-unmanaged mon
[root@ceph-mgr ~]# ceph orch set-unmanaged mgr

次にosdのお話. こちらは初めに利用可能なデバイス(HDD)を自動的にOSDsに加えないようにしておきます. するとここでosdの定義書が手に入れられる

[root@ceph-mgr ~]# ceph orch apply osd --all-available-devices --unmanaged=true
[root@ceph-mgr ~]# ceph orch ls --service_type=osd --export > osd.yaml
[root@ceph-mgr ~]# cat 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@ceph-mgr ~]#

このosd.yamlはODSをHDD(回転体)の40GBから60GBとdata_deviceとして、SSD(回転しないデバイス)をblock.dbとして充てるようにします.

[root@ceph-mgr ~]# 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:
    rotational: 1
    size: '40G:60G'
  db_devices:
    rotational: 0
  objectstore: bluestore
 
[root@ceph-mgr ~]# ceph orch apply -i osd.yaml --dry-run
[root@ceph-mgr ~]# ceph orch apply -i osd.yaml

このようにcephクラスターの仕様をちょいと変更したうえで、ほかのノードを参加させます. 変更内容は「ceph orch ls --service_name=mgr --export」で確認できます

構成員を追加

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

[root@ceph-mgr ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-mds
[root@ceph-mgr ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd1
[root@ceph-mgr ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd2
[root@ceph-mgr ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd3

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

[root@ceph-mgr ~]# ceph orch host add ceph-mds 192.168.0.48
(この間にssh経由で相手先[ceph-mds]に必要なコンテナイメージらの登録が行われます)
 
(確認)
[root@ceph-mgr ~]# ceph orch host ls
HOST      ADDR          LABELS  STATUS
ceph-mds  192.168.0.48
ceph-mgr  192.168.0.47  _admin
2 hosts in cluster
[root@ceph-mgr ~]#

と新規ホスト ceph-mds が登録されましたが、そのceph-mdsにはまだ役割が与えられてないです

[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     cbf4bdce-a455-11ee-8e61-000c29721d9f
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph-mgr (age 2h)
    mgr: ceph-mgr.ttfhap(active, since 2h)
    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 ~]#

ceph-mds側ではdocker上で下記が動いてます

[root@ceph-mds ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED             STATUS             PORTS     NAMES
05e55c30641e   quay.io/prometheus/node-exporter:v1.5.0   "/bin/node_exporter …"   About an hour ago   Up About an hour             (略)node-exporter-ceph-mds
9779fe678632   quay.io/ceph/ceph                         "/usr/bin/ceph-crash…"   About an hour ago   Up About an hour             (略)crash-ceph-mds
73e346aa1312   quay.io/ceph/ceph                         "/usr/bin/ceph-expor…"   About an hour ago   Up About an hour             (略)ceph-exporter-ceph-mds
[root@ceph-mds ~]#

っで残りのノードを参加させます. 「ceph orch apply osd --all-available-devices --unmanaged=true」を入れておくこと

[root@ceph-mgr ~]# ceph orch host add ceph-osd1 192.168.0.49
[root@ceph-mgr ~]# ceph orch host add ceph-osd2 192.168.0.50
[root@ceph-mgr ~]# ceph orch host add ceph-osd3 192.168.0.51
 
(確認)
[root@ceph-mgr ~]# ceph orch host ls
HOST       ADDR          LABELS  STATUS
ceph-mds   192.168.0.48
ceph-mgr   192.168.0.47  _admin
ceph-osd1  192.168.0.49
ceph-osd2  192.168.0.50
ceph-osd3  192.168.0.51
5 hosts in cluster
[root@ceph-mgr ~]#

これでホストの追加は完了して、次に登録したホストにその役割を付けます

サービス配置

ここでは ceph-mgr と ceph-msd、ceph-osd1 をmonitorノードにする予定です.
ですが、「ceph orch set-unmanaged mon」としたので、ホストを追加してもmonitorにはなりません.
っで手動で割り当てます.

[root@ceph-mgr ~]# ceph orch apply mon --placement="ceph-mgr,ceph-mds,ceph-osd1" --dry-run
 :
####################
SERVICESPEC PREVIEWS
####################
+---------+------+--------------------+-------------+
|SERVICE  |NAME  |ADD_TO              |REMOVE_FROM  |
+---------+------+--------------------+-------------+
|mon      |mon   |ceph-osd1 ceph-mds  |             |
+---------+------+--------------------+-------------+
 :
[root@ceph-mgr ~]# ceph orch apply mon --placement="ceph-mgr,ceph-mds,ceph-osd1"
Scheduled mon update...
 
[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     cbf4bdce-a455-11ee-8e61-000c29721d9f
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 3 daemons, quorum ceph-mgr,ceph-osd1,ceph-mds (age 15s)
    mgr: ceph-mgr.ttfhap(active, since 3h)
    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 ~]#

services:のmon:が3つになりました. 一応ceph-mgrのdockerを見てみるとmonitorのコンテナが追加されたようです

[root@ceph-mds ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED          STATUS          PORTS     NAMES
2705c62be198   quay.io/ceph/ceph                         "/usr/bin/ceph-mon -…"   46 seconds ago   Up 46 seconds             (略)mon-ceph-mds
05e55c30641e   quay.io/prometheus/node-exporter:v1.5.0   "/bin/node_exporter …"   2 hours ago      Up 2 hours                (略)node-exporter-ceph-mds
9779fe678632   quay.io/ceph/ceph                         "/usr/bin/ceph-crash…"   2 hours ago      Up 2 hours                (略)crash-ceph-mds
73e346aa1312   quay.io/ceph/ceph                         "/usr/bin/ceph-expor…"   2 hours ago      Up 2 hours                (略)ceph-exporter-ceph-mds
[root@ceph-mds ~]#

次にmgrの役目は2つにしてますので、これも同様に設定をします

[root@ceph-mgr ~]# ceph orch apply mgr --placement="ceph-mgr,ceph-mds"  --dry-run
 :
+---------+------+----------+-------------+
|SERVICE  |NAME  |ADD_TO    |REMOVE_FROM  |
+---------+------+----------+-------------+
|mgr      |mgr   |ceph-mds  |             |
+---------+------+----------+-------------+
 :
[root@ceph-mgr ~]# ceph orch apply mgr --placement="ceph-mgr,ceph-mds"
[root@ceph-mgr ~]# ceph -s
 :
  services:
    mon: 3 daemons, quorum ceph-mgr,ceph-osd1,ceph-mds (age 3m)
    mgr: ceph-mgr.ttfhap(active, since 26m), standbys: ceph-mds.eqrnzv
    osd: 0 osds: 0 up, 0 in
 :
[root@ceph-mgr ~]#

と mgr の役目を ceph-mds も担うようになりました.

次にODSです. 3つのOSDは50GBのHDD2つと16GBのSSD1つをそれぞれ持たせてます. cephクラスターの仕様を満たしたデバイスのリストは「ceph orch device ls」で確認できます

[root@ceph-mgr ~]# ceph orch device ls
HOST       PATH      TYPE  DEVICE ID   SIZE  AVAILABLE  REFRESHED  REJECT REASONS
ceph-osd1  /dev/sdb  ssd              16.0G  Yes        6m ago
ceph-osd1  /dev/sdc  hdd              50.0G  Yes        6m ago
ceph-osd1  /dev/sdd  hdd              50.0G  Yes        6m ago
ceph-osd2  /dev/sdb  ssd              16.0G  Yes        5m ago
ceph-osd2  /dev/sdc  hdd              50.0G  Yes        5m ago
ceph-osd2  /dev/sdd  hdd              50.0G  Yes        5m ago
ceph-osd3  /dev/sdb  ssd              16.0G  Yes        5m ago
ceph-osd3  /dev/sdc  hdd              50.0G  Yes        5m ago
ceph-osd3  /dev/sdd  hdd              50.0G  Yes        5m ago
[root@ceph-mgr ~]#

ちなみにこの段階ではosdは登録されていない

[root@ceph-mgr ~]# ceph -s
  cluster:
    id:     cbf4bdce-a455-11ee-8e61-000c29721d9f
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 3 daemons, quorum ceph-mgr,ceph-osd1,ceph-mds (age 22m)
    mgr: ceph-mgr.ttfhap(active, since 2h), standbys: ceph-mds.eqrnzv
    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 ~]#

OSDのホストには 2つのHDDに1つのblock.db向けSSDを1つを当てている. bluestore構成で作りたいので下記コマンドを実行します

[root@ceph-mgr ~]# ceph orch daemon add osd ceph-osd1:data_devices=/dev/sdc,/dev/sdd,db_devices=/dev/sdb
 
[root@ceph-mgr ~]# ceph orch device ls
HOST       PATH      TYPE  DEVICE ID   SIZE  AVAILABLE  REFRESHED  REJECT REASONS
ceph-osd1  /dev/sdb  ssd              16.0G  No         1s ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd1  /dev/sdc  hdd              50.0G  No         1s ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd1  /dev/sdd  hdd              50.0G  No         1s ago     Has a FileSystem, Insufficient space (<10 extents) on vgs, LVM detected
ceph-osd2  /dev/sdb  ssd              16.0G  Yes        16m ago
ceph-osd2  /dev/sdc  hdd              50.0G  Yes        16m ago
ceph-osd2  /dev/sdd  hdd              50.0G  Yes        16m ago
ceph-osd3  /dev/sdb  ssd              16.0G  Yes        16m ago
ceph-osd3  /dev/sdc  hdd              50.0G  Yes        16m ago
ceph-osd3  /dev/sdd  hdd              50.0G  Yes        16m ago
 
[root@ceph-mgr ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME           STATUS  REWEIGHT  PRI-AFF
-1         0.11319  root default
-3         0.11319      host ceph-osd1
 0    hdd  0.05659          osd.0           up   1.00000  1.00000
 1    hdd  0.05659          osd.1           up   1.00000  1.00000
 
[root@ceph-mgr ~]# ceph -s
 :
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   16 GiB used, 100 GiB / 116 GiB avail
    pgs:
 :
[root@ceph-mgr ~]#

ceph-osd1の50GBのHDD2つが登録されました. ceph側に移ったのでceph-osd1の/dev/sd[bcd]は使えないよ(AVAILABLE:No)になりました
「,osds_per_device=2」を追加するとdata_devicesが2分割されます

ceph-osd1ではどうなっているかというと

[root@ceph-osd1 ~]# lsblk
NAME                                                                                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                                                                                                     8:0    0   16G  0 disk
|-sda1                                                                                                  8:1    0   50M  0 part /boot/efi
|-sda2                                                                                                  8:2    0    1G  0 part /boot
|-sda3                                                                                                  8:3    0 14.9G  0 part /
sdb                                                                                                     8:16   0   16G  0 disk
|-ceph--906f4610--a484--421d--905a--4d606e366081-osd--db--bb2e0519--0c46--4e22--ab6e--c12da68bffeb    253:1    0    8G  0 lvm
|-ceph--906f4610--a484--421d--905a--4d606e366081-osd--db--f71c1731--e4d2--41bf--a3ce--0c9832a88b88    253:3    0    8G  0 lvm
sdc                                                                                                     8:32   0   50G  0 disk
|-ceph--6fc9b265--7d55--4274--8358--6bd2098a7caf-osd--block--8add56fd--ed70--4375--aad5--ca04c42f92e6 253:0    0   50G  0 lvm
sdd                                                                                                     8:48   0   50G  0 disk
|-ceph--5bbcc840--5d1a--49a7--9749--4418b9e22f86-osd--block--5293527f--49a2--48f7--aedc--e1bf1e35625a 253:2    0   50G  0 lvm
sr0                                                                                                    11:0    1  8.8G  0 rom
[root@ceph-osd1 ~]#

とlvmを使ってsdbは2分割されている. もっと詳しく見るには ceph-osd1 に cephadm をインストールしてそこで「cephadm ceph-volume lvm list」を実行する

[root@ceph-osd1 ~]# dnf install centos-release-ceph-reef.noarch -y
[root@ceph-osd1 ~]# dnf install cephadm -y
[root@ceph-osd1 ~]# cephadm ceph-volume lvm list
 :
====== osd.0 =======
 
  [block]       /dev/ceph-6fc9b265-7d55-4274-8358-6bd2098a7caf/osd-block-8add56fd-ed70-4375-aad5-ca04c42f92e6
 
      block device              /dev/ceph-6fc9b265-7d55-4274-8358-6bd2098a7caf/osd-block-8add56fd-ed70-4375-aad5-ca04c42f92e6
      block uuid                3zEWyG-leHb-GrMi-EtFC-69Dy-Ot3s-lsserW
      cephx lockbox secret
      cluster fsid              cbf4bdce-a455-11ee-8e61-000c29721d9f
      cluster name              ceph
      crush device class
      db device                 /dev/ceph-906f4610-a484-421d-905a-4d606e366081/osd-db-bb2e0519-0c46-4e22-ab6e-c12da68bffeb
      db uuid                   xad8uB-OI1Q-WVdO-Ejpx-Fvtv-JFO2-GvK51r
      encrypted                 0
      osd fsid                  8add56fd-ed70-4375-aad5-ca04c42f92e6
      osd id                    0
      osdspec affinity          None
      type                      block
      vdo                       0
      devices                   /dev/sdc
 
  [db]          /dev/ceph-906f4610-a484-421d-905a-4d606e366081/osd-db-bb2e0519-0c46-4e22-ab6e-c12da68bffeb
 
      block device              /dev/ceph-6fc9b265-7d55-4274-8358-6bd2098a7caf/osd-block-8add56fd-ed70-4375-aad5-ca04c42f92e6
      block uuid                3zEWyG-leHb-GrMi-EtFC-69Dy-Ot3s-lsserW
      cephx lockbox secret
      cluster fsid              cbf4bdce-a455-11ee-8e61-000c29721d9f
      cluster name              ceph
      crush device class
      db device                 /dev/ceph-906f4610-a484-421d-905a-4d606e366081/osd-db-bb2e0519-0c46-4e22-ab6e-c12da68bffeb
      db uuid                   xad8uB-OI1Q-WVdO-Ejpx-Fvtv-JFO2-GvK51r
      encrypted                 0
      osd fsid                  8add56fd-ed70-4375-aad5-ca04c42f92e6
      osd id                    0
      osdspec affinity          None
      type                      db
      vdo                       0
      devices                   /dev/sdb
 
====== osd.1 =======
 
  [block]       /dev/ceph-5bbcc840-5d1a-49a7-9749-4418b9e22f86/osd-block-5293527f-49a2-48f7-aedc-e1bf1e35625a
 
      block device              /dev/ceph-5bbcc840-5d1a-49a7-9749-4418b9e22f86/osd-block-5293527f-49a2-48f7-aedc-e1bf1e35625a
      block uuid                63CyfI-vLe5-Mb0P-E3cE-n0KZ-RxCc-2gV4cF
      cephx lockbox secret
      cluster fsid              cbf4bdce-a455-11ee-8e61-000c29721d9f
      cluster name              ceph
      crush device class
      db device                 /dev/ceph-906f4610-a484-421d-905a-4d606e366081/osd-db-f71c1731-e4d2-41bf-a3ce-0c9832a88b88
      db uuid                   PXeA6s-JINg-6ehZ-CJOw-3OVx-UWxm-pBUuEJ
      encrypted                 0
      osd fsid                  5293527f-49a2-48f7-aedc-e1bf1e35625a
      osd id                    1
      osdspec affinity          None
      type                      block
      vdo                       0
      devices                   /dev/sdd
 
  [db]          /dev/ceph-906f4610-a484-421d-905a-4d606e366081/osd-db-f71c1731-e4d2-41bf-a3ce-0c9832a88b88
 
      block device              /dev/ceph-5bbcc840-5d1a-49a7-9749-4418b9e22f86/osd-block-5293527f-49a2-48f7-aedc-e1bf1e35625a
      block uuid                63CyfI-vLe5-Mb0P-E3cE-n0KZ-RxCc-2gV4cF
      cephx lockbox secret
      cluster fsid              cbf4bdce-a455-11ee-8e61-000c29721d9f
      cluster name              ceph
      crush device class
      db device                 /dev/ceph-906f4610-a484-421d-905a-4d606e366081/osd-db-f71c1731-e4d2-41bf-a3ce-0c9832a88b88
      db uuid                   PXeA6s-JINg-6ehZ-CJOw-3OVx-UWxm-pBUuEJ
      encrypted                 0
      osd fsid                  5293527f-49a2-48f7-aedc-e1bf1e35625a
      osd id                    1
      osdspec affinity          None
      type                      db
      vdo                       0
      devices                   /dev/sdb
 
[root@ceph-osd1 ~]#

と表記されるのでblock.dbは無事に作られている.

っで同じように

[root@ceph-mgr ~]# ceph orch daemon add osd ceph-osd2:data_devices=/dev/sdc,/dev/sdd,db_devices=/dev/sdb
[root@ceph-mgr ~]# ceph orch daemon add osd ceph-osd3:data_devices=/dev/sdc,/dev/sdd,db_devices=/dev/sdb
 
[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 50m)
    mgr: ceph-mgr.xfrivf(active, since 63m), standbys: ceph-mds.luefsj
    osd: 6 osds: 6 up (since 28s), 6 in (since 76s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   48 GiB used, 300 GiB / 348 GiB avail
    pgs:     1 active+clean
 
[root@ceph-mgr ~]# ceph osd pool ls
.mgr
[root@ceph-mgr ~]#

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
最新の60件
2024-04-19 2024-04-18 2024-04-17 2024-04-16 2024-04-15 2024-04-11 2024-04-06 2024-04-05 2024-03-30 2024-03-29 2024-03-19 2024-03-17 2024-03-15
  • Ceph/cephadm
2024-03-06 2024-03-05 2024-03-03 2024-02-23 2024-02-22 2024-02-21 2024-02-20 2024-02-19 2024-02-18 2024-02-17 2024-02-13 2024-02-12 2024-02-09 2024-02-04 2024-02-03 2024-01-31 2024-01-30 2024-01-29 2024-01-28 2024-01-22 2024-01-16 2024-01-13 2024-01-09 2024-01-08 2024-01-07 2024-01-03 2023-12-22 2023-12-17

edit


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