天天看點

Ceph分布式存儲實2.2 RADOS架構

<b>2.2 rados架構</b>

<b></b>

rados系統主要由兩個部分組成,如圖2-2所示。

1)osd:由數目可變的大規模osd(object storage devices)組成的叢集,負責存儲所有的objects資料。

2)monitor:由少量monitors組成的強耦合、小規模叢集,負責管理cluster map。其中,cluster map是整個rados系統的關鍵資料結構,管理叢集中的所有成員、關系和屬性等資訊以及資料的分發。

圖2-2 rados系統架構圖示

對于rados系統,節點組織管理和資料分發政策均由内部的mon全權負責,是以,從client角度設計相對比較簡單,它給應用提供存儲接口。

2.2.1 monitor介紹

正如其名,ceph monitor是負責監視整個群集的運作狀況的,這些資訊都是由維護叢集成員的守護程式來提供的,如各個節點之間的狀态、叢集配置資訊。ceph monitor map包括osd map、pg map、mds map和crush等,這些map被統稱為叢集map。

1)monitor map。monitor map包括有關monitor節點端到端的資訊,其中包括ceph叢集id,監控主機名和ip位址和端口号,它還存儲了目前版本資訊以及最新更改資訊,可以通過以下指令檢視monitor map。

#ceph mon dump

2)osd map。osd map包括一些常用的資訊,如叢集id,建立osd map的版本資訊和最後修改資訊,以及pool相關資訊,pool的名字、pool的id、類型,副本數目以及pgp,還包括osd資訊,如數量、狀态、權重、最新的清潔間隔和osd主機資訊。可以通過執行以下指令檢視叢集的osd map。

#ceph  osd dump

3)pg map。pg map包括目前pg版本、時間戳、最新的osd map的版本資訊、空間使用比例,以及接近占滿比例資訊,同時,也包括每個pg id、對象數目、狀态、osd的狀态以及深度清理的詳細資訊,可以通過以下指令來檢視pg map。

#ceph pg dump

4)crush map。crush map包括叢集儲存設備資訊,故障域層次結構和存儲資料時定義失敗域規則資訊;可以通過以下指令檢視crush map。

#ceph osd crush dump

5)mds map。mds map包括存儲目前mds map的版本資訊、建立目前map的資訊、修改時間、資料和中繼資料pool id、叢集mds數目和mds狀态,可通過以下指令檢視叢集mds map資訊。

#ceph mds dump

ceph的mon服務利用paxos的執行個體,把每個映射圖存儲為一個檔案。ceph monitor并未為客戶提供資料存儲服務,而是為ceph叢集維護着各類map,并服務更新群集映射到客戶機以及其他叢集節點。用戶端和其他群集節點定期檢查并更新于monitor的叢集map最新的副本。

ceph monitor是個輕量級的守護程序,通常情況下并不需要大量的系統資源,低成本、入門級的cpu,以及千兆網卡即可滿足大多數的場景;與此同時,monitor節點需要有足夠的磁盤空間來存儲叢集日志,健康叢集産生幾mb到gb的日志;然而,如果存儲的需求增加時,打開低等級的日志資訊的話,可能需要幾個gb的磁盤空間來存儲日志。

一個典型的ceph叢集包含多個monitor節點。一個多monitor的ceph的架構通過法定人數來選擇leader,并在提供一緻分布式決策時使用paxos算法叢集。在ceph叢集中有多個monitor時,叢集的monitor應該是奇數;最起碼的要求是一台螢幕節點,這裡推薦monitor個數是3。由于monitor工作在法定人數,一半以上的總螢幕節點應該總是可用的,以應對當機等極端情況,這是monitor節點為n(n&gt;0)個且n為奇數的原因。所有叢集monitor節點,其中一個節點為leader。如果leader monitor節點處于不可用狀态,其他顯示器節點有資格成為leader。生産群集必須至少有n/2個監控節點提供高可用性。

2.2.2 ceph osd簡介

ceph osd是ceph存儲叢集最重要的元件,ceph osd将資料以對象的形式存儲到叢集中每個節點的實體磁盤上,完成存儲使用者資料的工作絕大多數都是由osd deamon程序來實作的。

ceph叢集一般情況都包含多個osd,對于任何讀寫操作請求,client端從ceph monitor擷取cluster map之後,client将直接與osd進行i/o操作的互動,而不再需要ceph monitor幹預。這使得資料讀寫過程更為迅速,因為這些操作過程不像其他存儲系統,它沒有其他額外的層級資料處理。

ceph的核心功能特性包括高可靠、自動平衡、自動恢複和一緻性。對于ceph osd而言,基于配置的副本數,ceph提供通過分布在多節點上的副本來實作,使得ceph具有高可用性以及容錯性。在osd中的每個對象都有一個主副本,若幹個從副本,這些副本預設情況下是分布在不同節點上的,這就是ceph作為分布式存儲系統的集中展現。每個osd都可能作為某些對象的主osd,與此同時,它也可能作為某些對象的從osd,從osd受到主osd的控制,然而,從osd在某些情況也可能成為主osd。在磁盤故障時,ceph osd deamon的智能對等機制将協同其他osd執行恢複操作。在此期間,存儲對象副本的從osd将被提升為主osd,與此同時,新的從副本将重新生成,這樣就保證了ceph的可靠和一緻。

ceph osd架構實作由實體磁盤驅動器、在其之上的linux檔案系統以及ceph osd服務組成。對ceph osd deamon而言,linux檔案系統顯性地支援了其擴充屬性;這些檔案系統的擴充屬性提供了關于對象狀态、快照、中繼資料内部資訊;而通路ceph osd deamon的acl則有助于資料管理,如圖2-3所示。

ceph osd操作必須在一個有效的linux分區的實體磁盤驅動器上,linux分區可以是btrfs、xfs或者ext4分區,檔案系統是對性能基準測試的主要标準之一,下面來逐一了解。

1)btrfs:在btrfs檔案系統的osd相比于xfs和ext4提供了最好的性能。btrfs的主要優點有以下4點。

擴充性(scalability):btrfs最重要的設計目标是應對大型機器對檔案系統的擴充性要求。extent、b-tree和動态inode建立等特性保證了btrfs在大型機器上仍有卓越的表現,其整體性能不會随着系統容量的增加而降低。

資料一緻性(data integrity):當系統面臨不可預料的硬體故障時,btrfs采用 cow事務技術來保證檔案系統的一緻性。btrfs還支援校驗和,避免了silent corrupt(未知錯誤)的出現。而傳統檔案系統無法做到這一點。

多裝置管理相關的特性:btrfs支援建立快照(snapshot)和克隆(clone)。btrfs還能夠友善地管理多個實體裝置,使得傳統的卷管理軟體變得多餘。

結合ceph,btrfs中的諸多優點中的快照,journal of parallel(并行日志)等優勢在ceph中表現得尤為突出,不幸的是,btrfs還未能到達生産環境要求的健壯要求。暫不推薦用于ceph叢集的生産使用。

2)xfs:一種高性能的日志檔案系統,xfs特别擅長處理大檔案,同時提供平滑的資料傳輸。目前centos 7也将xfs+lvm作為預設的檔案系統。xfs的主要優點如下。

配置設定組:xfs檔案系統内部被分為多個“配置設定組”,它們是檔案系統中的等長線性存儲區。每個配置設定組各自管理自己的inode和剩餘空間。檔案和檔案夾可以跨越配置設定組。這一機制為xfs提供了可伸縮性和并行特性——多個線程和程序可以同時在同一個檔案系統上執行i/o操作。這種由配置設定組帶來的内部分區機制在一個檔案系統跨越多個實體裝置時特别有用,使得優化對下級存儲部件的吞吐量使用率成為可能。

條帶化配置設定:在條帶化raid陣列上建立xfs檔案系統時,可以指定一個“條帶化資料單元”。這可以保證資料配置設定、inode配置設定,以及内部日志被對齊到該條帶單元上,以此最大化吞吐量。

基于extent的配置設定方式:xfs檔案系統中的檔案用到的塊由變長extent管理,每一個extent描述了一個或多個連續的塊。對那些把檔案所有塊都單獨列出來的檔案系統來說,extent大幅縮短了清單。

有些檔案系統用一個或多個面向塊的位圖管理空間配置設定——在xfs中,這種結構被由一對b+樹組成的、面向extent的結構替代了;每個檔案系統配置設定組(ag)包含這樣的一個結構。其中,一個b+樹用于索引未被使用的extent的長度,另一個索引這些extent的起始塊。這種雙索引政策使得檔案系統在定位剩餘空間中的extent時十分高效。

擴充屬性:xfs通過實作擴充檔案屬性給檔案提供了多個資料流,使檔案可以被附加多個名/值對。檔案名是一個最大長度為256位元組的、以null字元結尾的可列印字元串,其他的關聯值則可包含多達64kb的二進制資料。這些資料被進一步分入兩個名字空間中,分别為root和user。儲存在root名字空間中的擴充屬性隻能被超級使用者修改,儲存在user名字空間中的可以被任何對該檔案擁有寫權限的使用者修改。擴充屬性可以被添加到任意一種 xfs inode上,包括符号連結、裝置節點和目錄等。可以使用attr指令行程式操作這些擴充屬性。xfsdump和xfsrestore工具在進行備份和恢複時會一同操作擴充屬性,而其他的大多數備份系統則會忽略擴充屬性。

xfs作為一款可靠、成熟的,并且非常穩定的檔案系統,基于配置設定組、條帶化配置設定、基于extent的配置設定方式、擴充屬性等優勢非常契合ceph osd服務的需求。美中不足的是,xfs不能很好地處理ceph寫入過程的journal問題。

3)ext4:第四代擴充檔案系統,是linux系統下的日志檔案系統,是ext3檔案系統的後繼版本。其主要特征如下。

大型檔案系統:ext4檔案系統可支援最高1 exbibyte的分區與最大16 tebibyte的檔案。

extents:ext4引進了extent檔案存儲方式,以替換ext2/3使用的塊映射(block mapping)方式。extent指的是一連串的連續實體塊,這種方式可以增加大型檔案的效率并減少分裂檔案。

日志校驗和:ext4使用校驗和特性來提高檔案系統可靠性,因為日志是磁盤上被讀取最頻繁的部分之一。

快速檔案系統檢查:ext4将未使用的區塊标記在inode當中,這樣可以使諸如e2fsck之類的工具在磁盤檢查時将這些區塊完全跳過,而節約大量的檔案系統檢查的時間。這個特性已經在2.6.24版本的linux核心中實作。

ceph osd把底層檔案系統的擴充屬性用于表示各種形式的内部對象狀态和中繼資料。xattr是以key/value形式來存儲xattr_name和xattr_value,并是以提供更多的标記對象中繼資料資訊的方法。ext4檔案系統提供不足以滿足xattr,由于xattr上存儲的位元組數的限制能力,進而使ext4檔案系統不那麼受歡迎。然而,btrfs和xfs有一個比較大的限制xattr。

ceph使用日志檔案系統,如增加了btrfs和xfs的osd。在送出資料到後備存儲器之前,ceph首先将資料寫入稱為一個單獨的存儲區,該區域被稱為journal,這是緩沖器分區在相同或單獨磁盤作為osd,一個單獨的ssd磁盤或分區,甚至一個檔案檔案系統。在這種機制下,ceph任何寫入首先是日志,然後是後備存儲,如圖2-4所示。

圖2-4 io流向圖

journal持續到後備存儲同步,每隔5s。預設情況下。10gb是該jouranl的常用的大小,但journal空間越大越好。ceph使用journal綜合考慮了存儲速度和資料的一緻性。journal允許ceph osd功能很快做小的寫操作;一個随機寫入首先寫入在上一個連續類型的journal,然後重新整理到檔案系統。這給了檔案系統足夠的時間來合并寫入磁盤。使用ssd盤作為journal盤能獲得相對較好的性能。在這種情況下,所有的用戶端寫操作都寫入到超高速ssd日志,然後重新整理到磁盤。是以,一般情況下,使用ssd作為osd的journal可以有效緩沖突發負載。

與傳統的分布式資料存儲不同,rados最大的特點如下。

① 将檔案映射到object後,利用cluster map通過crush計算而不是查找表方式定位檔案資料到儲存設備中的位置。優化了傳統的檔案到塊的映射和blockmap管理。

② rados充分利用了osd的智能特點,将部分任務授權給osd,最大程度地實作可擴充。

繼續閱讀