电竞比分网-中国电竞赛事及体育赛事平台

分享

Ceph:一個 Linux PB 級分布式文件系統(tǒng)

 江湖小蝦413 2015-12-15

聯(lián)系 Tim

Tim 是最受歡迎,作品最多的四位作者之一。瀏覽 developerWorks 上 Tim 的所有文章。查看 Tim 的個人簡介,聯(lián)系他和其他作者,以及在 My developerWorks 中的其他讀者。

作為一名存儲行業(yè)的架構師,我對文件系統(tǒng)情有獨鐘。這些系統(tǒng)用來存儲系統(tǒng)的用戶界面,雖然它們傾向于提供一系列類似的功能,但它們還能夠提供差異顯著的功能。Ceph 也不例外,它還提供一些您能在文件系統(tǒng)中找到的最有趣的功能。

Ceph 最初是一項關于存儲系統(tǒng)的 PhD 研究項目,由 Sage Weil 在 University of California, Santa Cruz(UCSC)實施。但是到了 2010 年 3 月底,您可以在主線 Linux 內核(從 2.6.34 版開始)中找到 Ceph 的身影。雖然 Ceph 可能還不適用于生產(chǎn)環(huán)境,但它對測試目的還是非常有用的。本文探討了 Ceph 文件系統(tǒng)及其獨有的功能,這些功能讓它成為可擴展分布式存儲的最有吸引力的備選。

Ceph 目標

為什么選 “Ceph”?

“Ceph” 對一個文件系統(tǒng)來說是個奇怪的名字,它打破了大多數(shù)人遵循的典型縮寫趨勢。這個名字和 UCSC(Ceph 的誕生地)的吉祥物有關,這個吉祥物是 “Sammy”,一個香蕉色的蛞蝓,就是頭足類中無殼的軟體動物。這些有多觸角的頭足類動物,提供了一個分布式文件系統(tǒng)的最形象比喻。

開發(fā)一個分布式文件系統(tǒng)需要多方努力,但是如果能準確地解決問題,它就是無價的。Ceph 的目標簡單地定義為:

  • 可輕松擴展到數(shù) PB 容量
  • 對多種工作負載的高性能(每秒輸入/輸出操作[IOPS]和帶寬)
  • 高可靠性

不幸的是,這些目標之間會互相競爭(例如,可擴展性會降低或者抑制性能或者影響可靠性)。Ceph 開發(fā)了一些非常有趣的概念(例如,動態(tài)元數(shù)據(jù)分區(qū),數(shù)據(jù)分布和復制),這些概念在本文中只進行簡短地探討。Ceph 的設計還包括保護單一點故障的容錯功能,它假設大規(guī)模(PB 級存儲)存儲故障是常見現(xiàn)象而不是例外情況。最后,它的設計并沒有假設某種特殊工作負載,但是包括適應變化的工作負載,提供最佳性能的能力。它利用 POSIX 的兼容性完成所有這些任務,允許它對當前依賴 POSIX 語義(通過以 Ceph 為目標的改進)的應用進行透明的部署。最后,Ceph 是開源分布式存儲,也是主線 Linux 內核(2.6.34)的一部分。

回頁首

Ceph 架構

現(xiàn)在,讓我們探討一下 Ceph 的架構以及高端的核心要素。然后我會拓展到另一層次,說明 Ceph 中一些關鍵的方面,提供更詳細的探討。

Ceph 生態(tài)系統(tǒng)可以大致劃分為四部分(見圖 1):客戶端(數(shù)據(jù)用戶),元數(shù)據(jù)服務器(緩存和同步分布式元數(shù)據(jù)),一個對象存儲集群(將數(shù)據(jù)和元數(shù)據(jù)作為對象存儲,執(zhí)行其他關鍵職能),以及最后的集群監(jiān)視器(執(zhí)行監(jiān)視功能)。

圖 1. Ceph 生態(tài)系統(tǒng)的概念架構
概念流程圖顯示 Ceph 生態(tài)系統(tǒng)的架構:客戶端,元數(shù)據(jù)服務器集群,對象存儲集群,集群監(jiān)視器

如圖 1 所示,客戶使用元數(shù)據(jù)服務器,執(zhí)行元數(shù)據(jù)操作(來確定數(shù)據(jù)位置)。元數(shù)據(jù)服務器管理數(shù)據(jù)位置,以及在何處存儲新數(shù)據(jù)。值得注意的是,元數(shù)據(jù)存儲在一個存儲集群(標為 “元數(shù)據(jù) I/O”)。實際的文件 I/O 發(fā)生在客戶和對象存儲集群之間。這樣一來,更高層次的 POSIX 功能(例如,打開、關閉、重命名)就由元數(shù)據(jù)服務器管理,不過 POSIX 功能(例如讀和寫)則直接由對象存儲集群管理。

另一個架構視圖由圖 2 提供。一系列服務器通過一個客戶界面訪問 Ceph 生態(tài)系統(tǒng),這就明白了元數(shù)據(jù)服務器和對象級存儲器之間的關系。分布式存儲系統(tǒng)可以在一些層中查看,包括一個存儲設備的格式(Extent and B-tree-based Object File System [EBOFS] 或者一個備選),還有一個設計用于管理數(shù)據(jù)復制,故障檢測,恢復,以及隨后的數(shù)據(jù)遷移的覆蓋管理層,叫做 Reliable Autonomic Distributed Object Storage(RADOS)。最后,監(jiān)視器用于識別組件故障,包括隨后的通知。

圖 2. Ceph 生態(tài)系統(tǒng)簡化后的分層視圖
塊狀圖顯示一個 Ceph 生態(tài)系統(tǒng)簡化后的分層視圖,包括服務器,元數(shù)據(jù)服務器,以及對象存儲 ddaemon

回頁首

Ceph 組件

了解了 Ceph 的概念架構之后,您可以挖掘到另一個層次,了解在 Ceph 中實現(xiàn)的主要組件。Ceph 和傳統(tǒng)的文件系統(tǒng)之間的重要差異之一就是,它將智能都用在了生態(tài)環(huán)境而不是文件系統(tǒng)本身。

圖 3 顯示了一個簡單的 Ceph 生態(tài)系統(tǒng)。Ceph Client 是 Ceph 文件系統(tǒng)的用戶。Ceph Metadata Daemon 提供了元數(shù)據(jù)服務器,而 Ceph Object Storage Daemon 提供了實際存儲(對數(shù)據(jù)和元數(shù)據(jù)兩者)。最后,Ceph Monitor 提供了集群管理。要注意的是,Ceph 客戶,對象存儲端點,元數(shù)據(jù)服務器(根據(jù)文件系統(tǒng)的容量)可以有許多,而且至少有一對冗余的監(jiān)視器。那么,這個文件系統(tǒng)是如何分布的呢?

圖 3. 簡單的 Ceph 生態(tài)系統(tǒng)
一個簡單 Ceph 生態(tài)系統(tǒng)的塊狀圖

Ceph 客戶端

內核或用戶空間

早期版本的 Ceph 利用在 User SpacE(FUSE)的 Filesystems,它把文件系統(tǒng)推入到用戶空間,還可以很大程度上簡化其開發(fā)。但是今天,Ceph 已經(jīng)被集成到主線內核,使其更快速,因為用戶空間上下文交換機對文件系統(tǒng) I/O 已經(jīng)不再需要。

因為 Linux 顯示文件系統(tǒng)的一個公共界面(通過虛擬文件系統(tǒng)交換機 [VFS]),Ceph 的用戶透視圖就是透明的。管理員的透視圖肯定是不同的,考慮到很多服務器會包含存儲系統(tǒng)這一潛在因素(要查看更多創(chuàng)建 Ceph 集群的信息,見 參考資料 部分)。從用戶的角度看,他們訪問大容量的存儲系統(tǒng),卻不知道下面聚合成一個大容量的存儲池的元數(shù)據(jù)服務器,監(jiān)視器,還有獨立的對象存儲設備。用戶只是簡單地看到一個安裝點,在這點上可以執(zhí)行標準文件 I/O。

Ceph 文件系統(tǒng) — 或者至少是客戶端接口 — 在 Linux 內核中實現(xiàn)。值得注意的是,在大多數(shù)文件系統(tǒng)中,所有的控制和智能在內核的文件系統(tǒng)源本身中執(zhí)行。但是,在 Ceph 中,文件系統(tǒng)的智能分布在節(jié)點上,這簡化了客戶端接口,并為 Ceph 提供了大規(guī)模(甚至動態(tài))擴展能力。

Ceph 使用一個有趣的備選,而不是依賴分配列表(將磁盤上的塊映射到指定文件的元數(shù)據(jù))。Linux 透視圖中的一個文件會分配到一個來自元數(shù)據(jù)服務器的 inode number(INO),對于文件這是一個唯一的標識符。然后文件被推入一些對象中(根據(jù)文件的大?。?。使用 INO 和 object number(ONO),每個對象都分配到一個對象 ID(OID)。在 OID 上使用一個簡單的哈希,每個對象都被分配到一個放置組。放置組(標識為 PGID)是一個對象的概念容器。最后,放置組到對象存儲設備的映射是一個偽隨機映射,使用一個叫做 Controlled Replication Under Scalable Hashing(CRUSH)的算法。這樣一來,放置組(以及副本)到存儲設備的映射就不用依賴任何元數(shù)據(jù),而是依賴一個偽隨機的映射函數(shù)。這種操作是理想的,因為它把存儲的開銷最小化,簡化了分配和數(shù)據(jù)查詢。

分配的最后組件是集群映射。集群映射 是設備的有效表示,顯示了存儲集群。有了 PGID 和集群映射,您就可以定位任何對象。

Ceph 元數(shù)據(jù)服務器

元數(shù)據(jù)服務器(cmds)的工作就是管理文件系統(tǒng)的名稱空間。雖然元數(shù)據(jù)和數(shù)據(jù)兩者都存儲在對象存儲集群,但兩者分別管理,支持可擴展性。事實上,元數(shù)據(jù)在一個元數(shù)據(jù)服務器集群上被進一步拆分,元數(shù)據(jù)服務器能夠自適應地復制和分配名稱空間,避免出現(xiàn)熱點。如圖 4 所示,元數(shù)據(jù)服務器管理名稱空間部分,可以(為冗余和性能)進行重疊。元數(shù)據(jù)服務器到名稱空間的映射在 Ceph 中使用動態(tài)子樹邏輯分區(qū)執(zhí)行,它允許 Ceph 對變化的工作負載進行調整(在元數(shù)據(jù)服務器之間遷移名稱空間)同時保留性能的位置。

圖 4. 元數(shù)據(jù)服務器的 Ceph 名稱空間的分區(qū)
圖表顯示元數(shù)據(jù)服務器的 Ceph 名稱空間的分區(qū)

但是因為每個元數(shù)據(jù)服務器只是簡單地管理客戶端人口的名稱空間,它的主要應用就是一個智能元數(shù)據(jù)緩存(因為實際的元數(shù)據(jù)最終存儲在對象存儲集群中)。進行寫操作的元數(shù)據(jù)被緩存在一個短期的日志中,它最終還是被推入物理存儲器中。這個動作允許元數(shù)據(jù)服務器將最近的元數(shù)據(jù)回饋給客戶(這在元數(shù)據(jù)操作中很常見)。這個日志對故障恢復也很有用:如果元數(shù)據(jù)服務器發(fā)生故障,它的日志就會被重放,保證元數(shù)據(jù)安全存儲在磁盤上。

元數(shù)據(jù)服務器管理 inode 空間,將文件名轉變?yōu)樵獢?shù)據(jù)。元數(shù)據(jù)服務器將文件名轉變?yōu)樗饕?jié)點,文件大小,和 Ceph 客戶端用于文件 I/O 的分段數(shù)據(jù)(布局)。

Ceph 監(jiān)視器

Ceph 包含實施集群映射管理的監(jiān)視器,但是故障管理的一些要素是在對象存儲本身中執(zhí)行的。當對象存儲設備發(fā)生故障或者新設備添加時,監(jiān)視器就檢測和維護一個有效的集群映射。這個功能按一種分布的方式執(zhí)行,這種方式中映射升級可以和當前的流量通信。Ceph 使用 Paxos,它是一系列分布式共識算法。

Ceph 對象存儲

和傳統(tǒng)的對象存儲類似,Ceph 存儲節(jié)點不僅包括存儲,還包括智能。傳統(tǒng)的驅動是只響應來自啟動者的命令的簡單目標。但是對象存儲設備是智能設備,它能作為目標和啟動者,支持與其他對象存儲設備的通信和合作。

從存儲角度來看,Ceph 對象存儲設備執(zhí)行從對象到塊的映射(在客戶端的文件系統(tǒng)層中常常執(zhí)行的任務)。這個動作允許本地實體以最佳方式?jīng)Q定怎樣存儲一個對象。Ceph 的早期版本在一個名為 EBOFS 的本地存儲器上實現(xiàn)一個自定義低級文件系統(tǒng)。這個系統(tǒng)實現(xiàn)一個到底層存儲的非標準接口,這個底層存儲已針對對象語義和其他特性(例如對磁盤提交的異步通知)調優(yōu)。今天,B-tree 文件系統(tǒng)(BTRFS)可以被用于存儲節(jié)點,它已經(jīng)實現(xiàn)了部分必要功能(例如嵌入式完整性)。

因為 Ceph 客戶實現(xiàn) CRUSH,而且對磁盤上的文件映射塊一無所知,下面的存儲設備就能安全地管理對象到塊的映射。這允許存儲節(jié)點復制數(shù)據(jù)(當發(fā)現(xiàn)一個設備出現(xiàn)故障時)。分配故障恢復也允許存儲系統(tǒng)擴展,因為故障檢測和恢復跨生態(tài)系統(tǒng)分配。Ceph 稱其為 RADOS(見 圖 3)。

回頁首

其他有趣功能

如果文件系統(tǒng)的動態(tài)和自適應特性不夠,Ceph 還執(zhí)行一些用戶可視的有趣功能。用戶可以創(chuàng)建快照,例如,在 Ceph 的任何子目錄上(包括所有內容)。文件和容量計算可以在子目錄級別上執(zhí)行,它報告一個給定子目錄(以及其包含的內容)的存儲大小和文件數(shù)量。

回頁首

Ceph 的地位和未來

雖然 Ceph 現(xiàn)在被集成在主線 Linux 內核中,但只是標識為實驗性的。在這種狀態(tài)下的文件系統(tǒng)對測試是有用的,但是對生產(chǎn)環(huán)境沒有做好準備。但是考慮到 Ceph 加入到 Linux 內核的行列,還有其創(chuàng)建人想繼續(xù)研發(fā)的動機,不久之后它應該就能用于解決您的海量存儲需要了。

回頁首

其他分布式文件系統(tǒng)

Ceph 在分布式文件系統(tǒng)空間中并不是唯一的,但它在管理大容量存儲生態(tài)環(huán)境的方法上是獨一無二的。分布式文件系統(tǒng)的其他例子包括 Google File System(GFS),General Parallel File System(GPFS),還有 Lustre,這只提到了一部分。Ceph 背后的想法為分布式文件系統(tǒng)提供了一個有趣的未來,因為海量級別存儲導致了海量存儲問題的唯一挑戰(zhàn)。

回頁首

展望未來

Ceph 不只是一個文件系統(tǒng),還是一個有企業(yè)級功能的對象存儲生態(tài)環(huán)境。在 參考資料 部分中,您將會找到如何設置一個簡單 Ceph 集群(包括元數(shù)據(jù)服務器,對象存儲服務器和監(jiān)視器)的信息。Ceph 填補了分布式存儲中的空白,看到這個開源產(chǎn)品如何在未來演變也將會是很有趣的。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多