Ceph:關(guān)于 Ceph 存儲架構(gòu)的一些筆記

Part1Ceph 存儲架構(gòu)
Ceph 集群搭建使用標(biāo)準(zhǔn)硬件和存儲設(shè)備的服務(wù)器,是一個高度可擴(kuò)展的分布式存儲系統(tǒng), 采用模塊化分布式架構(gòu)。Ceph 主要通過 RADOS 核心組件來提供能力。

RADOS 是 Ceph 的底層對象存儲服務(wù),由 OSD 守護(hù)進(jìn)程組成,而 Ceph 集群中的其他組件如 MON、MDS 和 RGW 等也都是守護(hù)進(jìn)程,各自扮演著不同的角色和功能。OSD 進(jìn)程是 Ceph 存儲集群中的核心組件之一,負(fù)責(zé)將數(shù)據(jù)分散存儲在多個節(jié)點(diǎn)和磁盤上,并提供高可用性、容錯性和可靠性等特性。

RADOS(Reliable Autonomic Distributed Object Store) :可靠的自主分布式對象存儲,RADOS 是一種 自我修復(fù)、自我管理 的軟件型對象存儲,  Ceph 也同時支持塊存儲,和文件存儲,這里實(shí)際上是在對象存儲的基礎(chǔ)上封裝了一層,提供塊存儲和文件存儲的能力。

2Ceph 存儲核心組件
Ceph集群的核心組件主要包括:

MON (Monitor Daemon) : 集群監(jiān)控, 守護(hù)進(jìn)程,MON 負(fù)責(zé)監(jiān)控 Ceph 集群的狀態(tài)、配置和拓?fù)浣Y(jié)構(gòu),并將這些信息保存在 Ceph Monitor 數(shù)據(jù)庫(Store)中。Ceph 集群至少需要三個 MON 進(jìn)程來保證高可用性。在集群中可以配置不同的選舉方式。
OSD (Object Storage Daemon): 對象存儲設(shè)備,守護(hù)進(jìn)程,存儲數(shù)據(jù)并處理數(shù)據(jù)復(fù)制、恢復(fù)和重新平衡,
MGR (Managers,ceph-mgr): 管理器(非必須),守護(hù)進(jìn)程,通過基于瀏覽器的儀表板和 REST API,跟蹤運(yùn)行時指標(biāo)并公開集群信息
MDS (Metadata Servers): 元數(shù)據(jù)服務(wù)器,守護(hù)進(jìn)程,存儲供 CephFS 使用的元數(shù)據(jù)(而非對象存儲或塊存儲),讓客戶端能夠高效執(zhí)行 POSIX 命令。CephFS是基于 RADOS 實(shí)現(xiàn)的分布式文件系統(tǒng),可提供與傳統(tǒng)文件系統(tǒng)類似的功能。
RGW(RADOS Gateway) :RADOS 網(wǎng)關(guān),守護(hù)進(jìn)程,RGW 是一個 REST 接口,使得客戶端可以通過 HTTP 或 S3 協(xié)議來訪問 Ceph 存儲集群中的對象。RGW 可以將 Ceph 集群中的對象作為 Web 資源來公開,從而實(shí)現(xiàn)與 Amazon S3 兼容的對象存儲服務(wù)。
RBD(RADOS Block Device):Ceph 塊設(shè)備,將 Ceph 存儲集群的對象存儲能力暴露為塊設(shè)備,支持虛擬機(jī)和容器等應(yīng)用的塊存儲需求。
部分組件以守護(hù)進(jìn)程的方式運(yùn)行,可以以副本形式擴(kuò)展,以滿足部署的存儲集群的要求。

Ceph 監(jiān)控器 MON
Ceph 監(jiān)控器 (MON) 是維護(hù)集群映射主要副本的守護(hù)進(jìn)程,是用于監(jiān)控和管理集群狀態(tài)、拓?fù)浣Y(jié)構(gòu)和配置信息的組件之一。MON 組件通常由多個進(jìn)程組成,以提高可用性和容錯性。

集群映射(Cluster Map)是指將 Ceph 集群中的各個組件(如 OSD、MON、MDS、RGW 等)映射到實(shí)際的網(wǎng)絡(luò)地址和端口號的過程。Ceph 集群映射由五種不同的映射組成的集合,包括:OSD 映射集合/MON 映射集合/MDS 映射集合/RGW 映射集合/CRUSH 映射集合/

這五種映射集合共同構(gòu)成了 Ceph 集群映射,用于實(shí)現(xiàn)各個組件之間的通信和協(xié)作,并支持?jǐn)?shù)據(jù)的高可用性、可靠性和性能。

通過集群映射,客戶端和其他組件可以找到并連接正確的 OSD、MON、MDS、RGW 進(jìn)程,并使用 CRUSH 算法來計(jì)算數(shù)據(jù)位置和副本策略。

我理解,所謂集群映射,就是一個配置中心,用于維護(hù)各個組件映射K和具體配置。

Ceph 生產(chǎn)至少需要三臺機(jī)器,根據(jù)官方的 Ceph 文檔,建議在 Ceph 集群中至少使用三臺機(jī)器以確保數(shù)據(jù)冗余和可用性。但是,可以使用少于三臺機(jī)器運(yùn)行 Ceph 集群,但不建議在生產(chǎn)環(huán)境中這樣做。

在后端組件的基礎(chǔ)上多了 CRUSH映射, Ceph 必須處理每個集群事件,更新合適的映射,并將更新后的映射復(fù)制到每個監(jiān)控器守護(hù)進(jìn)程,若要應(yīng)用更新,MON 必須就集群狀態(tài) 建立共識。

這要求配置的監(jiān)控器中有多數(shù)可用且就映射更新達(dá)成共識,為 Ceph 集群配置奇數(shù)個監(jiān)控器,以確保監(jiān)控器能在就集群狀態(tài)投票時建立仲裁,配置的監(jiān)控器中必須有 超過半數(shù)正常發(fā)揮作用 ,Ceph 存儲集群才能運(yùn)行并可訪問,這是保護(hù)集群數(shù)據(jù)的完整性所必需的。

在 Ceph 集群運(yùn)行期間,MON 進(jìn)程需要相互通信并就下列事項(xiàng)達(dá)成共識:

集群狀態(tài):每個 MON 進(jìn)程都要了解 Ceph 集群的當(dāng)前狀態(tài),如 OSD 的在線狀態(tài)、PG 的映射關(guān)系、數(shù)據(jù)副本的位置等等。
健康狀況:每個 MON 進(jìn)程需要收集和匯總所有 OSD 和 PG 的健康報(bào)告,并根據(jù)報(bào)告指示的問題推斷出整個集群的健康狀況。
拓?fù)浣Y(jié)構(gòu):每個 MON 進(jìn)程需要知道 Ceph 集群的拓?fù)浣Y(jié)構(gòu),并為客戶端請求和數(shù)據(jù)復(fù)制提供正確的路由和路徑。
配置信息:每個 MON 進(jìn)程需要了解集群的配置信息,如 MON 和 OSD 的數(shù)量、PG 的數(shù)量和策略、CRUSH 映射規(guī)則等等。
因此,MON 必須就集群狀態(tài)建立共識,才能保證整個 Ceph 集群的正確運(yùn)行和數(shù)據(jù)的可靠存儲。如果 MON 無法建立共識,那么可能會導(dǎo)致數(shù)據(jù)丟失、訪問失敗、性能下降等問題。

Ceph 對象存儲設(shè)備 OSD
Ceph 對象存儲設(shè)備 (OSD) 是 Ceph 存儲集群的構(gòu)建塊,OSD 將存儲設(shè)備(如硬盤或其他塊設(shè)備)連接到 Ceph 存儲集群。

一臺存儲服務(wù)器可以運(yùn)行多個 OSD 守護(hù)進(jìn)程,并為集群提供多個 OSD,Ceph 舊版本要求 OSD 存儲設(shè)備具有底層文件系統(tǒng),但 BlueStore 以原始模式使用本地存儲設(shè)備,不在需要文件系統(tǒng),這有助于提升性能

Ceph 客戶端和 OSD 守護(hù)進(jìn)程都使用 可擴(kuò)展哈希下的受控復(fù)制 (CRUSH, Controlled Replication Under Scalable Hashing) 算法來高效地計(jì)算對象位置的信息,而不依賴中央服務(wù)器查找

在高層次上,CRUSH 算法通過使用分層樹結(jié)構(gòu)將數(shù)據(jù)對象映射到存儲設(shè)備上。樹是基于存儲設(shè)備的物理拓?fù)浣Y(jié)構(gòu)構(gòu)建的,樹中的每個節(jié)點(diǎn)表示一組設(shè)備(放置組PG)。然后,算法使用確定性函數(shù)將每個數(shù)據(jù)對象映射到樹中的葉節(jié)點(diǎn),該葉節(jié)點(diǎn)對應(yīng)于特定的存儲設(shè)備。

CRUSH 算法的一個關(guān)鍵優(yōu)點(diǎn)是它被設(shè)計(jì)為高度容錯。由于算法是確定性的,即使某些設(shè)備失敗,也可以重構(gòu)數(shù)據(jù)對象到存儲設(shè)備的映射。這使得即使在硬件故障的情況下,也可以保持?jǐn)?shù)據(jù)可用性

CRUSH (keruasi) 將每個對象分配給單個哈希存儲桶,稱為放置組 (PG),也就是上面我們講的樹的節(jié)點(diǎn)。

PG  是對象(應(yīng)用層)和 OSD(物理層)之間的抽象層,CRUSH 使用偽隨機(jī)放置算法在 PG 之間分布對象,并且使用規(guī)則來確定 PG 到 OSD 的映射。

出現(xiàn)故障時,Ceph 將 PG 重新映射到不同的物理設(shè)備 (OSD) ,并同步其內(nèi)容以匹配配置的數(shù)據(jù)保護(hù)規(guī)則,一個 OSD 是對象放置組的主要 OSD,Ceph 客戶端在讀取或?qū)懭霐?shù)據(jù)時始終聯(lián)系操作集合中的主要 OSD,其他 OSD 為次要 OSD,在確保集群故障時的數(shù)據(jù)彈性方面發(fā)揮重要作用

Primary OSD 的功能:

服務(wù)所有 I/O 請求
復(fù)制和保護(hù)數(shù)據(jù)
檢查數(shù)據(jù)的一致性
重新平衡數(shù)據(jù)
恢復(fù)數(shù)據(jù)
次要 OSD 的功能(備份):

行動始終受到 Primary OSD 的控制
能夠變?yōu)?Primary OSD
每個 OSD 具有自己的 OSD ?志。OSD 日志提供了對 OSD 實(shí)施寫操作的性能。

來自 Ceph 客戶端 的寫操作本質(zhì)上通常是隨機(jī)的 I/O,由 OSD 守護(hù)進(jìn)程順序?qū)懭氲饺罩局?。?dāng)涉及的所有 OSD 日志記錄了寫請求后,Ceph 將每個寫操作確認(rèn)到客戶端,OSD 然后將操作提交到其后備存儲。

每隔幾秒鐘,OSD 會停止向日志寫入新的請求,以將 OSD日志的內(nèi)容應(yīng)用到后備存儲,然后,它會修剪日志中的已提交請求,回收日志存儲設(shè)備上的空間

當(dāng) Ceph OSD 或其存儲服務(wù)器出現(xiàn)故障時,Ceph 會在 OSD 重新啟動后重演其日志,重演序列在最后一個已同步的操作后開始,因?yàn)?Ceph 已將同步的日志記錄提交到 OSD 的存儲,OSD日志使用OSD 節(jié)點(diǎn)上的原始卷,若有可能,應(yīng)在單獨(dú)的SSD等快速設(shè)備上配置日志存儲

要查看 Ceph 集群的 OSD(Object Storage Daemon)服務(wù)信息,可以使用 Ceph 自帶的命令行工具 ceph 命令。以下是一些常用的命令:

ceph osd tree:顯示 OSD 樹,即顯示每個 OSD 的編號、主機(jī)名、狀態(tài)、容量等信息,以及 CRUSH 算法對存儲設(shè)備的映射關(guān)系。
ceph osd df:顯示 OSD 的使用情況,包括總?cè)萘?、已用空間、可用空間等信息。
ceph osd pool ls:列出所有的 OSD 數(shù)據(jù)存儲池,包括數(shù)據(jù)存儲池名稱、ID 等信息。
ceph osd pool stats:顯示 OSD 數(shù)據(jù)存儲池的使用情況,包括存儲池大小、已用空間、剩余空間等。
ceph tell osd.* bench:對 OSD 進(jìn)行性能測試,以便評估 OSD 的性能和穩(wěn)定性。
ceph tell osd.* query:查詢所有 OSD 進(jìn)程的狀態(tài)和性能數(shù)據(jù),包括 IOPS、延遲等指標(biāo)。
RADOS 網(wǎng)關(guān) RGW
RADOS Gateway( RGW) 提供了 S3 和 Swift 接口兼容的對象存儲服務(wù),可以將 Ceph 存儲集群暴露為云存儲服務(wù)。RADOS Gateway 的作用如下:

對象存儲:RADOS Gateway 提供了基于 S3 和 Swift 接口兼容的對象存儲服務(wù),支持大規(guī)模、高并發(fā)的數(shù)據(jù)訪問和管理。用戶可以使用標(biāo)準(zhǔn)的 S3 或 Swift 客戶端庫進(jìn)行對象存儲。
數(shù)據(jù)訪問控制:RADOS Gateway 支持多種認(rèn)證和授權(quán)方式,可以對不同的用戶或應(yīng)用程序進(jìn)行權(quán)限控制,保障數(shù)據(jù)的安全性和隱私性。
數(shù)據(jù)可靠性:RADOS Gateway 使用 RADOS 集群作為底層存儲設(shè)備,具有高可靠性和高可用性,可以保障數(shù)據(jù)的持久性和可靠性。
多租戶支持:RADOS Gateway 支持多租戶功能,可以將一個 RGW 集群劃分為多個租戶,每個租戶擁有自己的存儲空間和訪問權(quán)限,可以避免資源的沖突和干擾。
彈性伸縮:RADOS Gateway 可以根據(jù)需求進(jìn)行水平擴(kuò)展和縮減,支持動態(tài)調(diào)整存儲容量和性能,具有高度的彈性和靈活性。
要查看 Ceph 集群的 RGW(RADOS Gateway)服務(wù)信息,可以使用 Ceph 自帶的命令行工具 radosgw-admin 命令。以下是一些常用的命令:

radosgw-admin user list:列出所有的 RGW 用戶,包括用戶 ID、顯示名稱等信息。
radosgw-admin bucket list:列出所有的 RGW 存儲桶,包括存儲桶名稱、擁有者等信息。
radosgw-admin quota get --uid=<user-id>:顯示指定用戶的配額信息,包括存儲空間配額、對象數(shù)配額等。
radosgw-admin policy list:列出所有的 RGW 策略,包括策略名稱、權(quán)限等信息。
radosgw-admin usage show:顯示集群的 RGW 使用情況,包括總請求數(shù)、總流量等信息。
radosgw-admin metadata list:列出集群中所有的 RGW 元數(shù)據(jù),包括實(shí)體 ID、實(shí)體類型、元數(shù)據(jù)鍵值對等信息。






Ceph 管理器 MGR
Ceph 管理器 (MGR) 提供一系列集群統(tǒng)計(jì)數(shù)據(jù),集群中不可用的管理器不會給 客戶端 I/O操作帶來負(fù)面影響。在這種情況下,嘗試查詢集群統(tǒng)計(jì)數(shù)據(jù)會失敗,可以在不同的故障域中部署至少兩個 Ceph 管理器提升可用性

管理器守護(hù)進(jìn)程將集群中收集的所有數(shù)據(jù)的訪問集中到一處,并通過 TCP 端? 7000(默認(rèn))向存儲管理員提供一個簡單的 Web 儀表板。

它還可以將狀態(tài)信息導(dǎo)出到外部 Zabbix 服務(wù)器,將性能信息導(dǎo)出到 Prometheus。Ceph 指標(biāo)是一種基于 collectd 和 grafana 的監(jiān)控解決方案,可補(bǔ)充默認(rèn)的儀表板

查看 Ceph 集群的 MGR(Manager)服務(wù)信息,可以使用 Ceph 自帶的命令行工具 ceph 命令。以下是一些常用的命令:

ceph mgr module ls:列出所有加載的 MGR 模塊,包括模塊名稱、狀態(tài)等信息。
ceph mgr module enable <module-name>:啟用指定的 MGR 模塊,以便進(jìn)行管理和監(jiān)控。
ceph mgr services:顯示所有的 MGR 服務(wù),包括進(jìn)程 ID、名稱、狀態(tài)等信息。
ceph daemon <mgr-id> perf dump:顯示指定 MGR 進(jìn)程的性能監(jiān)控信息,包括 CPU 使用率、內(nèi)存使用情況等。
元數(shù)據(jù)服務(wù)器 MDS
Ceph 元數(shù)據(jù)服務(wù)器(MDS)管理 Ceph 文件系統(tǒng)(CephFS)元數(shù)據(jù)。

它提供兼容 POSIX 的共享文件系統(tǒng)元數(shù)據(jù)管理,包括所有權(quán)、時間戳和模式。MDS 使用 RADOS 而非本地存儲來存儲其元數(shù)據(jù),它無法訪問文件內(nèi)容

MDS 可讓 CephFS 與 Ceph 對象存儲交互,將索引節(jié)點(diǎn)映射到對象,并在樹內(nèi)映射 Ceph 存儲數(shù)據(jù)的位置,訪問 CephFS 文件系統(tǒng)的客戶端首先向 MDS 發(fā)出請求,這會提供必要的信息以便從正確的 OSD 獲取文件內(nèi)容

查看 Ceph 集群的 MDS(Metadata Server)服務(wù)信息

ceph mds dump:顯示所有的 MDS 進(jìn)程的信息,包括 MDS 的 ID、名稱、狀態(tài)等。
ceph fs ls:列出所有的 CephFS 文件系統(tǒng),包括文件系統(tǒng) ID、名稱等信息。
ceph fs status:顯示 CephFS 文件系統(tǒng)的狀態(tài)和健康狀況,包括 MDS 的運(yùn)行狀態(tài)、文件系統(tǒng)的元數(shù)據(jù)池使用情況等信息。
ceph fs subvolumegroup ls:列出指定 CephFS 文件系統(tǒng)中的子卷組,包括子卷組 ID、名稱、使用情況等信息。
Ceph 塊設(shè)備 RBD
RBD 全稱為 RADOS Block Device,它將 Ceph 存儲集群的對象存儲能力暴露為塊設(shè)備,支持虛擬機(jī)和容器等應(yīng)用的塊存儲需求。RBD 的作用如下:

塊存儲:RBD 提供了塊存儲服務(wù),支持虛擬機(jī)和容器等應(yīng)用使用塊設(shè)備進(jìn)行數(shù)據(jù)存儲和訪問。
快照和克?。篟BD 支持塊設(shè)備的快照和克隆功能,可以對塊設(shè)備進(jìn)行備份和恢復(fù),以及基于現(xiàn)有塊設(shè)備創(chuàng)建新的塊設(shè)備。
多租戶支持:RBD 支持多租戶功能,可以將一個 RBD 集群劃分為多個租戶,每個租戶擁有自己的塊設(shè)備空間和訪問權(quán)限,可以避免資源的沖突和干擾。
彈性伸縮:RBD 可以根據(jù)需求進(jìn)行水平擴(kuò)展和縮減,支持動態(tài)調(diào)整存儲容量和性能,具有高度的彈性和靈活性。
要查看 Ceph 中 RBD 的服務(wù)信息,可以使用以下命令:

rbd ls:顯示所有的 RBD 塊設(shè)備,包括塊設(shè)備名稱、大小等信息。
rbd info <image>:顯示指定 RBD 塊設(shè)備的信息,包括塊設(shè)備 ID、大小、快照數(shù)等信息。
rbd snap ls <image>:列出指定 RBD 塊設(shè)備的所有快照,包括快照名稱、創(chuàng)建時間等信息。
rbd du:顯示 RBD 塊設(shè)備的使用情況,包括總使用容量、總可用容量等信息。
rbd map <image>:將指定的 RBD 塊設(shè)備映射為本地塊設(shè)備,以便進(jìn)行數(shù)據(jù)讀寫操作。
集群映射
Ceph 客戶端和對象存儲守護(hù)進(jìn)程 OSD 需要確認(rèn)集群拓?fù)?。五個映射表示集群拓?fù)洌y(tǒng)稱為集群映射。

Ceph 監(jiān)控器(Mon)守護(hù)進(jìn)程維護(hù)集群映射的主副本。Ceph MON 集群在監(jiān)控器守護(hù)進(jìn)程出現(xiàn)故障時確保高可用性

監(jiān)控器映射
包含集群 fsid、各個監(jiān)控器的位置、名稱、地址和端口,以及映射時間戳。

使用 ceph mon dump 來查看監(jiān)控器映射。fsid 是一種自動生成的唯?標(biāo)識符 (UUID),用于標(biāo)識 Ceph 集群

[ceph: root@serverc /]# ceph mon dump
epoch 5
fsid 4c759c0c-d869-11ed-bfcb-52540000fa0c
last_changed 2023-04-11T13:34:50.058049+0000
created 2023-04-11T13:03:51.482001+0000
min_mon_release 16 (pacific)
election_strategy: 1
0: [v2:172.25.250.12:3300/0,v1:172.25.250.12:6789/0] mon.serverc.lab.example.com
1: [v2:172.25.250.13:3300/0,v1:172.25.250.13:6789/0] mon.serverd
2: [v2:172.25.250.14:3300/0,v1:172.25.250.14:6789/0] mon.servere
dumped monmap epoch 5
[ceph: root@serverc /]#
epoch:監(jiān)視器映射的時代編號。
fsid:Ceph集群的唯一標(biāo)識符。
last_changed:修改監(jiān)視器映射的時間。
created:創(chuàng)建監(jiān)視器映射的時間。
min_mon_release:與監(jiān)視器映射兼容的最小Ceph版本。
election_strategy:監(jiān)視器用于選舉領(lǐng)導(dǎo)者的策略。Ceph監(jiān)視器的選舉策略有兩種:
classic:這是默認(rèn)的選舉策略,在此策略下,監(jiān)視器具有相同的投票權(quán),并根據(jù)周期性心跳和消息傳遞進(jìn)行通信。如果監(jiān)視器檢測到其他監(jiān)視器離線,則它們將在一段時間后進(jìn)入新的領(lǐng)導(dǎo)者選舉過程。
quorum:該策略要求至少三個監(jiān)視器在線,并從中選擇領(lǐng)導(dǎo)者,而不是所有在線監(jiān)視器都擁有相同的投票權(quán)。采用此策略時,如果沒有足夠的監(jiān)視器參與選舉,則集群將無法正常工作或處于只讀狀態(tài),直到更多的監(jiān)視器加入并恢復(fù)其大多數(shù)選舉能力。
0、1、2:集群中每個監(jiān)視器的排名和IP地址,以及它們的主機(jī)名。
dumped:表示已成功轉(zhuǎn)儲指定時代的監(jiān)視器映射。
OSD 映射
包含集群 fsid、池列表、副本大小、放置組編號、OSD 及其狀態(tài)的列表,以及映射時間戳。使用 ceph osd dump 查看 OSD 映射

[ceph: root@serverc /]# ceph osd dump
epoch 77
fsid 4c759c0c-d869-11ed-bfcb-52540000fa0c
created 2023-04-11T13:03:54.016381+0000
modified 2023-04-25T07:46:25.481881+0000
flags sortbitwise,recovery_deletes,purged_snapdirs,pglog_hardlimit
crush_version 24
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client luminous
min_compat_client jewel
require_osd_release pacific
stretch_mode_enabled false
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 74 flags hashpspool stripe_width 0 pg_num_min 1 application mgr_devicehealth
max_osd 9
osd.0 up   in  weight 1 up_from 71 up_thru 0 down_at 70 last_clean_interval [50,65) [v2:172.25.250.12:6800/2046452011,v1:172.25.250.12:6801/2046452011] [v2:172.25.250.12:6802/2046452011,v1:172.25.250.12:6803/2046452011] exists,up 82c98821-3c02-468a-8e2f-7c5dfc2a0fbe
osd.1 up   in  weight 1 up_from 68 up_thru 23 down_at 67 last_clean_interval [50,65) [v2:172.25.250.12:6808/260025682,v1:172.25.250.12:6809/260025682] [v2:172.25.250.12:6810/260025682,v1:172.25.250.12:6811/260025682] exists,up 1ca3352b-4c2d-4a85-86cc-33d1715c1915
.......
blocklist 172.25.250.12:0/1295757381 expires 2023-04-26T07:42:28.540520+0000
blocklist 172.25.250.12:6825/3489966617 expires 2023-04-26T07:42:28.540520+0000
blocklist 172.25.250.12:6824/3489966617 expires 2023-04-26T07:42:28.540520+0000
epoch:OSD映射的時代編號。
fsid:Ceph集群的唯一標(biāo)識符。
created:創(chuàng)建OSD映射的時間。
modified:修改OSD映射的時間。
flags:包含有關(guān) OSD 映射狀態(tài)的標(biāo)志位,這些標(biāo)志位都是用來控制 Ceph 集群中 OSD的行為和狀態(tài),以便最大程度地提高性能和可靠性。如 sortbitwise、recovery_deletes、purged_snapdirs 和 pglog_hardlimit 等。
sortbitwise:開啟了每個對象單獨(dú)排序,這可以優(yōu)化存儲分配和數(shù)據(jù)分布。
recovery_deletes:在恢復(fù)過程中刪除陳舊的對象,以避免占用空間和影響性能。
purged_snapdirs:快照目錄已從PG日志中刪除,以節(jié)省空間并提高性能。
pglog_hardlimit:PG日志達(dá)到硬限制時強(qiáng)制轉(zhuǎn)儲日志,以保持一致性并避免性能問題。
crush_version:CRUSH映射版本號。
full_ratio:當(dāng) OSD 的使用量達(dá)到該值時,將觸發(fā)警告(如果開啟了警告)并阻止新數(shù)據(jù)寫入 OSD。默認(rèn)值為 0.95。
full_ratio、backfillfull_ratio 和 nearfull_ratio:用于控制OSD空間利用率的比率。
backfillfull_ratio:當(dāng) OSD 在后期重新填充時,其使用量達(dá)到該值時,將阻止進(jìn)一步的后期重新填充操作。默認(rèn)值為 0.9。
nearfull_ratio:當(dāng) OSD 的使用量達(dá)到該值時,將向 Ceph 發(fā)送慢操作警告。默認(rèn)值為 0.85。
require_min_compat_client、min_compat_client 和 require_osd_release:最低客戶端和OSD版本限制。
stretch_mode_enabled:是否啟用了伸縮模式。該模式允許將數(shù)據(jù)復(fù)制到遠(yuǎn)程位置,以實(shí)現(xiàn)跨區(qū)域?yàn)?zāi)難恢復(fù)和數(shù)據(jù)備份。
pool:Ceph 存儲池的相關(guān)信息,例如 size、min_size、pg_num、pgp_num 等等。
pool 1:這是存儲池的編號,Ceph 存儲集群中的每個存儲池都有一個唯一的編號。
device_health_metrics:這是存儲池的名稱,通常用于描述存儲池中存儲的對象類型或數(shù)據(jù)用途。
replicated:這是存儲池的副本模式,表示該存儲池中的數(shù)據(jù)將被復(fù)制到多個 OSD 上以實(shí)現(xiàn)高可用性和冗余。
size 3 和 min_size 2:這些是存儲池的副本大小設(shè)置。size 3 表示每個對象將被復(fù)制到 3 個不同的 OSD 上,而 min_size 2 表示在執(zhí)行寫入操作時至少要在 2 個 OSD 上成功復(fù)制數(shù)據(jù)才會視為寫入成功。
crush_rule 0:這是使用的 CRUSH 規(guī)則的編號,CRUSH 是 Ceph 集群用于計(jì)算數(shù)據(jù)位置的分布式算法,該規(guī)則規(guī)定了如何將數(shù)據(jù)分散到存儲設(shè)備上。
object_hash rjenkins:這是用于確定對象位置的哈希函數(shù)。在這種情況下,rjenkins 是一種快速哈希函數(shù),能夠快速生成對象位置。
pg_num 1 和 pgp_num 1:這些是該存儲池中的 PG 數(shù)量和 PGP 數(shù)量。PG 是 Ceph 存儲池中數(shù)據(jù)的基本組織單元,它們將對象分配到 OSD 上以實(shí)現(xiàn)負(fù)載均衡。
autoscale_mode on:這是存儲池的自動擴(kuò)展設(shè)置,表示在存儲池滿時是否自動擴(kuò)展存儲池大小。此處設(shè)置為“開啟”。
last_change 74:這是最后修改存儲池配置的時間戳,通常用于跟蹤存儲池配置更改歷史記錄。
flags hashpspool stripe_width 0 pg_num_min 1:這些是其他存儲池標(biāo)志,如使用哈希池(hashpspool)、條帶寬度(stripe_width)和最小 PG 數(shù)量(pg_num_min)等。
application mgr_devicehealth:這是存儲池的應(yīng)用程序類型,表示該存儲池用于存儲設(shè)備健康度信息的管理數(shù)據(jù)。
max_osd:OSD的最大數(shù)量。
osd.X:每個OSD的詳細(xì)信息,包括其狀態(tài)、權(quán)重、IP地址、端口、在PG中的位置等等。
blocklist:列出被阻止或禁止使用的IP地址列表。






放置組 (PG) 映射
包含 PG 版本、全滿比率、每個放置組的詳細(xì)信息,例如 PG ID、就緒集合、操作集合、PG 狀態(tài)、每個池的數(shù)據(jù)使用量統(tǒng)計(jì)、以及映射時間戳。使用ceph pg dump查看包含的 PG 映射統(tǒng)計(jì)數(shù)據(jù)

PG_STAT  OBJECTS  MISSING_ON_PRIMARY  DEGRADED  MISPLACED  UNFOUND  BYTES  OMAP_BYTES*  OMAP_KEYS*  LOG  DISK_LOG  STATE         STATE_STAMP                      VERSION  REPORTED  UP       UP_PRIMARY  ACTING   ACTING_PRIMARY  LAST_SCRUB  SCRUB_STAMP                      LAST_DEEP_SCRUB  DEEP_SCRUB_STAMP                 SNAPTRIMQ_LEN
4.19           0                   0         0          0        0      0            0           0    0         0  active+clean  2023-04-30T05:50:02.431578+0000      0'0    108:12  [7,2,5]           7  [7,2,5]               7         0'0  2023-04-30T05:50:01.330091+0000              0'0  2023-04-30T05:50:01.330091+0000              0
2.1f           0                   0         0          0        0      0            0           0    0         0  active+clean  2023-04-30T05:49:47.320452+0000      0'0    108:17  [0,3,8]           0  [0,3,8]               0         0'0  2023-04-30T05:49:46.202749+0000              0'0  2023-04-30T05:49:46.202749+0000              0
3.1e           0                   0         0          0        0      0            0           0    0         0  active+clean  2023-04-30T05:49:49.349973+0000      0'0    108:15  [2,6,3]           2  [2,6,3]               2         0'0  2023-04-30T05:49:48.270032+0000              0'0  2023-04-30T05:49:48.270032+0000              0
4.18           0                   0         0          0        0      0            0           0    0         0  active+clean  2023-04-30T05:50:02.449439+0000      0'0    108:12  [3,1,6]           3  [3,1,6]               3         0'0  2023-04-30T05:50:01.330091+0000              0'0  2023-04-30T05:50:01.330091+0000              0
PG_STAT: PG 的狀態(tài),表示 PG 在當(dāng)前時間點(diǎn)內(nèi)的活動情況和健康狀況。PG_STAT 數(shù)字由兩部分組成,第一部分是十六進(jìn)制的 OSD 編號,第二部分是十六進(jìn)制的 epoch 號。
OBJECTS: PG 中對象數(shù)量。
MISSING_ON_PRIMARY: 在 primary OSD 上缺少的對象數(shù)量。
DEGRADED: 在副本 OSD 上損壞或不可用的對象數(shù)量。
MISPLACED: 在非預(yù)期 OSD 上的對象數(shù)量。
UNFOUND: 未找到的對象數(shù)量。
BYTES: PG 中對象的總字節(jié)數(shù)。
OMAP_BYTES: PG 中對象元數(shù)據(jù)的總字節(jié)數(shù)。
OMAP_KEYS: PG 中對象元數(shù)據(jù)鍵值對的總數(shù)。
LOG: 最近操作日志的序列號范圍。
DISK_LOG: 存儲在磁盤上的日志序列號范圍。
STATE: PG 的狀態(tài),例如“active+clean”。
STATE_STAMP: PG 最后轉(zhuǎn)換到當(dāng)前狀態(tài)的時間戳。
VERSION: PG 的版本。
REPORTED: 匯報(bào) PG 狀態(tài)的 OSD 的編號。
UP: 處于活動狀態(tài)的 OSD 編號列表。
UP_PRIMARY: 作為主 OSD 進(jìn)行同步的 OSD 編號。
ACTING: 負(fù)責(zé)讀寫請求的 OSD 編號列表。
ACTING_PRIMARY: 正在執(zhí)行同步操作的 OSD 編號。
LAST_SCRUB: 上次 scrub 的時間戳和結(jié)果。
SCRUB_STAMP: 上次 scrub 的結(jié)束時間戳。
LAST_DEEP_SCRUB: 上次 deep scrub 的時間戳和結(jié)果。
SNAPTRIMQ_LEN: PgSnapTrimq 中等待處理的數(shù)量。
DEEP_SCRUB_STAMP: 上次 deep scrub 的結(jié)束時間戳。
CRUSH 映射
包含存儲設(shè)備的列表、故障域?qū)哟谓Y(jié)構(gòu)(例如設(shè)備、主機(jī)、機(jī)架、行、機(jī)房),以及存儲數(shù)據(jù)時層次結(jié)構(gòu)的規(guī)則,Crush Map 是 Ceph 存儲集群的關(guān)鍵組件之一,用于定義數(shù)據(jù)如何分布到存儲設(shè)備(如 OSD)上。Crush Map 包含 bucket、設(shè)備和 ruleset 三個主要組件,結(jié)合使用可以定義數(shù)據(jù)的分布和副本策略。

若要查看CRUSH 映射,

首先使用 ceph osd getcrushmap -o comp-filename,
使用 crushtool -d comp-filename -o decomp-filename 解譯該輸出
使用文本編輯器查看解譯后的映射
[root@serverc ~]# cephadm shell
Inferring fsid 4c759c0c-d869-11ed-bfcb-52540000fa0c
Inferring config /var/lib/ceph/4c759c0c-d869-11ed-bfcb-52540000fa0c/mon.serverc.lab.example.com/config
Using recent ceph image registry.redhat.io/rhceph/rhceph-5-rhel8@sha256:6306de945a6c940439ab584aba9b622f2aa6222947d3d4cde75a4b82649a47ff
[ceph: root@serverc /]# ceph osd getcrushmap -o comp-filename
27
[ceph: root@serverc /]# crushtool -d comp-filename -o decomp-filename
[ceph: root@serverc /]# cat de
decomp-filename  dev/
[ceph: root@serverc /]# cat decomp-filename
# begin crush map
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54

# devices
device 0 osd.0 class hdd
device 1 osd.1 class hdd
device 2 osd.2 class hdd
device 3 osd.3 class hdd
device 4 osd.4 class hdd
device 5 osd.5 class hdd
device 6 osd.6 class hdd
device 7 osd.7 class hdd
device 8 osd.8 class hdd

# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 zone
type 10 region
type 11 root

# buckets
host serverc {
        id -3           # do not change unnecessarily
        id -4 class hdd         # do not change unnecessarily
        # weight 0.029
        alg straw2
        hash 0  # rjenkins1
        item osd.0 weight 0.010
        item osd.1 weight 0.010
        item osd.2 weight 0.010
}
host serverd {
        id -5           # do not change unnecessarily
        id -6 class hdd         # do not change unnecessarily
        # weight 0.029
        alg straw2
        hash 0  # rjenkins1
        item osd.3 weight 0.010
        item osd.4 weight 0.010
        item osd.5 weight 0.010
}
host servere {
        id -7           # do not change unnecessarily
        id -8 class hdd         # do not change unnecessarily
        # weight 0.029
        alg straw2
        hash 0  # rjenkins1
        item osd.6 weight 0.010
        item osd.7 weight 0.010
        item osd.8 weight 0.010
}
root default {
        id -1           # do not change unnecessarily
        id -2 class hdd         # do not change unnecessarily
        # weight 0.088
        alg straw2
        hash 0  # rjenkins1
        item serverc weight 0.029
        item serverd weight 0.029
        item servere weight 0.029
}

# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host
        step emit
}

# end crush map
[ceph: root@serverc /]#
元數(shù)據(jù)服務(wù)器 (MDS) 映射
包含用于存儲元數(shù)據(jù)的池、元數(shù)據(jù)服務(wù)器列表、元數(shù)據(jù)服務(wù)器狀態(tài)和映射時間戳。查看包含 ceph fs dump 的 MDS映射

[ceph: root@serverc /]# ceph fs dump
e1
enable_multiple, ever_enabled_multiple: 1,1
compat: compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table,9=file layout v2,10=snaprealm v2}
legacy client fscid: -1

No filesystems configured
dumped fsmap epoch 1
[ceph: root@serverc /]#
運(yùn)行 ceph fs dump 命令后的輸出結(jié)果。以下是每個字段的含義:

e1: 當(dāng)前文件系統(tǒng)的 epoch 號。
enable_multiple, ever_enabled_multiple: 1,1: 文件系統(tǒng)是否啟用了多 MDS 支持并且曾經(jīng)啟用過。
compat: 文件系統(tǒng)支持的兼容性特性,包括三個字段(compat、rocompat 和 incompat),其中 compat 表示 CephFS 要求支持的最低版本,而 rocompat 和 incompat 分別表示與只讀客戶端和不兼容客戶端相關(guān)的特性。
legacy client fscid: -1: 指定將 legacy 客戶端分配給文件系統(tǒng)的 ID,但當(dāng)前沒有 legacy 客戶端連接到該文件系統(tǒng)。
No filesystems configured: 表示當(dāng)前沒有配置任何文件系統(tǒng)。
dumped fsmap epoch 1: 表示已成功輸出當(dāng)前 Ceph 集群的文件系統(tǒng)映射。
3博文部分內(nèi)容參考
? 文中涉及參考鏈接內(nèi)容版權(quán)歸原作者所有,如有侵權(quán)請告知,這是一個開源項(xiàng)目,如果你認(rèn)可它,不要吝嗇星星哦 :)

https://docs.ceph.com/en/pacific/architecture/

https://docs.ceph.com

CL280 課堂講義

? 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)




作者:山河已無恙


歡迎關(guān)注微信公眾號 :山河已無恙