#author("2025-09-12T09:28:37+00:00","default:sysosa","sysosa") #author("2025-09-12T09:29:26+00:00","default:sysosa","sysosa") ***/var/log/secureに「pam_systemd(sudo:session): Failed to connect to system bus: No such file or directory」と表示される [#l6092068] こんな出力 #code(nonumber){{ Aug 31 05:03:23 ceph01 sudo[4739]: ceph : PWD=/ ; USER=root ; COMMAND=/usr/sbin/nvme qemu smart-log-add --json /dev/sdb Aug 31 05:03:23 ceph01 sudo[4739]: pam_systemd(sudo:session): Failed to connect to system bus: No such file or directory Aug 31 05:03:23 ceph01 sudo[4739]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=167) Aug 31 05:03:23 ceph01 sudo[4739]: pam_unix(sudo:session): session closed for user root }} これはユーザ「ceph」が cron, systemd, あるいは 非対話シェルから「sudo /usr/sbin/nvme」を実行したが、セッションパス(DBus)やユーザセッション情報がないので PAMが反応して記録を残している模様. 無視しても構わない. どうしてもなら authselect の段階でそれ向けのプロファイルを作るとかになる #code(nonumber){{ [root@ceph-osd1 ~]# authselect current <-- いま使っているプロファイルを提示. 「No existing configuration detected.」ならsssd. [root@ceph-osd1 ~]# authselect create-profile custom-pam --base-on sssd <-- 「sssd」プロファイルからコピー(custom-pam)を作成します [root@ceph-osd1 ~]# authselect select custom/custom-pam --force <-- 作ったcustom-pamプロファイル(custom/custom-pam)を適用します. sssdと同じです [root@ceph-osd1 ~]# ls -l /etc/authselect/custom/custom-pam/ : -rw-r--r--. 1 root root 2355 Aug 31 05:42 smartcard-auth -rw-r--r--. 1 root root 4778 Aug 31 05:42 system-auth : [root@ceph-osd1 ~]# vi /etc/authselect/custom/custom-pam/system-auth : -session optional pam_systemd.so ↓ #-session optional pam_systemd.so <-- 先頭行に「#」を入れて無効化 : [root@ceph-osd1 ~]# [root@ceph-osd1 ~]# authselect apply-changes <-- 変更を適用 }} これでログに記載されなくなります ***「ceph -s」 で「xx pgs not dee-scrubbed in time」「xx pgs not scrubbed in time」とか出る [#ybfe506f] PG(Placement Group)に対して定期的に行われる scrub / deep-scrub がスケジュール内に完了していないとの意 そもそも scrub とは複数ノードに分散したメタデータの整合性チェック. deep-scrub は実データの整合性チェックを行う. deep-scrubはIO処理が重い. #code(nonumber){{ ceph health detail }} は残っている scrub 対象のリストがでます。遅いなら早くすればいいので並列を上げます。上げすぎると問題っぽいけど #code(nonumber){{ ceph config set osd osd_max_scrubs 5 <-- 「ceph config get osd osd_max_scrubs」で確認 }} あるPGのscrubが終わって、osd_scrub_max_interval の時間が経過後に次のosd_scrub_begin_hourが来ればスケジュールされるみたい. 当然 rebalancing / recovery / backfill が起こっていれば scrub は遅くなる ***ceph-19.2.3から libcrypto.so.3(OPENSSL_3.4.0)(64bit) が必要になってrockylinux9 では未提供な件 [#c7946709] 「libcrypto.so.3(OPENSSL_3.5.0)(64bit)」の提供は rockylinux10 からみたい。なので、、 作るしかない #code(nonumber){{ dnf install perl-Digest-SHA perl-FindBin perl-IPC-Cmd perl-Module-Load-Conditional perl-Pod-Html perl-Test-Harness perl-Time-HiRes perl-Time-Piece perl-Test-Simple perl-bignum wget https://mirror.stream.centos.org/9-stream/BaseOS/source/tree/Packages/openssl-3.5.1-2.el9.src.rpm rpmbuild --rebuild ./openssl-3.5.1-2.el9.src.rpm }} できた openssl-libs-3.5.1-2.el9.x86_64.rpm openssl-fips-provider-3.5.1-2.el9.x86_64.rpm openssl-3.5.1-2.el9.x86_64.rpm を一斉にインストールします ***古いcephを入れるには [#x4d733a9] 「dnf --showduplicates search」で古いバージョンを見つけて、それを指定します #code(nonumber){{ [root@rockylinux9 ~]# dnf install centos-release-ceph-squid epel-release -y [root@rockylinux9 ~]# dnf --showduplicates search ceph-common Last metadata expiration check: 0:00:30 ago on Fri 12 Sep 2025 06:24:52 PM JST. ============================== Name Exactly Matched: ceph-common =============================== ceph-common-2:19.2.0-1.el9s.x86_64 : Ceph Common ceph-common-2:19.2.0-2.el9s.x86_64 : Ceph Common ceph-common-2:19.2.1-1.el9s.x86_64 : Ceph Common ceph-common-2:19.2.2-1.el9s.x86_64 : Ceph Common ceph-common-2:19.2.3-1.el9s.x86_64 : Ceph Common ================================== Name Matched: ceph-common =================================== python3-ceph-common-2:19.2.0-1.el9s.x86_64 : Python 3 utility libraries for Ceph python3-ceph-common-2:19.2.0-2.el9s.x86_64 : Python 3 utility libraries for Ceph python3-ceph-common-2:19.2.1-1.el9s.x86_64 : Python 3 utility libraries for Ceph python3-ceph-common-2:19.2.2-1.el9s.x86_64 : Python 3 utility libraries for Ceph python3-ceph-common-2:19.2.3-1.el9s.x86_64 : Python 3 utility libraries for Ceph [root@rockylinux9 ~]# }} と表示される。ここで 19.2.1 の「ceph-common」を入れるなら #code(nonumber){{ [root@rockylinux9 ~]# dnf install ceph-common-2:19.2.1-1.el9s.x86_64 }} とする。 ***journal で流れるログを抑制したい [#e13dffb0] 各mgrデーモンのログ制御は「debug_mgr」、monデーモンは「debug_mon」、mdsデーモンは「debug_mds」、osdデーモンは「debug_osd」と、他には「debug_client」「debug_rados」「debug_bluestore」「debug_rocksdb」で行う フォーマットは「ceph config set mon debug_mon <stderr>/<file>」で行い、<stderr>と<file>はloglevelの指定. 「0: エラーのみ、1: 警告、2: 情報、20: デバッグ」を指定する. #code(nonumber){{ [root@ceph01 ~]# ceph config set global debug_mgr 0/0 [root@ceph01 ~]# ceph config set global debug_mon 0/0 [root@ceph01 ~]# ceph config set global debug_osd 0/0 [root@ceph01 ~]# ceph config set global debug_bluestore 0/0 [root@ceph01 ~]# ceph config set global debug_rocksdb 0/0 [root@ceph01 ~]# ceph config set global debug_client 0/0 [root@ceph01 ~]# ceph config set global debug_rados 0/0 }} 確認は「ceph config get mon debug_mon」「ceph config get osd debug_osd」「ceph config get osd debug_bluestore」 「global」を「osd.2」とか特定でも構わない. 出力先は3つ用意されて ceph のファイル、journal、messages の3つ #code(nonumber){{ [root@ceph01 ~]# ceph config set global log_to_file false * trueなら「log_file」で指定したファイルに書かれる [root@ceph01 ~]# ceph config set global log_to_journald false * systemd 経由で journal に書かれる [root@ceph01 ~]# ceph config set global log_to_stderr false * journal からrsyslogを経て /var/log/messages に書かれる }} 上記は各ノードで働く各デーモンについて。 ceph全体のclusterログは「mon_cluster_log_to_level 」で定める #code(nonumber){{ [root@ceph01 ~]# ceph config set global mon_cluster_log_level info [root@ceph01 ~]# ceph config set global mon_cluster_log_to_file false [root@ceph01 ~]# ceph config set global mon_cluster_log_to_stderr false [root@ceph01 ~]# ceph config set global mon_cluster_log_to_journald false }} ***ワーニングメッセージをクリアする [#i0df438b] 問題が既に対処済みであるならクリアする #code(nonumber){{ [root@ceph01 ~]# ceph -s : health: HEALTH_WARN 1 mgr modules have recently crashed : [root@ceph01 ~]# ceph health detail HEALTH_WARN 1 mgr modules have recently crashed [WRN] RECENT_MGR_MODULE_CRASH: 1 mgr modules have recently crashed mgr module cephadm crashed in daemon mgr.ceph01.cammqz on host ceph01 at 2025-05-06T08:48:40.736559Z [root@ceph01 ~]# ceph crash ls ID ENTITY NEW 2025-05-06T08:48:40.736559Z_4ad1da23-f2ea-4a4d-9b11-f68bd71109be mgr.ceph01.cammqz * [root@ceph01 ~]# [root@ceph01 ~]# ceph crash rm 2025-05-06T08:48:40.736559Z_4ad1da23-f2ea-4a4d-9b11-f68bd71109be [root@ceph01 ~]# ceph -s : health: HEALTH_OK : [root@ceph01 ~]# }} ***指定したcpu数でコンテナが動くのか? [#mf8c84c0] monitorを「"--cpus=4"」としたが本当に機能しているか確かめてみた ここでは「"--cpus=2"」としてmonitorを作って、そのなかに入って単純なコマンド「yes」を回してみた。それをceph01上でどのように観測されるか確かめた #code(nonumber){{ [root@ceph01 ~]# vi mon.yaml : extra_container_args: - "--cpus=2" [root@ceph01 ~]# ceph orch apply -i mon.yaml [root@ceph01 ~]# podman container inspect <CONTAINER ID> | less : "CpuPeriod": 100000, -> 「--cpus」の指定がないと「"CpuPeriod":0」「"CpuQuota": 0」と無制限になる. "CpuQuota": 200000, : [root@ceph01 ~]# podman ps CONTAINER ID IMAGE COMMAND (略 : a47e3a21247c quay.io/ceph/ceph@sha256:8214ebff6133ac27d20659038df6962dbf9d77da21c9438a296b2e2059a56af6 -n mon.ceph01 (略 [root@ceph01 ~]# podman exec -u root -it a47e3a21247c /bin/bash [root@ceph01 /]# [root@ceph01 /]# (timeout 15s yes > /dev/null & ) ; (timeout 15s yes > /dev/null & ) ; (timeout 15s yes > /dev/null & ) ; (timeout 15s yes > /dev/null & ) }} 大本のceph01のtopからは 各yesコマンドのプロセスが50%で動き、それが合計200%なので「--cpus=2」は有効なのかなと思える &ref(2025y05m06d_145347457.png,nolink); ***cephの運用形態 [#o3149398] #code(nonumber){{ [root@ceph01 ~]# ceph orch status Backend: cephadm Available: Yes Paused: No [root@ceph01 ~]# }} ***BlueStore [#a58718b8] [[https://docs.ceph.com/en/reef/rados/configuration/bluestore-config-ref/>+https://docs.ceph.com/en/reef/rados/configuration/bluestore-config-ref/]] cephのストレージデバイスの定義方法. メインのHDD/SSDストーレジ(プライマリ デバイス)に1つまたは2つの追加デバイスを付けられる. -DBデバイス(block.db) メタデータを保持します. メタデータが溢れたらプライマリ デバイスに置かれる. プライマリ デバイスよりも高速なデバイスで有利になる(パフォーマンス的に) -WALデバイス(block.wal) 先行書き込みログ. ジャーナルまたは先行書き込みログを別のデバイスに置ける. 10GBもあれが十分の様子. &size(10){zfsのSLOGっぽいものかな?}; DBデバイスのサイズはプライマリ デバイスの1%-4%ほどで. cephfs,rdb,rgwと使用するワークロードで異なるようで、cephfsでは4%みたい. &size(10){ただ、各種"説"があるようで、、}; DBデバイスとWALデバイスを1つのデバイスに割り当てても構わない. &ref(2025y03m02d_120944083.png,nolink,noborder); ***ディスククォータ [#sa422c23] いわゆるストレージの利用制限. [[https://docs.ceph.com/en/latest/cephfs/quota/>+https://docs.ceph.com/en/latest/cephfs/quota/]] xfs/ext4なら uid/gid/project とかでそのファイルし済む全体を容量制限できるけど、cephは無理. 特定のフォルダ配下の容量制限、ファイル数制限ができるだけみたい. 「/emfs/user/ABC」に10TiBの制限を掛けたければ「setfattr -n ceph.quota.max_bytes -v 10Ti /emfs/user/ABC」で適用される。 解除はサイズを0にする。「setfattr -n ceph.quota.max_bytes -v 0 /emfs/user/ABC」 ファイル数はceph.quota.max_bytes の代わりに ceph.quota.max_files を適用します ***cephを停止して、再開したらワーニングが出た [#j7d2c0d8] 様々なワーニングが発生するかと思いますが、基本dashboardに対処が表示される デーモンが起動してなくて起こるワーニング #code(nonumber){{ [root@ceph01 ~]# ceph health detail HEALTH_WARN 3 failed cephadm daemon(s); insufficient standby MDS daemons available [WRN] CEPHADM_FAILED_DAEMON: 3 failed cephadm daemon(s) daemon mgr.ceph01.ocyoth on ceph01 is in error state daemon ceph-exporter.ceph01 on ceph01 is in error state daemon mds.emfs.ceph01.etimbe on ceph01 is in error state [WRN] MDS_INSUFFICIENT_STANDBY: insufficient standby MDS daemons available have 0; want 1 more [root@ceph01 ~]# ceph -s : health: HEALTH_WARN 3 failed cephadm daemon(s) insufficient standby MDS daemons available : [root@ceph01 ~]# }} この場合はceph health detailのデーモンを起動せよとdashboardに記載されてるので下記を実施 #code(nonumber){{ [root@ceph01 ~]# ceph orch daemon start mgr.ceph01.ocyoth [root@ceph01 ~]# ceph orch daemon start ceph-exporter.ceph01 [root@ceph01 ~]# ceph orch daemon start mds.emfs.ceph01.etimbe }} で対処 ***定義されているパラメータ [#ce291982] #code(nonumber){{ [root@ceph01 ~]# ceph config dump WHO MASK LEVEL OPTION VALUE RO global advanced cluster_network 10.10.10.0/24 * global basic container_image quay.io/ceph/ceph@sha256:41d3f5e46ff7de28544cc8869fdea13fca824dcef83936cb3288ed9de935e4de * mon advanced auth_allow_insecure_global_id_reclaim false mon advanced mon_allow_pool_delete true mon advanced public_network 192.168.0.0/24 * mgr advanced mgr/cephadm/container_init True * mgr advanced mgr/cephadm/migration_current 7 * mgr advanced mgr/dashboard/ALERTMANAGER_API_HOST http://ceph01.sybyl.local:9093 * mgr advanced mgr/dashboard/GRAFANA_API_SSL_VERIFY false * mgr advanced mgr/dashboard/GRAFANA_API_URL https://ceph01.sybyl.local:3000 * mgr advanced mgr/dashboard/PROMETHEUS_API_HOST http://ceph01.sybyl.local:9095 * mgr advanced mgr/dashboard/ssl_server_port 8443 * mgr advanced mgr/orchestrator/orchestrator cephadm osd host:ceph-osd1 basic osd_memory_target 1237406515 osd host:ceph-osd2 basic osd_memory_target 1182852573 osd host:ceph-osd3 basic osd_memory_target 1182775159 osd advanced osd_memory_target_autotune true osd.0 basic osd_mclock_max_capacity_iops_ssd 17326.774918 osd.1 basic osd_mclock_max_capacity_iops_ssd 17013.178805 osd.6 basic osd_mclock_max_capacity_iops_ssd 11841.277433 mds.emfs basic mds_join_fs emfs [root@ceph01 ~]# [root@ceph01 ~]# ceph config get osd osd_op_num_shards_hdd 1 [root@ceph01 ~]# ceph config get osd osd_op_num_threads_per_shard_hdd 5 [root@ceph01 ~]# }} ***osdのHHDのキャッシュを停止する [#mba10185] [[https://docs.ceph.com/en/reef/start/hardware-recommendations/#write-caches>+https://docs.ceph.com/en/reef/start/hardware-recommendations/#write-caches]] #code(nonumber){{ dnf install smartmontools hdparm hdparm -W0 /dev/sda <-- 書き込み (揮発性) キャッシュを無効にして echo "write through" > /sys/class/scsi_disk/0\:0\:0\:0/cache_type <-- ライトスルー にする }} 「hdparm -W0 /dev/sda」で書き込みキャッシュは無効になるが、「wite back」のままである. なので直接「write through」に変更させる ***osdのDBサイズを確認する [#xceaa92d] ノードに入ってcephadmを入れる #code(nonumber){{ [root@ceph-osd1 ~]# dnf install centos-release-ceph-squid.noarch -y [root@ceph-osd1 ~]# dnf install cephadm python3-jinja2 python3-pyyaml -y [root@ceph-osd1 ~]# cephadm shell [ceph: root@ceph-osd1 /]# ceph daemon osd.0 perf dump | jq .'bluefs' { "db_total_bytes": 53682888704, "db_used_bytes": 27656192, "wal_total_bytes": 0, "wal_used_bytes": 0, "slow_total_bytes": 0, "slow_used_bytes": 0, : [ceph: root@ceph-osd1 /]# }} ***windowsと接続 [#hb324811] 基本[[Ceph/windows]]でいいのかなと思いますが、sambaで提供することで認証が組める. この辺が楽かなと思えます. っでここでは[[Ceph/cephadm]]で mgr を担っている ceph01 にsmbを話させてみた. クライアント接続に既に用意した「client.emfs」を外だしします #code(nonumber){{ [root@ceph01 ~]# ceph auth get client.emfs | tee /etc/ceph/ceph.client.emfs.keyring [client.emfs] key = AQDTBbJnouWUBxAAhy6T8A6w8nTxcqDZrAaUhA== caps mds = "allow rwp fsname=emfs" caps mon = "allow r fsname=emfs" caps osd = "allow rw tag cephfs data=emfs" [root@ceph01 ~]# ls -l /etc/ceph/ total 20 -rw-------. 1 root root 151 Feb 17 01:50 ceph.client.admin.keyring -rw-r--r--. 1 root root 176 Feb 19 00:56 ceph.client.emfs.keyring -rw-r--r--. 1 root root 271 Feb 17 01:50 ceph.conf -rw-r--r--. 1 root root 595 Feb 15 04:54 ceph.pub -rw-r--r--. 1 root root 92 Feb 7 23:15 rbdmap [root@ceph01 ~]# }} その上で #code(nonumber){{ [root@ceph01 ~]# mount -t ceph emfs@.emfs=/ /emfs [root@ceph01 ~]# df -Tht ceph Filesystem Type Size Used Avail Use% Mounted on emfs@4ce725c6-eb0d-11ef-980a-bc24112ffd94.emfs=/ ceph 254G 0 254G 0% /emfs [root@ceph01 ~]# }} あとはsmbを入れて #code(nonumber){{ [root@ceph01 ~]# dnf install samba [root@ceph01 ~]# vi /etc/samba/smb.conf [global] workgroup = SAMBA security = user passdb backend = tdbsam [emfs] path = /emfs browseable = yes read only = No inherit acls = Yes [root@ceph01 ~]# systemctl enable smb --now [root@ceph01 ~]# firewall-cmd --add-service=samba --zone=public --permanent [root@ceph01 ~]# firewall-cmd --reload (selinuxが有効なら) [root@ceph01 ~]# dnf install policycoreutils-python-utils [root@ceph01 ~]# semanage fcontext -a -t samba_share_t "/emfs" [root@ceph01 ~]# restorecon -R -v /emfs (aclを付与して使えるようにします) [root@ceph01 ~]# setfacl -m user:saber:rwx /emfs [root@ceph01 ~]# setfacl -dm user:saber:rwx /emfs }} ***OSDのHDDが怪しい..事前交換する(cephadmの場合) [#la51bb96] smartの値とかで微妙なHDDが存在したとする. これを抜き取ってより健全なHDDに置き換える. そんなお話. まず微妙はHDDをoutにします #code(nonumber){{ [root@ceph01 ~]# ceph osd out osd.3 marked out osd.3. [root@ceph01 ~]# (暫くして) [root@ceph01 ~]# ceph osd safe-to-destroy osd.3 OSD(s) 3 are safe to destroy without reducing data durability. [root@ceph01 ~]# ceph osd tree : 2 hdd 0.04880 osd.2 up 1.00000 1.00000 3 hdd 0.04880 osd.3 up 0 1.00000 <- REWEIGHT 値が0になる : [root@ceph01 ~]# }} とosd.3を外しても問題ないと確認してから、osd.3を外してdaemonを停止させます(コンテナですが) #code(nonumber){{ [root@ceph01 ~]# ceph osd out osd.3 osd.3 is already out. [root@ceph01 ~]# ceph orch daemon stop osd.3 Scheduled to stop osd.3 on host 'ceph-osd2' (osd.3を持つceph-osd2では) [root@ceph-osd2 ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES : 8021d6fd6825 quay.io/ceph/ceph@sha256:41d3f5e46ff7de28544cc8869fdea13fca824dcef83936cb3288ed9de935e4de -n osd.2 -f --set... 15 hours ago Up 15 hours ceph-4ce725c6-eb0d-11ef-980a-bc24112ffd94-osd-2 20fd50080cdc quay.io/ceph/ceph@sha256:41d3f5e46ff7de28544cc8869fdea13fca824dcef83936cb3288ed9de935e4de -n osd.3 -f --set... 15 hours ago Up 15 hours ceph-4ce725c6-eb0d-11ef-980a-bc24112ffd94-osd-3 <--このコンテナが消えます 28137df48c7e quay.io/ceph/ceph@sha256:41d3f5e46ff7de28544cc8869fdea13fca824dcef83936cb3288ed9de935e4de -n osd.7 -f --set... 15 hours ago Up 15 hours ceph-4ce725c6-eb0d-11ef-980a-bc24112ffd94-osd-7 ↓ 8021d6fd6825 quay.io/ceph/ceph@sha256:41d3f5e46ff7de28544cc8869fdea13fca824dcef83936cb3288ed9de935e4de -n osd.2 -f --set... 15 hours ago Up 15 hours ceph-4ce725c6-eb0d-11ef-980a-bc24112ffd94-osd-2 28137df48c7e quay.io/ceph/ceph@sha256:41d3f5e46ff7de28544cc8869fdea13fca824dcef83936cb3288ed9de935e4de -n osd.7 -f --set... 15 hours ago Up 15 hours ceph-4ce725c6-eb0d-11ef-980a-bc24112ffd94-osd-7 [root@ceph-osd2 ~]# }} そうしてceph-osd2で抜き取ったHDDと同じ場所に新しいHDDを植える場合は「--replace」を用いる #code(nonumber){{ [root@ceph01 ~]# ceph orch osd rm osd.3 --replace [root@ceph01 ~]# ceph orch osd rm status No OSD remove/replace operations reported [root@ceph01 ~]# ceph device ls-lights <-- HDDスロットのランプが使えるか、確認 [root@ceph01 ~]# ceph device ls <-- HDDのデバイス一覧 }} 物理的にHDDを交換して #code(nonumber){{ [root@ceph01 ~]# ceph orch daemon add osd ceph-osd2:/dev/sdb }} ***OSDのHDDが飛んだ..(cephadmの場合) [#q063336c] 検証環境は Proxmox です. OSDのホスト ceph-osd3 のHDD(data) を1つ外して再起動させた. 当然ながら #code(nonumber){{ [root@ceph01 ~]# ceph -s cluster: id: 4ce725c6-eb0d-11ef-980a-bc24112ffd94 health: HEALTH_WARN 1 failed cephadm daemon(s) services: mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 2h) mgr: ceph01.ocyoth(active, since 2h), standbys: ceph02.uuiyno mds: 1/1 daemons up, 1 standby osd: 8 osds: 7 up (since 35m), 7 in (since 26m) data: volumes: 1/1 healthy pools: 3 pools, 66 pgs objects: 24 objects, 587 KiB usage: 604 MiB used, 349 GiB / 350 GiB avail pgs: 66 active+clean [root@ceph01 ~]# }} と警告になる. どこか問題なのかは #code(nonumber){{ [root@ceph01 ~]# ceph osd tree down ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.39038 root default -7 0.14639 host ceph-osd3 1 hdd 0.04880 osd.1 down 0 1.00000 [root@ceph01 ~]# ceph orch ps --service_name osd --sort_by status NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID osd.1 ceph-osd3 error 5m ago 41h - 1128M <unknown> <unknown> <unknown> osd.4 ceph-osd1 running (2h) 5m ago 43h 62.1M 1180M 19.2.1 f2efb0401a30 24a40935de09 osd.6 ceph-osd1 running (2h) 5m ago 40h 53.5M 1180M 19.2.1 f2efb0401a30 d4c35e3b2434 : [root@ceph01 ~]# }} で見れて、ceph-osd3の osd.1 が問題と. このHDDを交換してみる. まずは交換対象の osd.1 のデータが他に回るように手配します #code(nonumber){{ [root@ceph01 ~]# ceph osd out 1 osd.1 is already out. [root@ceph01 ~]# }} と既に他に回っているようなので停止させ、HDD交換手続きを行う. #code(nonumber){{ [root@ceph01 ~]# ceph orch daemon stop osd.1 Scheduled to stop osd.1 on host 'ceph-osd3' [root@ceph01 ~]# ceph orch osd rm 1 --replace Scheduled OSD(s) for removal. VG/LV for the OSDs won't be zapped (--zap wasn't passed). Run the `ceph-volume lvm zap` command with `--destroy` against the VG/LV if you want them to be destroyed. [root@ceph01 ~]# }} &color(red){*}; 注意: block.dbやwalを使ってosdを構成していて osd を外すと block.db と wal 領域も消えます. なので交換したHDDを組み込むには block.db 、wal 領域を再作成して構築する必要があります. 実体としてHDDを交換して #code(nonumber){{ [root@ceph-osd3 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS (略 mqceph--465e1cab--73d2--4083--95ff--b33bed556c53-osd--block--72c87975--6920--4a7f--8a6b--4b594a4bb62c 253:0 0 50G 0 lvm sdc 8:32 0 50G 0 disk mqceph--19239b39--3cd8--4024--91f5--f42239c0e257-osd--block--1951d075--b65d--4c2e--a4a2--fe393621a0f3 253:1 0 50G 0 lvm sdd 8:48 0 50G 0 disk <-- 交換したHDD [root@ceph-osd3 ~]# (block.dbとwalを作り直す) lvcreate -n sdc-db -l 100%FREE ceph-66205364-530c-4132-a1b7-f8b9f00194d1 lvcreate -n sdc-wal -l 100%FREE ceph その上で ceph orch daemon add osd ceph-osd3:/dev/sdc,db_devices=/dev/mapper/ceph--66205364--530c--4132--a1b7--f8b9f00194d1-sdc--db,wal_devices=/dev/ceph/sdc-wal }} ここでは追加した /dev/sdd をcephに加える #code(nonumber){{ [root@ceph01 ~]# ceph orch daemon add osd ceph-osd3:/dev/sdd [root@ceph01 ~]# ceph osd tree : -7 0.14639 host ceph-osd3 0 hdd 0.04880 osd.0 up 1.00000 1.00000 1 hdd 0.04880 osd.1 destroyed 0 1.00000 5 ssd 0.04880 osd.5 up 1.00000 1.00000 [root@ceph01 ~]# (暫くすると) [root@ceph01 ~]# ceph osd tree : -7 0.14639 host ceph-osd3 0 hdd 0.04880 osd.0 up 1.00000 1.00000 1 hdd 0.04880 osd.1 up 1.00000 1.00000 5 ssd 0.04880 osd.5 up 1.00000 1.00000 [root@ceph01 ~]# }} と回復する. ***ceph接続 clientパッケージを作る [#z560055c] Squid(19.x)のrockylinux8向けパッケージが用意されていない. なので作ってみた. #code(nonumber){{ [root@rockylinux8 ~]# cat /etc/redhat-release Rocky Linux release 8.10 (Green Obsidian) [root@rockylinux8 ~]# dnf install epel-release -y [root@rockylinux8 ~]# dnf --enablerepo=devel install CUnit-devel cmake cryptsetup-devel expat-devel fmt-devel fuse-devel gperf gperftools-devel json-devel \ libaio-devel libatomic libbabeltrace-devel libblkid-devel libcap-devel libcap-ng-devel libcurl-devel libevent-devel libibverbs-devel \ libicu-devel libnl3-devel liboath-devel librabbitmq-devel librdkafka-devel librdmacm-devel libxml2-devel lmdb-devel lttng-ust-devel \ lua-devel lz4-devel nasm ncurses-devel ninja-build nss-devel openldap-devel perl python3-Cython python3-devel python3-prettytable \ python3-sphinx re2-devel selinux-policy-devel snappy-devel sqlite-devel thrift-devel xfsprogs-devel xmlstarlet yaml-cpp-devel \ gcc-toolset-11 gcc-toolset-11-build gcc-toolset-11-gcc-c++ gcc-toolset-11-libatomic-devel systemd-devel -y [root@rockylinux8 ~]# dnf install -y python3-jenkins [root@rockylinux8 ~]# wget https://download.ceph.com/rpm-squid/el9/SRPMS/ceph-19.2.1-0.el9.src.rpm [root@rockylinux8 ~]# rpmbuild --rebuild ceph-19.2.1-0.el9.src.rpm : (紅茶とケーキの時間) : [root@rockylinux8 ~]# }} 構築が終わったらceph-commonを入れます. 関連パッケージが沢山つきますが、ceph-commonが入ればいいです. &size(10){下記の実行で「/usr/bin/ceph」「/usr/sbin/mount.ceph」がインストールされます}; #code(nonumber){{ [root@rockylinux8 ~]# cd rpmbuild/RPMS/x86_64 [root@rockylinux8 x86_64]# dnf localinstall \ ceph-common-19.2.1-0.el8.x86_64.rpm \ python3-ceph-argparse-19.2.1-0.el8.x86_64.rpm \ python3-ceph-common-19.2.1-0.el8.x86_64.rpm \ python3-cephfs-19.2.1-0.el8.x86_64.rpm \ python3-rados-19.2.1-0.el8.x86_64.rpm \ python3-rbd-19.2.1-0.el8.x86_64.rpm \ python3-rgw-19.2.1-0.el8.x86_64.rpm \ libcephfs2-19.2.1-0.el8.x86_64.rpm \ librados2-19.2.1-0.el8.x86_64.rpm \ libradosstriper1-19.2.1-0.el8.x86_64.rpm \ librbd1-19.2.1-0.el8.x86_64.rpm \ librgw2-19.2.1-0.el8.x86_64.rpm [root@rockylinux8 x86_64]# }} ***ファイルシステムの削除 [#q8fb9245] 現状確認、「ceph fs ls」でファイルシステム名称と使用しているpool(データとメタ)が判明する #code(nonumber){{ [root@ceph01 ~]# ceph fs ls name: emfs, metadata pool: emfs-meta, data pools: [emfs-data ] [root@ceph01 ~]# ceph fs status emfs - 0 clients ==== RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS 0 active cephfs.ceph-osd2.tjxksw Reqs: 0 /s 10 13 12 0 POOL TYPE USED AVAIL emfs-meta metadata 96.0k 47.4G emfs-data data 0 252G STANDBY MDS cephfs.ceph01.ejtdsq MDS version: ceph version 19.2.1 (58a7fab8be0a062d730ad7da874972fd3fba59fb) squid (stable) [root@ceph01 ~]# }} STATEが「active」となっている。停止にはまず #code(nonumber){{ [root@ceph01 ~]# ceph fs set emfs down true emfs marked down. [root@ceph01 ~]# ceph fs status emfs - 0 clients ==== POOL TYPE USED AVAIL emfs-meta metadata 96.0k 47.4G emfs-data data 0 252G STANDBY MDS cephfs.ceph01.ejtdsq cephfs.ceph-osd2.tjxksw MDS version: ceph version 19.2.1 (58a7fab8be0a062d730ad7da874972fd3fba59fb) squid (stable) [root@ceph01 ~]# ceph fs rm emfs --yes-i-really-mean-it }} と停止させる. っがまだmdsが残っているのでこれも削除/停止させます #code(nonumber){{ [root@ceph01 ~]# ceph orch ps --daemon_type=mds NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID mds.emfs.ceph01.magcmf ceph01 running (9m) 4m ago 9m 14.8M - 19.2.1 f2efb0401a30 53d4887fd871 mds.emfs.ceph02.nuleix ceph02 running (9m) 9m ago 9m 15.3M - 19.2.1 f2efb0401a30 0808d4835824 [root@ceph01 ~]# ceph orch rm mds.emfs [root@ceph01 ~]# ceph orch ps --daemon_type=mds No daemons reported [root@ceph01 ~]# }} これで削除は完了です. ***cephadmで既に割り当てている サービスLAN 側のipアドレスを変更したい [#d77460b3] &color(red){未完成}; [[https://heiterbiswolkig.blogs.nde.ag/2020/12/18/cephadm-changing-a-monitors-ip-address/>+https://heiterbiswolkig.blogs.nde.ag/2020/12/18/cephadm-changing-a-monitors-ip-address/]] 具体的には |BGCOLOR(YELLOW):ホスト名|BGCOLOR(YELLOW):役目|BGCOLOR(YELLOW):IPアドレス|BGCOLOR(YELLOW):backend|BGCOLOR(YELLOW):OS|BGCOLOR(YELLOW):ストレージ|BGCOLOR(YELLOW):CPU threads| |ceph01 |&color(crimson){Ceph Manager}; &br;&color(limegreen){Ceph Metadata Server}; &br;&color(magenta){Ceph Monitor};|192.168.0.47/24&br; -> &color(purple){''172.16.0.1''};| 10.10.10.47/24 |Rockylinux9.4|system(16GB) &br; /var/lib/ceph(8GB,monitor) |8 threads(monitor:4+metadata:2+manager:1+ ほか)| |ceph02 |&color(crimson){Ceph Manager}; &br;&color(limegreen){Ceph Metadata Server}; &br;&color(magenta){Ceph Monitor};|192.168.0.48/24&br; -> &color(purple){''172.16.0.2''};| 10.10.10.48/24 |~|system(16GB) &br; /var/lib/ceph(8GB,monitor) |8 threads(monitor:4+metadata:2+manager:1+ ほか)| |ceph-osd1 |&color(orangered){Ceph OSDs}; &br;&color(magenta){Ceph Monitor};|192.168.0.49/24&br; -> &color(purple){''172.16.0.3''};| 10.10.10.49/24 |~|system(24GB: os[16GB]+wal[8GB]) &br; /var/lib/ceph(8GB,monitor) &br; block.db(16GB) &br; OSD(50GB)|6 threads(moitor:4t+osd:2)| |ceph-osd2 |&color(orangered){Ceph OSDs}; |192.168.0.50/24&br; -> &color(purple){''172.16.0.4''};| 10.10.10.50/24 |~|system(16GB) &br; block.db(32GB) &br; OSD(50GB)+OSD(50GB) |4 threads(OSD:2+OSD:2)| |ceph-osd3 |&color(orangered){Ceph OSDs}; |192.168.0.51/24&br; -> &color(purple){''172.16.0.5''};| 10.10.10.51/24 |~|system(16GB) &br; OSD(50GB)+OSD(50GB)| 4 threads(OSD:2+OSD:2)| ってな感じに. #code(nonumber){{ [root@ceph01 ~]# ceph osd set noout [root@ceph01 ~]# ceph osd set norecover [root@ceph01 ~]# ceph osd set norebalance [root@ceph01 ~]# ceph osd set nobackfill [root@ceph01 ~]# ceph osd set nodown [root@ceph01 ~]# ceph osd set pause }} #code(nonumber){{ [root@ceph-osd3 ~]# systemctl stop ceph.target [root@ceph-osd3 ~]# systemctl disable ceph.target [root@ceph-osd2 ~]# systemctl stop ceph.target [root@ceph-osd2 ~]# systemctl disable ceph.target [root@ceph-osd1 ~]# systemctl stop ceph.target [root@ceph-osd1 ~]# systemctl disable ceph.target [root@ceph02 ~]# systemctl stop ceph.target [root@ceph02 ~]# systemctl disable ceph.target [root@ceph01 ~]# systemctl stop ceph.target [root@ceph01 ~]# systemctl disable ceph.target }} この後、各ノードをshutdownして移設して新規ネットワーク(172.16.0.0/24)に繋げて dns/ntpを調整します. っでup. ***コンテナ毎にcpu数を定義するには [#xbe5f00e] [[https://docs.ceph.com/en/reef/cephadm/services/#extra-container-arguments>+https://docs.ceph.com/en/reef/cephadm/services/#extra-container-arguments]] キーワード:cephadm osd "extra_container_args" cpus ***メモ [#a1496024] #code(nonumber){{ [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 osd lspools 1 .mgr [root@ceph01 ~]# ceph config set mon mon_allow_pool_delete true [root@ceph01 ~]# ceph osd pool delete .mgr .mgr --yes-i-really-really-mean-it [root@ceph01 ~]# ceph osd tree [root@ceph01 ~]# ceph orch osd rm 4 --zap --force [root@ceph01 ~]# ceph orch osd rm status (OSD 状態の監視) [root@ceph01 ~]# ceph orch ps (cephで動いているcontainerの全部) [root@ceph01 ~]# ceph orch host drain ceph-osd3 (cephから ceph-osd3 の container を削除) [root@ceph01 ~]# ceph orch ps ceph-osd3 (containerがあるか確認) [root@ceph01 ~]# ceph orch host rm ceph-osd3 (ceph-osd3 の削除) [root@ceph01 ~]# ceph orch host drain ceph-osd2 [root@ceph01 ~]# ceph orch ps ceph-osd2 [root@ceph01 ~]# ceph orch host rm ceph-osd2 [root@ceph01 ~]# ceph orch apply mon --placement="ceph01" --dry-run [root@ceph01 ~]# ceph orch apply mon --placement="ceph01" (monをceph01のみに変更) [root@ceph01 ~]# ceph orch host drain ceph-osd1 [root@ceph01 ~]# ceph orch ps ceph-osd1 [root@ceph01 ~]# ceph orch host rm ceph-osd1 [root@ceph01 ~]# ceph orch apply mgr --placement="ceph01" [root@ceph01 ~]# ceph orch host drain ceph02 [root@ceph01 ~]# ceph orch daemon rm mon.ceph02 --force [root@ceph01 ~]# ceph orch host rm ceph02 }} 「cephadm bootstrap」の後に取り消して無効にするには #code(nonumber){{ [root@ceph01 ~]# systemctl list-unit-files |grep ceph var-lib-ceph.mount generated - ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94@.service indirect disabled ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94.target enabled disabled ceph.target enabled disabled [root@ceph01 ~]# systemctl disable ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94@.service ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94.target ceph.target [root@ceph01 ~]# reboot [root@ceph01 ~]# ls -l /etc/systemd/system/ceph* -rw-r--r--. 1 root root 1181 Feb 9 14:51 /etc/systemd/system/ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94@.service -rw-r--r--. 1 root root 157 Feb 9 14:51 /etc/systemd/system/ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94.target -rw-r--r--. 1 root root 88 Feb 9 15:18 /etc/systemd/system/ceph.target [root@ceph01 ~]# rm -rf /etc/systemd/system/ceph* [root@ceph01 ~]# rm -rf /var/lib/ceph/* /etc/ceph/* }} これで「cephadm bootstrap」がチャラになります. ***コンテナ毎にcpu数を定義するには [#xbe5f00e] [[https://docs.ceph.com/en/reef/cephadm/services/#extra-container-arguments>+https://docs.ceph.com/en/reef/cephadm/services/#extra-container-arguments]] キーワード:cephadm osd "extra_container_args" cpus ***メモ [#a1496024] #code(nonumber){{ [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 osd lspools 1 .mgr [root@ceph01 ~]# ceph config set mon mon_allow_pool_delete true [root@ceph01 ~]# ceph osd pool delete .mgr .mgr --yes-i-really-really-mean-it [root@ceph01 ~]# ceph osd tree [root@ceph01 ~]# ceph orch osd rm 4 --zap --force [root@ceph01 ~]# ceph orch osd rm status (OSD 状態の監視) [root@ceph01 ~]# ceph orch ps (cephで動いているcontainerの全部) [root@ceph01 ~]# ceph orch host drain ceph-osd3 (cephから ceph-osd3 の container を削除) [root@ceph01 ~]# ceph orch ps ceph-osd3 (containerがあるか確認) [root@ceph01 ~]# ceph orch host rm ceph-osd3 (ceph-osd3 の削除) [root@ceph01 ~]# ceph orch host drain ceph-osd2 [root@ceph01 ~]# ceph orch ps ceph-osd2 [root@ceph01 ~]# ceph orch host rm ceph-osd2 [root@ceph01 ~]# ceph orch apply mon --placement="ceph01" --dry-run [root@ceph01 ~]# ceph orch apply mon --placement="ceph01" (monをceph01のみに変更) [root@ceph01 ~]# ceph orch host drain ceph-osd1 [root@ceph01 ~]# ceph orch ps ceph-osd1 [root@ceph01 ~]# ceph orch host rm ceph-osd1 [root@ceph01 ~]# ceph orch apply mgr --placement="ceph01" [root@ceph01 ~]# ceph orch host drain ceph02 [root@ceph01 ~]# ceph orch daemon rm mon.ceph02 --force [root@ceph01 ~]# ceph orch host rm ceph02 }} 「cephadm bootstrap」の後に取り消して無効にするには #code(nonumber){{ [root@ceph01 ~]# systemctl list-unit-files |grep ceph var-lib-ceph.mount generated - ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94@.service indirect disabled ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94.target enabled disabled ceph.target enabled disabled [root@ceph01 ~]# systemctl disable ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94@.service ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94.target ceph.target [root@ceph01 ~]# reboot [root@ceph01 ~]# ls -l /etc/systemd/system/ceph* -rw-r--r--. 1 root root 1181 Feb 9 14:51 /etc/systemd/system/ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94@.service -rw-r--r--. 1 root root 157 Feb 9 14:51 /etc/systemd/system/ceph-9ab38ad2-e6a9-11ef-9ba5-bc24112ffd94.target -rw-r--r--. 1 root root 88 Feb 9 15:18 /etc/systemd/system/ceph.target [root@ceph01 ~]# rm -rf /etc/systemd/system/ceph* [root@ceph01 ~]# rm -rf /var/lib/ceph/* /etc/ceph/* }} これで「cephadm bootstrap」がチャラになります. ***参照先 [#eb80e745] [[https://yourcmc.ru/wiki/Ceph_performance>+https://yourcmc.ru/wiki/Ceph_performance]] SSDなフラッシュストレージを作るなら、コンシューマー向けのSSDではなくデータセンター向けのSSDを使うべきみたい. &size(10){HDDがdataで、blockdb/walがコンシューマーなSSDでもいいとは書いていないけど、トランザクション云々からSSDをdataにした場合かなと思っている}; [[https://qiita.com/rev4t/items/0f5af561d8621c957bc3>+https://qiita.com/rev4t/items/0f5af561d8621c957bc3]]