1. 程式人生 > >ceph的學習(一)ceph的概念

ceph的學習(一)ceph的概念

                                               ceph概述

1. 什麼是Ceph?

Ceph的官方網站Ceph.com上用如下這句話簡明扼要地定義了Ceph:

“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”

Ceph是一種分散式儲存系統,所謂分散式,指的是Ceph可以部署在多臺伺服器上,通過多臺伺服器並行處理來對外提供高效能的讀寫塊。同時Ceph除了能提供塊儲存,還可以提供檔案儲存、物件儲存。

2.Ceph的優勢

實際上Ceph不是一個才出現的開源專案,而是走過了 7年的路程,那麼Ceph有什麼樣的優勢呢?

  • Ceph的優勢在於它的設計思想:無需查表,算算就好。也就是說它可以充分利用伺服器的計算能力,消除了對單一中心節點的依賴,可以實現真正的無中心結構

    這樣Ceph的可靠性和可擴充套件性都很強,而且客戶端訪問延遲也比較少;其他特點如:統一儲存能力、效能、自動化的維護

  • Ceph在OpenStack開源社群中備受重視。

    OpenStack是現在最為流行的開源雲作業系統,目前Ceph已經成為OpenStack中呼聲最高的開源儲存方案之一。

  1. 高效能

    a. 摒棄了傳統的集中式儲存元資料定址的方案,採用CRUSH演算法,資料分佈均衡,並行度高。

    b.考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。

    c. 能夠支援上千個儲存節點的規模,支援TB到PB級的資料。

  2. 高可用性

    a. 副本數可以靈活控制。

    b. 支援故障域分隔,資料強一致性。

    c. 多種故障場景自動進行修復自愈。

    d. 沒有單點故障,自動管理。

  3. 高可擴充套件性

    a. 去中心化。

    b. 擴充套件靈活。

    c. 隨著節點增加而線性增長。

  4. 特性豐富

    a. 支援三種儲存介面:塊儲存、檔案儲存、物件儲存。

    b. 支援自定義介面,支援多種語言驅動。

3.Ceph的產生和發展

一般來說開源專案的來源主要有兩個,一個是從學校裡面的一些課題,一個是企業裡面的大牛對產品進行開源。Ceph就是典型的學院派,它起源於Sage Weil博士期間的課題,使用C++開發。

2011年Sage建立了Inktank公司以主導Ceph的開發和社群維護。

4.Ceph的設計思想

4.1Ceph的應用場景

要理解Ceph的設計思想,我們首先應該研究這個東西的應用場景,因為它的應用場景關係到它為什麼這麼設計。

Ceph最初的目標場景是大規模、分散式儲存系統,Ceph起源於04年,那個時候CPU還是單核,硬碟容量只有幾十GB,所以當時的想法是至少能承載PB級別的資料。

而Ceph與傳統的儲存不太一樣的地方在於,它的眼光是動態的

  • 首先是儲存規模是會變的。也就是可以根據業務的規模擴充套件儲存的容量。

  • 儲存的裝置會變。我們使用的不是高可靠性的小機,而是可能發生故障的x86伺服器,所以極有可能某個節點發生故障,那麼需要在軟體層面進行保障。

  • 儲存資料也會變。也就是,需要考慮到儲存的資料可能被增刪讀寫,而不是一層不變的。

這就是Ceph的目標場景,它希望能應對儲存容量會變,同時可以對資料進行快速的增刪讀寫的場景,而且底層的硬體主要使用廉價的X86伺服器,使用上層軟體來保證可靠性。

針對這種場景,Ceph應具有

  • 高可靠性:

    首先儲存在裡面的資料不會丟失,同時資料在寫入的時候,需要保證原子性。

  • 另外因為資料會經常遷移,而且故障了以後會有恢復的過程,我們希望Ceph能自動完成這些工作,而不需要人為參與。

  • 高擴充套件性,就是希望節點數增加了,資料的訪問頻寬也線性增加,不能是節點增加了很多,效能增加不明顯

4.2Ceph的設計思路

那麼Ceph要怎麼樣實現高可靠、高擴充套件,還要同時保證自動化呢?

之前已經概括過,Ceph的主要思路是

  • 充分發生節點的計算能力

    也就是用來代替,這就有物件儲存的思想了。

  • 去中心化。

    我們知道分散式架構一般可以分為有中心的非對稱架構和無中心對稱架構兩種。

    非對稱架構有Master和Slave之分,Master一般存放了資料塊與實際節點的對映關係,所以客戶端會先向Master查詢資料塊存放的位置, 然後再訪問Slave。

    這樣的好處是簡單,缺點是Master節點會出現單點故障,而且也會成為效能瓶頸。

    而對稱節點中每個節點的地位相同,都儲存了全域性的對映關係,所以它們會花大量的功夫來進行對映關係的同步,不利於擴充套件。Ceph則使用了更創新的方法來解決這個問題。下面我們來看看它使用了什麼方法?

對於一個分散式系統,它最關鍵的要解決兩個問題:

  • “寫的問題”,也就是把資料寫到什麼地方。

    寫的方法合不合理,要看最終的資料分佈是否均勻,這又會進一步影響到節點的訪問速度等

  • “讀的問題”,應該從哪裡去讀。

    因為讀的概率遠大於寫,所以能否高效準確的找到之前存放的資料在哪裡,也是儲存的系統應該考慮的非常重要的問題。

之前我們說過對於對稱結構的分散式系統,它會引入專門的節點, 在裡面存放資料塊與節點對映關係,客戶端需要先從這個節點上獲取實際的位置再進行後續的操作。

而Ceph的創新在於,不再使用查表的定址方式,而是使用計算的方式。也就是一個客戶端只需要使用少量的本地元資料,就可以計算出儲存位置。這就是Ceph最關鍵的地方。