- Ceph企業(yè)級分布式存儲:原理與工程實踐
- 景顯強 龔向宇 黃軍寶
- 1328字
- 2021-11-05 10:18:53
3.5 CRUSH算法
CRUSH算法是Ceph的設計精髓,主要通過計算來確定數據的存儲位置,不需要像以往要查詢元數據服務器才能知道數據的位置。這也是Ceph不需要元數據服務器的原因。CRUSH是受控復制的分布式hash算法,是一種偽隨機算法。CRUSH算法可以避免單點故障、性能瓶頸以及對Ceph可擴展性的物理限制。
CRUSH依賴集群的映射圖,使用CRUSH Map偽隨機地存儲和檢索OSD中的數據,并使數據在整個集群中均勻分布。CRUSH Map包含OSD列表,用于將設備聚合到物理位置的桶列表中,并告訴CRUSH如何在存儲池中復制數據的規(guī)則列表。通過映射底層物理基礎架構信息,CRUSH可以規(guī)避相關硬件設備故障帶來的風險。典型的故障來源包括物理上臨近的資源,如共享的電源和共享的網絡等。此信息可以編碼到Cluster Map。CRUSH利用這些信息可以指定放置策略,可以在不同故障域之間分離對象副本,同時保證所需的數據均勻分布。這樣,即便某個服務器或者某個機架故障也不會影響整個集群的正常使用,還能保證數據的安全。例如,為了解決并發(fā)故障,我們可能需要確保數據副本位于使用不同機架、電源組、控制器和/或物理位置的設備上。
部署大型數據集群時,我們應充分考慮自定義的CRUSH Map,因為它將幫助你管理Ceph集群,提高性能并確保數據安全。例如,如果OSD出現故障,且你需要更換硬件時,CRUSH Map可以幫助查找OSD發(fā)生故障的主機的物理數據中心、房間和機架等資源,快速定位壞盤所在位置。同樣,CRUSH可以幫助你更快地識別故障。例如,如果特定機架中的所有OSD同時下線,故障可能出在網絡交換機/機架/網絡交換機的電源上,而不是OSD本身。當與故障主機關聯的放置組處于degraded狀態(tài)時,CRUSH Map還可以幫助識別Ceph存儲數據的冗余副本的物理位置。
CRUSH Map分為三個主要部分。
·Device:ceph-osd守護進程相對應的任何對象存儲設備。
·Bucket:包括存儲位置(例如機架、主機等)的關系和權重。
·Ruleset:選擇Bucket的規(guī)則集。
1.Device
通常,Ceph集群使用多種類型的存儲設備,包括HDD、SSD、NVMe及其混合。我們將這些不同類型的存儲設備稱為Device Class,以避免與CRUSH Bucket的type屬性混淆(例如主機、機架)。由SSD支持的OSD比由傳統(tǒng)機械磁盤支持的OSD運行快得多,因此其更適合大的工作負載。Ceph可以為不同類型的數據集或工作負載創(chuàng)建池,并分配不同的CRUSH規(guī)則來控制這些池中數據的放置。因此,Device是區(qū)分物理設備屬性的,為將來存儲具備特定屬性的數據提供描述依據。
2.Bucket
簡單來說,Ceph集群中有很多硬件設備,從上到下可能涉及某些邏輯單元,類似數據中心→設備所在機房→機架→行→服務器→OSD盤等的關系。那么,如何描述這些邏輯單元的關系、組織好這些關系、定義相應的故障域,以提高集群的數據安全性、可用性以及定位故障的速度等?Bucket專門用于描述以上提到的這些邏輯單元屬性,以便將來對這些屬性按樹狀結構進行組織。我們可以通過Ceph命令查看其組織結構。Bucket類型如表3-2所示。
表3-2 Bucket類型


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

圖3-3 Bucket的成員組織關系
3.Ruleset
CRUSH Map包含CRUSH Rule的概念。CRUSH Rule是確定池中數據放置的規(guī)則。對于大型集群,你可能會創(chuàng)建許多池,其中每個池都有自己的CRUSH Ruleset(規(guī)則集)和Rule(規(guī)則)。默認的CRUSH Map有默認的Root規(guī)則,如果需要更多的規(guī)則,需要后續(xù)創(chuàng)建,或者在創(chuàng)建新池時指定規(guī)則讓Ceph自動創(chuàng)建。這些規(guī)則集主要是讓你知道數據存放在哪里。它包含副本方式或糾刪碼方式的使用規(guī)則,以及Bucket的層級組織形式等。
- 操作系統(tǒng)實用教程(Linux版)
- Kali Linux滲透測試全流程詳解
- Ubuntu Linux操作系統(tǒng)
- 精解Windows8
- Extending Bootstrap
- STM32庫開發(fā)實戰(zhàn)指南:基于STM32F4
- 網絡操作系統(tǒng)教程:Windows Server 2016管理與配置
- 跟老男孩學Linux運維:Shell編程實戰(zhàn)
- 寫給架構師的Linux實踐:設計并實現基于Linux的IT解決方案
- 分布式高可用架構之道
- Windows 7實戰(zhàn)從入門到精通
- Linux系統(tǒng)最佳實踐工具:命令行技術
- Building Telephony Systems With Asterisk
- Linux網絡配置與安全管理
- 鴻蒙操作系統(tǒng)設計原理與架構