【學習】智能分布CRUSH

? ? ? ? ? ? ?CRUSH(Controlled Replication Under Scalable Hashing)是一種基于偽隨機控制數據分布、復制的算法。Ceph是為大規模分布式存儲系統(PB級的數據和成百上千臺存儲設備)而設計的,在大規模的存儲系統里,必須考慮數據的平衡分布和負載(提高資源利用率)、最大化系統的性能,以及系統的擴展和硬件容錯等。CRUSH就是為解決以上問題而設計的。在Ceph集群里,CRUSH只需要一個簡潔而層次清晰的設備描述,包括存儲集群和副本放置策略,就可以有效地把數據對象映射到存儲設備上,且這個過程是完全分布式的,在集群系統中的任何一方都可以獨立計算任何對象的位置;另外,大型系統存儲結構是動態變化的(存儲節點的擴展或者縮容、硬件故障等),CRUSH能夠處理存儲設備的變更(添加或刪除),并最小化由于存儲設備的變更而導致的數據遷移。

CRUSH基本原理

? ? ? ? ?眾所周知,存儲設備具有吞吐量限制,它影響讀寫性能和可擴展性能。所以,存儲系統通常都支持條帶化以增加存儲系統的吞吐量并提升性能,數據條帶化最常見的方式是做RAID。與ceph的條帶化最相似的是RAID 0或者是“帶區卷”。Ceph條帶化提供了類似于RAID 0的吞吐量,N路RAID鏡像的可靠性以及更快速的恢復能力。

? ? ? ? ?在磁盤陣列中,數據是以條帶(stripe)的方式貫穿在磁盤陣列所有硬盤中的。這種數據的分配方式可以彌補OS讀取數據量跟不上的不足。

1. 將條帶單元(stripe unit)從陣列的第一個硬盤到最后一個硬盤收集起來,就可以稱為條帶(stripe)。有的時候,條帶單元也被稱為交錯深度。在光纖技術中,一個條帶單元被叫作段。

2.數據在陣列中的硬盤上是以條帶的形式分布的,條帶化是指數據在陣列中所有硬盤中的存儲過程。文件中的數據被分割成小塊的數據段在陣列中的硬盤上順序的存儲,這個最小數據塊就叫做條帶單元。

? ? ? ? 決定Ceph條帶化數據的3個因素:

對象大小:處于分布式集群中的對象擁有一個最大可配置的尺寸(例如,2MB、4MB等),對象大小應該足夠大以適應大量的條帶單元。

?◎?條帶寬度:條帶有一個可以配置的單元大小,Ceph Client端將數據寫入對象分成相同大小的條帶單元,除了最后一個條帶之外;每個條帶寬度,應用是對象大小的一小部分,這樣使得一個對象可以包含多個條帶單元。

?◎?條帶總量:Ceph客戶端寫入一系列的條帶單元到一系列的對象,這就決定了條帶的總量,這些對象被稱為對象集,當Ceph客戶端寫入的對象集合中的最后一個對象之后,它將會返回到對象集合中的第一個對象處。

Object與PG

? ? ? ? ?Ceph條帶化之后,將獲得N個帶有唯一oid(即object的id)。Object id 是進行線性映射生成的,即由file的元數據、Ceph條帶化產生的object的序號連綴而成。此時object需要映射到PG中,該映射包括兩部分。

? ? ? ? ? 1.由Ceph集群指定的靜態Hash函數計算Object的oid,獲取到其Hash值。
? ? ? ? ? 2.將該Hash值與mask進行操作,從而獲得PG ID

? ? ? ? ? 根據PADOS的設計,假定集群中設定的PG總數為M(M一般為2的整數冪),則mask的值為M-1。由此,Hash值計算之后,進行按位與操作是想從所有PG中近似均勻地隨機選擇。基于該原理以及概率論的相關原理,當用于數量龐大的Object以及PG時,獲得到的PG ID是近似均勻的。

? ? ? ? ?計算PG的ID示例如下:
? ? ? ? ? 1.Client輸入pool ID和對象ID(如pool='liverpool',object-id='john')。
? ? ? ? ? 2.CRUSH獲得對象ID并對其Hash運算。
? ? ? ? ? 3.CRUSH計算OSD個數,Hash取模獲得PG的ID(如0x58)。
? ? ? ? ? 4.CRUSH獲得已命名pool的ID(如liverpool=4)。
? ? ? ? ? 5.CRUSH預先考慮到pool ID相同的PG ID(如4.0x58)。

PG與OSD

? ? ? ? ?由PG映射到數據存儲的實際單元OSD中,該映射是由CRUSH算法來確定的,將PG ID作為該算法的輸入,獲得到包含N個OSD的集合,集合中第一個OSD被作為主OSD,其他的OSD則依次作為從OSD。N為該PG所在POOL下的副本數目,在生產環境N一般為3;OSD集合中的OSD將共同存儲和維護該PG下的Object。需要注意的是,CRUSH算法的結果不是絕對不變的,而是受其他因素的影響。其影響因素主要有以下兩個。
? ? ? ? ?一是當前系統狀態。也就是上文邏輯結構中曾經提及的Cluster Map(集群映射)。當系統中的OSD狀態、數量發生變化 時,Cluster Map可能發生變化,而這種變化將會影響到PG到OSD之間的映射。
? ? ? ? ? 二是存儲策略配置。這里的策略主要與安全相關。利用策略配置,系統管理員可以指定承載同一個PG的3個OSD分別位于數據中心的不同服務器乃至機架上,從而進一步改善存儲的可靠性。

? ? ? ? ?因此,只有在Cluster Map和存儲策略都不發生變化的時候,PG和OSD之間的映射關系才是固定不變的。在實際使用中,策略一經配置通常不會改變。而系統狀態的改變或者是因為設備損壞,或者是因為存儲集群規模擴大。好在Ceph本身提供了對于這種變化的自動化支持,因而,即便PG與OSD之間的映射關系發生了變化,并不會對應用造成困擾。事實上,Ceph正是需要有目的的利用這種動態映射關系。正是利用了CRUSH的動態特性,Ceph才可以將一個PG根據需要動態遷移到不同的OSD組合上,從而自動化地實現高可靠性、數據分布re-blancing等特性。

? ? ? ? 之所以在此次映射中使用CRUSH算法,而不是其他Hash算法,原因之一是CRUSH具有上述可配置特性,可以根據管理員的配置參數決定OSD的物理位置映射策略;另一方面是因為CRUSH具有特殊的“穩定性”,也就是當系統中加入新的OSD導致系統規模增大時,大部分PG與OSD之間的映射關系不會發生改變,只是少部分PG的映射關系會發生變化并引發數據遷移。這種可配置性和穩定性都不是普通Hash算法所能提供的。因此,CRUSH算法的設計也是Ceph的核心內容之一。

PG與Pool

? ? ? ? ? Ceph存儲系統支持“池”(pool)的概念,這是存儲對象的邏輯分區。

? ? ? ? ? Ceph Client端從Ceph mon端檢索Cluster Map,寫入對象到pool。Pool的副本數目,Crush規則和PG數目決定了Ceph將數據存儲的位置,如圖:

調用關系圖

? ? ? ? ? ? Pool至少需要設定以下參數:
? ? ? ? ? ? ? ? ? ? ◎ ?對象的所有權/訪問權
? ? ? ? ? ? ? ? ? ? ? PG數目
? ? ? ? ? ? ? ? ? ? ? 該Pool使用的CRUSH規則
? ? ? ? ? ? ? ? ? ? ? ?對象副本的數目

CRUSH關系分析

? ? ? ? ? 從本質上講,CRUSH算法是通過存儲設備的權重來計算數據對象的分布的。在計算過程中,通過Cluster Map(集群映射)、Data Distribution Policy(數據分布策略)和給出的一個隨機數共同決定數據對象的最終位置。

Cluster Map

? ? ? ? Cluster Map記錄所有可用的存儲資源及相互之間的空間層次結構(集群中有多少個機架、機架上有多少服務器、每個機器上有多少磁盤等信息)。所謂的Map,顧名思義,就是類似于我們生活中的地圖。在Ceph存儲里,數據的索引都是通過各種不同的Map來實現的。另一方面,Map使得Ceph集群存儲設備在物理層作了一層防護。例如,在多副本結構上,通過設備合理的Map(故障域設置為Host級),可以保證在某一服務器死機的情況下,有其他副本保留在正常的存儲節點上,能夠繼續提供服務,實現存儲的高可用。設置更高的故障域級別(如Rack、Row等)能保證整機柜或同一排機柜在掉電情況下數據的可用性和完整性。

1.Cluster Map的分層結構

? ? ? ? ?Cluster Map由Device和Bucket構成。它們都有自己的ID和權重值,并且形成一個以Device為葉子節點、Bucket為軀干的樹狀結果。

CRUSH架構圖

? ? ? ? ? ? Bucket擁有不同的類型,如Host、Row、Rack、Room等,通常我們默認把機架類型定義為Rack,主機類型定義為Host,數據中心(IDC機房)定義為Data Center。Bucket的類型都是虛擬結構,可以根據自己的喜好設計合適的類型。Device節點的權重值代表了存儲設備的容量與性能。其中,磁盤容量是權重大小的關鍵因素。

? ? ? ? ? OSD的權重值越高,對應磁盤會被分配寫入更多的數據。總體來看,數據會被均勻寫入分布于集群所有磁盤,從而提高整體性能和可靠性。無論磁盤的規格容量,總能夠均勻使用。

? ? ? ? ? 關于OSD權重值的大小值的配比,官方默認值設置為1TB容量的硬盤,對應權重值為1.可以在/etc/init.d/ceph原碼里查看相關的內容。

2.恢復與動態平衡

? ? ? ? ? 在默認設置下,當集群里有組件出現故障時(主要是OSD,也可能是磁盤或者網絡等),Ceph會把OSD標記為down,如果在300s內未能回復,集群就會開始進行恢復狀態。這個“300s”可以通過"mon osd down ourt interval“配置選項修改等待時間。PG(Placement Groups)是Ceph數據管理(包括復制、修復等動作)單元。當客戶端把讀寫請求(對象單元)推送到Ceph時,通過CRUSH提供的Hash算法把對象映射到PG。PG在CRUSH策略的影響下,最終會被映射到OSD上。

Data Distribution Policy

? ? ? ? ? ? ?Data Distribution Policy由Placement Rules組成。Rule決定了每個數據對象有多少個副本,這些副本存儲的限制條件(比如3個副本放在不同的機架中)。一個典型的rule如下所示:

rule replicated_ruleset ? ? {? ##rule名字
? ? ? ruleset 0? ? ? ? ? ? ? ? ? ? #rule的ID
? ? ? type replicated? ? ? ? ##類型為副本模式,另外一種模式為糾刪碼(EC)
? ? ? min_size 1? ? ? ? ? ? ? ##如果存儲池的副本數大于這個值,此rule不會應用
? ? ? max_size 10 ? ? ? ? ? ##如果存儲池的副本數大于這個值,此rule不會應用
? ? ? step take default ? ?##以default root 為入口
? ? ? step chooseleaf firstn 0 type host ? ##隔離城為host級,即不同副本在不同的主機上
? ? ? step emit ? ? ? ? ? ? ? ? ##提交

}

根據實際的設備環境,可以定制符合自己需求的Rule。

CRUSH中的偽隨機

? ? ? ? ? ? CRUSH(x) -> (osd1,osd2……osd N)

? ? ? ? ? CRUSH使用了多參數的Hash函數在Hash之后,映射都是按既定規則選擇的,這使得從x到OSD的集合是確定的和獨立的。CRUSH只使用Cluster Map、Placement Rules、X。CRUSH是偽隨機算法,相似輸入的結果之間沒有相關性。

? ? ? ? ? ? PGP是PG的邏輯承載體,是CRUSH算法不可缺少的部分。在Ceph集群里,增加PG數量,PG到OSD的映射關系就會發生變化,但此時存儲在PG里的數據并興地發生遷移,只有當PGP的數量也增加時,數據遷移才會真正開始。關于PG和PGP的關系,假如把PG比作參加宴會的人,那么PGP就是人坐的椅子,如果人員增加時,人的座位排序就會發生變化,只有增加椅子時,真正的座位排序變更才會落實。因此,人和椅子的數量一般都保持一致。所以,在ceph里,通常把PGP和PG設置成一致的。

查看PG映射OSD的集合,即PG具體分配到OSD的歸屬。

ceph pg dump | grep ^22\. | awk '{print $1 "\t" $17}'

? ? ? ? ? ?在Ceph集群里,當有數據對象要寫入集群時,需要進行兩次映射,第一次從object-->PG,第2次是PG-->OSD set 。每一次的映射都是與其他對象無相關的,這充分體現了CRUSH的獨立性(充分分散)和確定性(可確定的存儲位置)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容

  • ceph簡介 Ceph是一個分布式存儲系統,誕生于2004年,是最早致力于開發下一代高性能分布式文件系統的項目。隨...
    愛吃土豆的程序猿閱讀 6,063評論 0 21
  • RADOS系統主要由兩個部分組成:◎ OSD:由數目可變的大規模OSD(Object Storage Device...
    Cindy_lina閱讀 2,114評論 0 7
  • 集群管理 每次用命令啟動、重啟、停止Ceph守護進程(或整個集群)時,必須指定至少一個選項和一個命令,還可能要指定...
    Arteezy_Xie閱讀 19,216評論 0 19
  • 一、概述 Ceph是一個分布式存儲系統,誕生于2004年,最早致力于開發下一代高性能分布式文件系統的項目。隨著云計...
    魏鎮坪閱讀 49,456評論 3 54
  • 朱 榮澤| 2013.09.09 https://www.ustack.com/blog/ceph_infra/ ...
    守望者_1065閱讀 2,526評論 0 1