寫在前面
- 準備考試,整理 Ceph 相關(guān)筆記
- 博文內(nèi)容涉及,Ceph 集群中數(shù)據(jù)如何分布以及不同的容災(zāi)池介紹
- 理解不足小伙伴幫忙指正
對每個人而言,真正的職責(zé)只有一個:找到自我。然后在心中堅守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是對大眾理想的懦弱回歸,是隨波逐流,是對內(nèi)心的恐懼 ——赫爾曼·黑塞《德米安》
Ceph 中的數(shù)據(jù)分布和整理
使用池對存儲進行分區(qū)
Ceph
中的 pool
可以看作是傳統(tǒng)文件系統(tǒng)中的目錄
,但它們不僅僅是簡單的目錄??梢赃@樣講,如果要在 ceph 中存儲東西,那么最先需要確認的就是要存儲在那個池里,池最主要區(qū)別是,保護容災(zāi)類型不同,有復(fù)制池和糾刪碼池兩種
在 Ceph 中 OSD
保護并持續(xù)檢查集群中存儲的數(shù)據(jù)的完整性, Pools(池) 是 Ceph 存儲集群的邏輯分區(qū)
,用于將對象存儲在共同的名稱標簽
下。
Ceph 給每個 池
分配 特定數(shù)量
的 哈希存儲桶
,名為放置組 (PG)
,將對象分組到一起進行存儲。每個池具有下列可調(diào)整屬性:
- 不變 ID
- 名稱
- 在 OSD 之間分布對象的 PG 數(shù)量
- CRUSH 規(guī)則,用于確定這個池的 PG 映射
- 保護類型冗余(
復(fù)制
或糾刪代碼
) - 與保護類型相關(guān)的參數(shù)
- 影響集群行為的各種標志
分配給每個池的放置組(PG
)數(shù)量可以獨立配置,以匹配數(shù)據(jù)的類型以及池所需要的訪問權(quán)限
CRUSH
算法用于確定托管池數(shù)據(jù)的OSD
,每個池分配一條 CRUSH
規(guī)則作為其放置策略,CRUSH 規(guī)則決定哪些 OSD 存儲分配了該規(guī)則的所有池的數(shù)據(jù)
放置組 PG
放置組 (PG)
將一系列對象聚合到一個哈希存儲桶
或組中。Ceph 將每個 PG 映射到一組 OSD
。
一個對象 屬于一個
PG,屬于 同一
PG 的所有對象返回相同的散列結(jié)果
根據(jù)對象名稱的散列
將對象映射至其 PG
。由 CRUSH 算法將 PG 放置到OSD 這種放置策略也被稱為 CRUSH
放置規(guī)則,放置規(guī)則標識在 CRUSH 拓撲中選定的故障域
,以接收各個副本或糾刪碼區(qū)塊
當(dāng)客戶端將對象寫入到池時,它使用池的 CRUSH
放置規(guī)則來確定對象的放置組
。
客戶端然后使用其集群映射的副本
、放置組
以及 CRUSH 放置規(guī)則
來計算對象的副本(或其糾刪碼區(qū)塊)應(yīng)寫入到哪些 OSD 中,從而確保數(shù)據(jù)分布到不同的故障域
當(dāng)新
的 OSD 可供 Ceph 集群使用時,放置組提供的間接層
非常重要。在集群中添加或移除 OSD 時,放置組會自動在正常運作的 OSD 之間重新平衡
將對象映射到其關(guān)聯(lián)的 OSD
-
Ceph 客戶端從監(jiān)控器獲取集群映射的最新副本。
集群映射向客戶端提供有關(guān)集群中所有MON、OSD 和 MDS 的信息
。它不會向客戶端提供對象的位置,客戶端必須使用CRUSH 來計算它需要訪問的對象位置 -
當(dāng)一個對象需要進行存儲時,客戶端需要根據(jù)
對象 ID
和存儲池名稱
來計算出該對象所屬的PG ID
。為了計算PG ID
,客戶端需要將對象 ID
做模運算
,得到PG
數(shù)量,然后再將PG ID
添加到池 ID
的前綴上,以得到完整的PG ID
。
例如,假設(shè)某個存儲池的名稱為 my-pool,其對應(yīng)的數(shù)字 ID 是 1,同時該存儲池被分成了 64 個 PG 組。當(dāng)客戶端需要為一個對象計算存儲位置時,它首先根據(jù)對象的 ID 計算出對象所在的 PG ID(例如是 26),然后將池 ID 的前綴添加進去,得到最終的 PG ID:1.26。這個 PG ID 就代表了對象在 Ceph 存儲集群中的存儲位置,客戶端可以通過該 ID 來訪問和管理該對象。
-
然后,使用CRUSH 算法確定哪些 OSD 負責(zé)某一個 PG(操作集合)。操作集合中目前就緒的 OSD位于就緒集合中,就緒集合中的第一個 OSD 是對象放置組的當(dāng)前主要 OSD,就緒集合中的所有其他OSD 為次要 OSD
-
Ceph 客戶端然后可以直接與主要 OSD 交互,以訪問對象
數(shù)據(jù)保護
和 Ceph 客?端一樣,OSD 守護進程使用 CRUSH 算法,但 OSD 守護進程使用它來計算對象副本的存儲位置以及用于重新平衡存儲
。
在典型的寫入場景中,Ceph 客戶端使用CRUSH 算法計算原始對象的存儲位置,將對象映射到池和放置組,然后使用 CRUSH 映射來確定映射的放置組的主要 OSD。在創(chuàng)建池時,將它們設(shè)置為復(fù)制或糾刪代碼池
為了提高彈性,為池配置在出現(xiàn)故障時不會丟失數(shù)據(jù)的 OSD 數(shù)量。對于復(fù)制池(默認的池類型)
,該數(shù)量決定了在不同設(shè)備之間創(chuàng)建和分布對象的副本數(shù)。復(fù)制池以較低的可用存儲與原始存儲比為代價,在所有用例中提供更佳的性能
糾刪代碼
提供了更經(jīng)濟高效的數(shù)據(jù)存儲方式,但性能更低
。對于糾刪代碼池,配置值確定要創(chuàng)建的編碼塊
和奇偶校驗塊
的數(shù)量
糾刪代碼
的主要優(yōu)勢是能夠提供極高的彈性和持久性。還可以配置要使用的編碼區(qū)塊(奇偶校驗)數(shù)量,RADOS 網(wǎng)關(guān)和 RBD 訪問方法都支持糾刪代碼
下圖演示了如何在Ceph集群中存儲數(shù)據(jù)對象。Ceph 將池中的一個或多個對象映射到一個 PG,由彩色框表示。此圖上的每一個 PG 都被復(fù)制并存儲在 Ceph 集群的獨立 OSD 上
博文部分內(nèi)容參考
? 文中涉及參考鏈接內(nèi)容版權(quán)歸原作者所有,如有侵權(quán)請告知,這是一個開源項目,如果你認可它,不要吝嗇星星哦 ??
https://docs.ceph.com/en/pacific/architecture/
https://github.com/ceph/ceph
https://docs.ceph.com
CL260 授課老師課堂筆記文章來源:http://www.zghlxwxcb.cn/news/detail-527498.html
? 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)文章來源地址http://www.zghlxwxcb.cn/news/detail-527498.html
到了這里,關(guān)于Ceph:關(guān)于Ceph 集群中數(shù)據(jù)分布和容災(zāi)理論的一些筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!