- Ceph企業(yè)級(jí)分布式存儲(chǔ):原理與工程實(shí)踐
- 景顯強(qiáng) 龔向宇 黃軍寶
- 1328字
- 2021-11-05 10:18:53
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í)組織形式等。
- 電腦組裝與系統(tǒng)安裝
- Implementing Cisco UCS Solutions
- Installing and Configuring Windows 10:70-698 Exam Guide
- 混沌工程實(shí)戰(zhàn):手把手教你實(shí)現(xiàn)系統(tǒng)穩(wěn)定性
- 混沌工程:復(fù)雜系統(tǒng)韌性實(shí)現(xiàn)之道
- 嵌入式Linux應(yīng)用開發(fā)菜鳥進(jìn)階
- 網(wǎng)絡(luò)操作系統(tǒng)教程:Windows Server 2016管理與配置
- Linux使用和管理指南:從云原生到可觀測性
- 細(xì)說Linux基礎(chǔ)知識(shí)
- AutoCAD 2014中文版從入門到精通
- OpenStack系統(tǒng)架構(gòu)設(shè)計(jì)實(shí)戰(zhàn)
- 跟老男孩學(xué)Linux運(yùn)維:Shell編程實(shí)戰(zhàn)
- Vim 8文本處理實(shí)戰(zhàn)
- Linux網(wǎng)絡(luò)操作系統(tǒng)項(xiàng)目教程(RHEL 7.4/CentOS 7.4)(第3版)(微課版)
- OpenHarmony開發(fā)與實(shí)踐:基于紅莓RK2206開發(fā)板