せいさくちゅう
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アドレス | backend | OS | ストレージ | CPU threads |
ceph01 | Ceph Manager Ceph Metadata Server Ceph Monitor | 192.168.0.47/24 | 10.10.10.47/24 | Rockylinux9.4 | system(16GB) /var/lib/ceph(8GB,monitor) | 8 threads(monitor:4+metadata:2+manager:1+ ほか) |
ceph02 | Ceph Manager Ceph Metadata Server Ceph Monitor | 192.168.0.48/24 | 10.10.10.48/24 | system(16GB) /var/lib/ceph(8GB,monitor) | 8 threads(monitor:4+metadata:2+manager:1+ ほか) | |
ceph-osd1 | Ceph OSDs Ceph Monitor | 192.168.0.49/24 | 10.10.10.49/24 | system(24GB: os[16GB]+wal[8GB]) /var/lib/ceph(8GB,monitor) block.db(16GB) OSD(50GB) | 6 threads(moitor:4t+osd:2) | |
ceph-osd2 | Ceph OSDs | 192.168.0.50/24 | 10.10.10.50/24 | system(16GB) block.db(32GB) OSD(50GB)+OSD(50GB) | 4 threads(OSD:2+OSD:2) | |
ceph-osd3 | Ceph OSDs | 192.168.0.51/24 | 10.10.10.51/24 | system(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で構築を進めるのですが、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 Manager 兼 Ceph 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にアクセスできます.
設定ファイルとキーリングがあれば「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を追加してくれます
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」で見れる)
追加対象のホストは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 ~]#
ここでは ceph01とceph02 には Ceph Monitor と Ceph Manager と Ceph 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 の設定後にします.
まだ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」では下記のように表示される
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が自動的にデプロイされて動きます
「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
でその警告は停止します
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 ~]#
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
https://docs.ceph.com/en/reef/cephadm/services/#extra-container-arguments
キーワード:cephadm osd "extra_container_args" cpus