官术网_书友最值得收藏!

3.5 CRUSH算法

CRUSH算法是Ceph的設(shè)計(jì)精髓,主要通過計(jì)算來確定數(shù)據(jù)的存儲(chǔ)位置,不需要像以往要查詢元數(shù)據(jù)服務(wù)器才能知道數(shù)據(jù)的位置。這也是Ceph不需要元數(shù)據(jù)服務(wù)器的原因。CRUSH是受控復(fù)制的分布式hash算法,是一種偽隨機(jī)算法。CRUSH算法可以避免單點(diǎn)故障、性能瓶頸以及對Ceph可擴(kuò)展性的物理限制。

CRUSH依賴集群的映射圖,使用CRUSH Map偽隨機(jī)地存儲(chǔ)和檢索OSD中的數(shù)據(jù),并使數(shù)據(jù)在整個(gè)集群中均勻分布。CRUSH Map包含OSD列表,用于將設(shè)備聚合到物理位置的桶列表中,并告訴CRUSH如何在存儲(chǔ)池中復(fù)制數(shù)據(jù)的規(guī)則列表。通過映射底層物理基礎(chǔ)架構(gòu)信息,CRUSH可以規(guī)避相關(guān)硬件設(shè)備故障帶來的風(fēng)險(xiǎn)。典型的故障來源包括物理上臨近的資源,如共享的電源和共享的網(wǎng)絡(luò)等。此信息可以編碼到Cluster Map。CRUSH利用這些信息可以指定放置策略,可以在不同故障域之間分離對象副本,同時(shí)保證所需的數(shù)據(jù)均勻分布。這樣,即便某個(gè)服務(wù)器或者某個(gè)機(jī)架故障也不會(huì)影響整個(gè)集群的正常使用,還能保證數(shù)據(jù)的安全。例如,為了解決并發(fā)故障,我們可能需要確保數(shù)據(jù)副本位于使用不同機(jī)架、電源組、控制器和/或物理位置的設(shè)備上。

部署大型數(shù)據(jù)集群時(shí),我們應(yīng)充分考慮自定義的CRUSH Map,因?yàn)樗鼘椭愎芾鞢eph集群,提高性能并確保數(shù)據(jù)安全。例如,如果OSD出現(xiàn)故障,且你需要更換硬件時(shí),CRUSH Map可以幫助查找OSD發(fā)生故障的主機(jī)的物理數(shù)據(jù)中心、房間和機(jī)架等資源,快速定位壞盤所在位置。同樣,CRUSH可以幫助你更快地識(shí)別故障。例如,如果特定機(jī)架中的所有OSD同時(shí)下線,故障可能出在網(wǎng)絡(luò)交換機(jī)/機(jī)架/網(wǎng)絡(luò)交換機(jī)的電源上,而不是OSD本身。當(dāng)與故障主機(jī)關(guān)聯(lián)的放置組處于degraded狀態(tài)時(shí),CRUSH Map還可以幫助識(shí)別Ceph存儲(chǔ)數(shù)據(jù)的冗余副本的物理位置。

CRUSH Map分為三個(gè)主要部分。

·Device:ceph-osd守護(hù)進(jìn)程相對應(yīng)的任何對象存儲(chǔ)設(shè)備。

·Bucket:包括存儲(chǔ)位置(例如機(jī)架、主機(jī)等)的關(guān)系和權(quán)重。

·Ruleset:選擇Bucket的規(guī)則集。

1.Device

通常,Ceph集群使用多種類型的存儲(chǔ)設(shè)備,包括HDD、SSD、NVMe及其混合。我們將這些不同類型的存儲(chǔ)設(shè)備稱為Device Class,以避免與CRUSH Bucket的type屬性混淆(例如主機(jī)、機(jī)架)。由SSD支持的OSD比由傳統(tǒng)機(jī)械磁盤支持的OSD運(yùn)行快得多,因此其更適合大的工作負(fù)載。Ceph可以為不同類型的數(shù)據(jù)集或工作負(fù)載創(chuàng)建池,并分配不同的CRUSH規(guī)則來控制這些池中數(shù)據(jù)的放置。因此,Device是區(qū)分物理設(shè)備屬性的,為將來存儲(chǔ)具備特定屬性的數(shù)據(jù)提供描述依據(jù)。

2.Bucket

簡單來說,Ceph集群中有很多硬件設(shè)備,從上到下可能涉及某些邏輯單元,類似數(shù)據(jù)中心→設(shè)備所在機(jī)房→機(jī)架→行→服務(wù)器→OSD盤等的關(guān)系。那么,如何描述這些邏輯單元的關(guān)系、組織好這些關(guān)系、定義相應(yīng)的故障域,以提高集群的數(shù)據(jù)安全性、可用性以及定位故障的速度等?Bucket專門用于描述以上提到的這些邏輯單元屬性,以便將來對這些屬性按樹狀結(jié)構(gòu)進(jìn)行組織。我們可以通過Ceph命令查看其組織結(jié)構(gòu)。Bucket類型如表3-2所示。

表3-2 Bucket類型

我們可通過圖3-3更加清晰地了解Bucket的作用,完成物理設(shè)備資源的相關(guān)故障域的管控。

圖3-3 Bucket的成員組織關(guān)系

3.Ruleset

CRUSH Map包含CRUSH Rule的概念。CRUSH Rule是確定池中數(shù)據(jù)放置的規(guī)則。對于大型集群,你可能會(huì)創(chuàng)建許多池,其中每個(gè)池都有自己的CRUSH Ruleset(規(guī)則集)和Rule(規(guī)則)。默認(rèn)的CRUSH Map有默認(rèn)的Root規(guī)則,如果需要更多的規(guī)則,需要后續(xù)創(chuàng)建,或者在創(chuàng)建新池時(shí)指定規(guī)則讓Ceph自動(dòng)創(chuàng)建。這些規(guī)則集主要是讓你知道數(shù)據(jù)存放在哪里。它包含副本方式或糾刪碼方式的使用規(guī)則,以及Bucket的層級(jí)組織形式等。

主站蜘蛛池模板: 磐石市| 华阴市| 个旧市| 家居| 永新县| 兴和县| 绵竹市| 普陀区| 乌苏市| 龙岩市| 宝兴县| 莲花县| 宝兴县| 和田县| 嘉义县| 东台市| 三明市| 日照市| 齐河县| 安新县| 平罗县| 咸宁市| 沧源| 淮阳县| 东莞市| 江都市| 安平县| 云浮市| 民权县| 琼海市| 酒泉市| 石屏县| 普安县| 灵丘县| 伊金霍洛旗| 手游| 雷州市| 宜兰市| 乌苏市| 突泉县| 桓仁|