#author("2025-04-25T08:43:12+00:00","default:sysosa","sysosa") #author("2025-04-25T09:49:39+00:00","default:sysosa","sysosa") ''CephFS OSDs'' [[https://ceph.readthedocs.io/en/latest/start/intro/>+https://ceph.readthedocs.io/en/latest/start/intro/]]によれば #code(nonumber){{ Ceph OSDs: An Object Storage Daemon (Ceph OSD, ceph-osd) stores data, handles data replication, recovery, rebalancing, and provides some monitoring information to Ceph Monitors and Managers by checking other Ceph OSD Daemons for a heartbeat. At least three Ceph OSDs are normally required for redundancy and high availability. (deepL先生訳) Ceph OSD: オブジェクトストレージデーモン(Ceph OSD、ceph-osd)は、データを格納し、データのレプリケーション、リカバリ、リバランシングを処理します、 他のCeph OSDデーモンのハートビートをチェックすることで、Cephモニタとマネージャに監視情報を提供します。 通常、冗長性と高可用性のために少なくとも3つのCeph OSDが必要です。 }} 他のOSDホストと連携してデータの保存、レプリケーション、リカバリ、リバランスを行う. こちらも「At least 3 Ceph OSDs are normally required for redundancy and high availability.」とあり運用時は3台以上必要. このOSDですが、下記の2つの意味合いがあるようで、ドキュメントを読む際は軽く注意かなと OSD:Object Storage Daemo OSD:Object Storage Device ここではceph-osd1、ceph-osd2、ceph-osd3でOSDを用意します ***下準備 [#ed703943] cephリポジトリを登録して #code(nonumber){{ [root@ceph-osd1 ~]# vi /etc/yum.repos.d/ceph.repo [ceph] name=Ceph packages for $basearch baseurl=https://download.ceph.com/rpm-squid/el9/$basearch enabled=1 priority=2 gpgcheck=1 gpgkey=https://download.ceph.com/keys/release.asc [ceph-noarch] name=Ceph noarch packages baseurl=https://download.ceph.com/rpm-squid/el9/noarch enabled=1 priority=2 gpgcheck=1 gpgkey=https://download.ceph.com/keys/release.asc [root@ceph-osd1 ~]# }} OSDのパッケージをインストールします #code(nonumber){{ [root@ceph-osd1 ~]# dnf install epel-release -y && dnf install ceph-osd ceph-volume }} 加えてfirewallにcephの穴を作ります #code(nonumber){{ [root@ceph-osd1 ~]# firewall-cmd --add-service=ceph --permanent && firewall-cmd --reload }} その後に monitor の ceph01から「/etc/ceph/ceph.conf」と「/var/lib/ceph/bootstrap-osd/ceph.keyring」 を ceph-osd1 へ運びます. #code(nonumber){{ [root@ceph01 ~]# scp /etc/ceph/ceph.conf root@ceph-osd1:/etc/ceph/ceph.conf [root@ceph01 ~]# scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@ceph-osd1:/var/lib/ceph/bootstrap-osd/ceph.keyring [root@ceph01 ~]# ssh ceph-osd1 chown -R ceph. /etc/ceph [root@ceph01 ~]# ssh ceph-osd1 chown -R ceph. /var/lib/ceph }} ***ストレージの準備 [#ze9130b7] cephFSの構築を目的にしているので&color(crimson){data};領域と&color(magenta){meta};領域が必要になります. &color(magenta){meta};領域はssdらの早いデバイスが好ましいのでSSDのみで構成するようにしています. 加えてデータの本体となるストレージ(HDD)に、DB デバイス(block.db)[データ内部のメタデータを保存するデバイス]とWAL(write-ahead-log)デバイス(block.wal)[内部ジャーナルまたは write-ahead ログを保存するデバイス]を組み合わせて作る事が出来る. これがBlueStore構成と呼ぶみたい. ここでは、本来全て同じ構成のblueStore(block.db/block.walの保持の有無)でで作るべきなのですが、作り方を示すためにそれぞれ異なるblueStoreを用意してみる. |BGCOLOR(YELLOW):ホスト名|BGCOLOR(YELLOW):名目|BGCOLOR(YELLOW):block|BGCOLOR(YELLOW):&color(orangered){block.db};|BGCOLOR(YELLOW):&color(orange){block.wal};|BGCOLOR(YELLOW):備考| |ceph-osd1|&color(magenta){meta};向け|/dev/sdc(50GB,SSD)| | || |~|&color(crimson){data};向け|/dev/sdd(50GB.HDD)|||block.dbもblocl.walも持たない | |ceph-osd2|&color(magenta){meta};向け|/dev/sdc(50GB,SSD)| | || |~|&color(crimson){data};向け|/dev/sdb(50GB,HDD)&br;/dev/sde(50GB,HDD)|/dev/db/0 (/dev/sdf由来)&br;/dev/db/1 (/dev/sdf由来)|/dev/wal/0 (/dev/sdd由来)&br;/dev/wal/1 (/dev/sdd由来)|block.dbとblock.walはLVMで提供| |ceph-osd3|&color(magenta){meta};向け|/dev/sdf(50GB,SSD)| | || |~|&color(crimson){data};向け|/dev/sdb(50GB,HDD)&br;/dev/sdc(50GB,HDD)&br;/dev/sdd(50GB,HDD)|/dev/db/0 (/dev/sde由来)&br;/dev/db/1 (/dev/sde由来)&br;/dev/db/2 (/dev/sde由来)|| block.dbのみ提供されて、/dev/sde(60GB,SSD)をLVMで3分割して使用| -単純にストレージデバイス単体でblueStoreを作る(ceph-osd1のdataとmeta、ceph-osd2のmetaとceph-osd3のmeta) #code(nonumber){{ [root@ceph-osd1 ~]# ceph-volume inventory Device Path Size Device nodes rotates available Model name <--「rotates」がFalseとなるのがSSD /dev/sdc 50.00 GB sdc False True QEMU HARDDISK /dev/sdd 50.00 GB sdd True True QEMU HARDDISK : [root@ceph-osd1 ~]# [root@ceph-osd1 ~]# ceph-volume lvm create --bluestor --data /dev/sdc <-SSD meta [root@ceph-osd1 ~]# ceph-volume lvm create --bluestor --data /dev/sdd <-HDD data [root@ceph-osd2 ~]# ceph-volume lvm create --bluestor --data /dev/sdc <-SSD meta [root@ceph-osd3 ~]# ceph-volume lvm create --bluestor --data /dev/sdf <-SSD meta }} -dataとblock.db、block.walの3つを組み合わせたblueStoreを作る(ceph-osd2) dataとなるHDDは2つあるので、block.db向けの/dev/sdbはlvmで2分割、block.wal向けの/dev/sddのlvmで2分割します #code(nonumber){{ [root@ceph-osd2 ~]# ceph-volume inventory Device Path Size Device nodes rotates available Model name /dev/sdb 50.00 GB sdb True True QEMU HARDDISK /dev/sdc 50.00 GB sdc False True QEMU HARDDISK /dev/sdd 20.00 GB sdd False True QEMU HARDDISK /dev/sde 50.00 GB sde True True QEMU HARDDISK /dev/sdf 40.00 GB sdf False True QEMU HARDDISK : [root@ceph-osd2 ~]# [root@ceph-osd2 ~]# pvcreate /dev/sdf <-- block.db向け [root@ceph-osd2 ~]# vgcreate db /dev/sdf [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/sdd <-- block.wal向け [root@ceph-osd2 ~]# vgcreate wal /dev/sdd [root@ceph-osd2 ~]# lvcreate -n 0 -l 50%VG wal [root@ceph-osd2 ~]# lvcreate -n 1 -l 50%VG wal }} 次にosdを作ります #code(nonumber){{ [root@ceph-osd2 ~]# ceph-volume lvm create --bluestore --data /dev/sdb --block.db /dev/db/0 --block.wal /dev/wal/0 [root@ceph-osd2 ~]# ceph-volume lvm create --bluestore --data /dev/sde --block.db /dev/db/1 --block.wal /dev/wal/1 }} -dataが3デバイスでblock.dbが1デバイスのblueStore(ceph-osd3) block.dbデバイスを3つに分割します. #code(nonumber){{ [root@ceph-osd3 ~]# ceph-volume inventory Device Path Size Device nodes rotates available Model name /dev/sdb 50.00 GB sdb True True QEMU HARDDISK /dev/sdc 50.00 GB sdc True True QEMU HARDDISK /dev/sdd 50.00 GB sdd True True QEMU HARDDISK /dev/sde 60.00 GB sde False True QEMU HARDDISK /dev/sdf 50.00 GB sdf False True QEMU HARDDISK : [root@ceph-osd3 ~]# [root@ceph-osd3 ~]# pvcreate /dev/sde [root@ceph-osd3 ~]# vgcreate db /dev/sde [root@ceph-osd3 ~]# lvcreate -n 0 -l 33%VG db [root@ceph-osd3 ~]# lvcreate -n 1 -l 33%VG db [root@ceph-osd3 ~]# lvcreate -n 2 -l 33%VG db }} 次にosdを作ります #code(nonumber){{ [root@ceph-osd3 ~]# ceph-volume lvm create --bluestore --data /dev/sdb --block.db /dev/db/0 [root@ceph-osd3 ~]# ceph-volume lvm create --bluestore --data /dev/sdc --block.db /dev/db/1 [root@ceph-osd3 ~]# ceph-volume lvm create --bluestore --data /dev/sdd --block.db /dev/db/2 }} ***ストレージデバイスの確認 [#g5803926] #code(nonumber){{ [root@ceph01 ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.16599 root default -3 0.16599 host ceph-osd2 0 hdd 0.04880 osd.0 up 1.00000 1.00000 2 hdd 0.06839 osd.2 up 1.00000 1.00000 1 ssd 0.04880 osd.1 up 0 1.00000 ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.53654 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 4 hdd 0.06839 osd.4 up 1.00000 1.00000 5 hdd 0.06839 osd.5 up 1.00000 1.00000 2 ssd 0.04880 osd.2 up 1.00000 1.00000 -10 0.25337 host ceph-osd3 6 hdd 0.06819 osd.6 up 1.00000 1.00000 7 hdd 0.06819 osd.7 up 1.00000 1.00000 8 hdd 0.06819 osd.8 up 1.00000 1.00000 3 ssd 0.04880 osd.3 up 1.00000 1.00000 [root@ceph01 ~]# }} ***osdの削除 [#c295cb74] managerノードにて #code(nonumber){{ [root@ceph01 ~]# ceph osd out 0 1 2 }} その後 #code(nonumber){{ [root@ceph-osd2 ~]# systemctl stop ceph-osd@0 ceph-osd@1 ceph-osd@2 }} #code(nonumber){{ [root@ceph01 ~]# ceph osd purge 0 --yes-i-really-mean-it [root@ceph01 ~]# ceph osd purge 1 --yes-i-really-mean-it [root@ceph01 ~]# ceph osd purge 2 --yes-i-really-mean-it [root@ceph01 ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0 root default -3 0 host ceph-osd2 [root@ceph01 ~]# }} #code(nonumber){{ [root@ceph-osd2 ~]# ceph-volume lvm zap /dev/sdb --destroy [root@ceph-osd2 ~]# ceph-volume lvm zap /dev/sdc --destroy [root@ceph-osd2 ~]# ceph-volume lvm zap /dev/sdd --destroy }} ***monitor側では [#l877e301] ceph-osd1、ceph-osd2、ceph-osd3をOSDとして組み込んで「ceph -s」で確認すると下記のようになる. #code(nonumber){{ [root@ceph-mgr ~]# ceph -s cluster: id: c2d06c20-9197-40b4-a8c4-1a0604936ce8 health: HEALTH_OK services: mon: 3 daemons, quorum ceph-mgr,ceph-mds,ceph-osd1 (age 5h) mgr: ceph-mgr(active, since 14h) osd: 3 osds: 3 up (since 3h), 3 in (since 3h) mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 65m) mgr: ceph01(active, since 88m) osd: 9 osds: 9 up (since 55m), 9 in (since 56m) data: pools: 1 pools, 1 pgs objects: 2 objects, 449 KiB usage: 93 MiB used, 48 GiB / 48 GiB avail objects: 2 objects, 577 KiB usage: 100 GiB used, 449 GiB / 549 GiB avail pgs: 1 active+clean [root@ceph-mgr ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.04678 root default -5 0.01559 host ceph-osd1 1 ssd 0.01559 osd.1 up 1.00000 1.00000 -3 0.01559 host ceph-osd2 0 ssd 0.01559 osd.0 up 1.00000 1.00000 -7 0.01559 host ceph-osd3 2 ssd 0.01559 osd.2 up 1.00000 1.00000 [root@ceph-mgr ~]# }} ***OSDの追加/削除 [#v56a95f0] [[https://docs.ceph.com/docs/mimic/rados/operations/add-or-rm-osds/>+https://docs.ceph.com/docs/mimic/rados/operations/add-or-rm-osds/]] ***HDDが不良の際 [#n6dbab4c] [[https://docs.ceph.com/en/latest/rados/operations/add-or-rm-osds/#replacing-an-osd>+https://docs.ceph.com/en/latest/rados/operations/add-or-rm-osds/#replacing-an-osd]] とか [[https://access.redhat.com/documentation/ja-jp/red_hat_ceph_storage/4/html/operations_guide/replacing-an-osd-drive-while-retaining-the-osd-id_ops>+https://access.redhat.com/documentation/ja-jp/red_hat_ceph_storage/4/html/operations_guide/replacing-an-osd-drive-while-retaining-the-osd-id_ops]]