天天看點

Ceph分布式存儲實戰1.3 Ceph架構和設計思想

<b>1.3 ceph架構和設計思想</b>

<b></b>

1. ceph架構

ceph底層核心是rados。ceph架構圖如圖1-3所示。

圖1-3 ceph架構圖

rados:rados具備自我修複等特性,提供了一個可靠、自動、智能的分布式存儲。

librados:librados庫允許應用程式直接通路,支援c/c++、java和python等語言。

radosgw:radosgw 是一套基于目前流行的restful協定的網關,并且相容s3和swift。

rbd:rbd通過linux 核心(kernel)用戶端和qemu/kvm驅動,來提供一個完全分布式的塊裝置。

ceph fs:ceph fs通過linux核心(kernel)用戶端結合fuse,來提供一個相容posix的檔案系統。

具體的rados細節以及rados的靈魂crush(controlled replication under scalable hashing,可擴充雜湊演算法的可控複制)算法,這兩個知識點會在後面的第2、3章詳細介紹和分析。

2. ceph設計思想

ceph是一個典型的起源于學術研究課題的開源項目。雖然學術研究所學生涯對于sage而言隻是其光輝事迹的短短一篇,但畢竟還是有幾篇學術論文可供參考的。可以根據sage的幾篇論文分析ceph的設計思想。

了解ceph的設計思想,首先還是要了解sage設計ceph時所針對的應用場景,換句話說,sage當初做ceph的初衷的什麼?

事實上,ceph最初針對的應用場景,就是大規模的、分布式的存儲系統。所謂“大規模”和“分布式”,至少是能夠承載pb級别的資料和成千上萬的存儲節點組成的存儲叢集。

如今雲計算、大資料在中國發展得如火如荼,pb容量機關早已經進入國内企業存儲采購單,dt時代即将來臨。ceph項目起源于2004年,那是一個商用處理器以單核為主流,常見硬碟容量隻有幾十gb的年代。當時ssd也沒有大規模商用,正因如此,ceph之前版本對ssd的支援不是很好,發揮不了ssd的性能。如今ceph高性能面臨的最大挑戰正是這些曆史原因,目前社群和業界正在逐漸解決這些性能上的限制。

在sage的思想中,我們首先說一下ceph的技術特性,總體表現在叢集可靠性、叢集擴充性、資料安全性、接口統一性4個方面。

叢集可靠性:所謂“可靠性”,首先從使用者角度來說資料是第一位的,要盡可能保證資料不會丢失。其次,就是資料寫入過程中的可靠性,在使用者将資料寫入ceph存儲系統的過程中,不會因為意外情況出現而造成資料丢失。最後,就是降低不可控實體因素的可靠性,避免因為機器斷電等不可控實體因素而産生的資料丢失。

叢集可擴充性:這裡的“可擴充”概念是廣義的,既包括系統規模和存儲容量的可擴充,也包括随着系統節點數增加的聚合資料通路帶寬的線性擴充。

資料安全性:所謂“資料安全性”,首先要保證由于伺服器當機或者是偶然停電等自然因素的産生,資料不會丢失,并且支援資料自動恢複,自動重平衡等。總體而言,這一特性既保證了系統的高度可靠和資料絕對安全,又保證了在系統規模擴大之後,其運維難度仍能保持在一個相對較低的水準。

接口統一性:所謂“接口統一”,本書開頭就說到了ceph可以同時支援3種存儲,即塊存儲、對象存儲和檔案存儲。ceph支援市面上所有流行的存儲類型。

根據上述技術特性以及sage的論文,我們來分析一下ceph的設計思路,概述為兩點:充分發揮存儲本身計算能力和去除所有的中心點。

充分發揮儲存設備自身的計算能力:其實就是采用廉價的裝置和具有計算能力的裝置(最簡單的例子就是普通的伺服器)作為存儲系統的存儲節點。sage認為目前階段隻是将這些伺服器當做功能簡單的存儲節點,進而産生資源過度浪費(如同虛拟化的思想一樣,都是為了避免資源浪費)。而如果充分發揮節點上的計算能力,則可以實作前面提出的技術特性。這一點成為了ceph系統設計的核心思想。

去除所有的中心點:搞it的最忌諱的就是單點故障,如果系統中出現中心點,一方面會引入單點故障,另一方面也必然面臨着當系統規模擴大時的可擴充性和性能瓶頸。除此之外,如果中心點出現在資料通路的關鍵路徑上,也必然導緻資料通路的延遲增大。雖然在大多數存儲軟體實踐中,單點故障點和性能瓶頸的問題可以通過為中心點增加ha或備份加以緩解,但ceph系統最終采用crush、hash環等方法更徹底地解決了這個問題。很顯然sage的眼光和設想還是很超前的。