天天看點

Ceph 初認與簡介

1、為什麼要用Ceph

Ceph是目前非常流行的開源分布式存儲系統,具有高擴充性、高性能、高可靠性等優點,同時提供塊存儲服務(rbd)、對象存儲服務(rgw)以及檔案系統存儲服務(cephfs),Ceph在存儲的時候充分利用存儲節點的計算能力,在存儲每一個資料時都會通過計算得出該資料的位置,盡量的分布均衡。目前也是OpenStack的主流後端存儲,随着OpenStack在雲計算領域的廣泛使用,ceph也變得更加炙手可熱。國内目前使用ceph搭建分布式存儲系統較為成功的企業有x-sky,深圳元核雲,上海UCloud等三家企業。

Ceph設計思想:叢集可靠性、叢集可擴充性、資料安全性、接口統一性、充分發揮儲存設備自身的計算能力、去除中心化。

2、Ceph架構介紹

(https://yeepay-static-qa.s3.cn-north-1.amazonaws.com.cn/640.png)

Ceph 初認與簡介
Ceph 初認與簡介

 Ceph使用RADOS提供對象存儲,通過librados封裝庫提供多種存儲方式的檔案和對象轉換。外層通過RGW(Object,有原生的API,而且也相容Swift和S3的API,适合單用戶端使用)、RBD(Block,支援精簡配置、快照、克隆,适合多用戶端有目錄結構)、CephFS(File,Posix接口,支援快照,社會和更新變動少的資料,沒有目錄結構不能直接打開)将資料寫入存儲。

- 高性能  

a. 摒棄了傳統的集中式存儲中繼資料尋址的方案,采用CRUSH算法,資料分布均衡,并行度高  

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

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

- 高可擴充性  

a. 去中心化  

b. 擴充靈活  

c. 随着節點增加而線性增長  

- 特性豐富  

a. 支援三種存儲接口:塊存儲、檔案存儲、對象存儲  

b. 支援自定義接口,支援多種語言驅動  

 3、Ceph核心概念

RADOS

RADOS : 可靠的自主分布式對象存儲(RADOS)是Ceph存儲叢集的基礎。RADOS對象存儲負責存儲這些對象,而不管它們的資料類型如何。RADOS層確定資料始終保持一緻。 為此,它執行資料複制、故障檢測和恢複,以及跨叢集節點的資料遷移和再平衡。

全稱Reliable Autonomic Distributed Object Store,即可靠的、自動化的、分布式對象存儲系統。RADOS是Ceph叢集的精華,使用者實作資料配置設定、Failover等叢集操作。

Librados

Librados : librados庫是一種通路RADOS的友善方法,支援PHP、Ruby、Java、Python、C 和c++程式設計語言。它為 Ceph存儲叢集(RADOS)提供了本機接口,并為其他服務提供了基礎,如RBD、RGW和CephFS,這些服務建構 在librados之上。librados還支援從應用程式直接通路

RADOS

,沒有

HTTP

開銷

Rados提供庫,因為RADOS是協定很難直接通路,

是以上層的RBD、RGW和CephFS都是通過librados通路的,目前提供PHP、Ruby、Java、Python、C和C++支援。

Crush

Crush算法是Ceph的兩大創新之一,通過Crush算法的尋址操作,Ceph得以摒棄了傳統的集中式存儲中繼資料尋址方案。而Crush算法在一緻性哈希基礎上很好的考慮了容災域的隔離,使得Ceph能夠實作各類負載的副本放置規則,例如跨機房、機架感覺等。同時,Crush算法有相當強大的擴充性,理論上可以支援數千個存儲節點,這為Ceph在大規模雲環境中的應用提供了先天的便利。

Pool

Pool是存儲對象的邏輯分區,它規定了資料備援的類型和對應的副本分布政策,支援兩種類型:副本(replicated)和 糾删碼( Erasure Code);

PG

PG( placement group)是一個放置政策組,它是對象的集合,該集合裡的所有對象都具有相同的放置政策,簡單點說就是相同PG内的對象都會放到相同的硬碟上,PG是 ceph的邏輯概念,服務端資料均衡和恢複的最小粒度就是PG,一個PG包含多個OSD。引入PG這一層其實是為了更好的配置設定資料和定位資料;

Object

簡單來說塊存儲讀寫快,不利于共享,檔案存儲讀寫慢,利于共享。能否弄一個讀寫快,利于共享的出來呢。于是就有了對象存儲。最底層的存儲單元,包含中繼資料和原始資料。

4、Ceph核心元件

OSD

Ceph對象儲存設備(OSD) : 一旦應用程式向Ceph叢集發出寫操作,資料就以對象的形式存儲在OSD中。 這是Ceph叢集中存儲實際使用者資料的惟一元件,通常,一個OSD守護程序綁定到叢集中的一個實體磁盤。是以,通常來說,Ceph叢集中實體磁盤的總數與在每個實體磁盤上存儲使用者資料的OSD守護程序的總數相同。

OSD是負責實體存儲的程序,一般配置成和磁盤一一對應,一塊磁盤啟動一個OSD程序。主要功能是存儲資料、複制資料、平衡資料、恢複資料,以及與其它OSD間進行心跳檢查,負責響應用戶端請求傳回具體資料的程序等

Ceph 初認與簡介
ceph-deploy osd create --data /dev/sdb cephnode01
ceph-deploy osd create --data /dev/sdb cephnode02
ceph-deploy osd create --data /dev/sdb cephnode03


[root@cephnode01 ~]# ps -ef | grep osd
ceph         819       1  0 08:26 ?        00:00:28 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
[root@cephnode02 ~]# ps -ef | grep osd
ceph        1027       1  0 06:15 ?        00:01:12 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
[root@cephnode03 ~]# ps -ef | grep osd
ceph       16341       1  0 05:36 ?        00:01:22 /usr/bin/ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph      

Pool、PG和OSD的關系:

  • 一個Pool裡有很多PG
  • 一個PG裡包含一堆對象,一個對象隻能屬于一個PG
  • PG有主從之分,一個PG分布在不同的OSD上(針對三副本類型)
Ceph 初認與簡介

Monitor

Ceph monitors(MON) :Ceph螢幕通過跟蹤儲存叢集狀态的映射來跟蹤整個叢集的健康狀況 ,它們為每個元件維護單獨的資訊映射,其中包括OSD映射,MON映射,PG映射和CRUSH映射。所有群集節點都報告監視節點并共享有關其狀态的每個更改的資訊。螢幕不存儲實際資料,這是OSD的工作。

一個Ceph叢集需要多個Monitor組成的小叢集,它們通過Paxos同步資料,用來儲存OSD的中繼資料。負責堅實整個Ceph叢集運作的Map視圖(如OSD Map、Monitor Map、PG Map和CRUSH Map),維護叢集的健康狀态,維護展示叢集狀态的各種圖表,管理叢集用戶端認證與授權(為用戶端接入叢集提供接口);

[root@cephnode01 my-cluster]# ps -ef | grep ceph | grep -v grep
root       11230       1  0 15:26 ?        00:00:00 /usr/bin/python2.7 /usr/bin/ceph-crash
ceph       11995       1  0 15:32 ?        00:00:06 /usr/bin/ceph-mon -f --cluster ceph --id cephnode01 --setuser ceph --setgroup ceph

[root@cephnode02 ~]# ps -ef | grep ceph | grep -v grep
root        2647       1  0 15:29 ?        00:00:00 /usr/bin/python2.7 /usr/bin/ceph-crash
ceph        3420       1  0 15:32 ?        00:00:04 /usr/bin/ceph-mon -f --cluster ceph --id cephnode02 --setuser ceph --setgroup ceph

 [root@cephnode03 ~]# ps -ef | grep ceph | grep -v grep
root       15497       1  0 15:28 ?        00:00:00 /usr/bin/python2.7 /usr/bin/ceph-crash
ceph       15657       1  0 15:32 ?        00:00:04 /usr/bin/ceph-mon -f --cluster ceph --id cephnode03 --setuser ceph --setgroup ceph      
Ceph 初認與簡介

MDS

Ceph metadata server (MDS) : MDS跟蹤檔案層次結構,僅為Ceph FS檔案系統存儲中繼資料,Ceph塊裝置和RADOS網關不需要中繼資料, 是以,他們不需要Ceph MDS守護程序。MDS不直接向用戶端提供資料,進而從系統中删除單點故障。

MDS全稱Ceph Metadata Server,是CephFS服務依賴的中繼資料服務。負責儲存檔案系統的中繼資料,管理目錄結構。對象存儲和塊裝置存儲不需要中繼資料服務

[root@cephnode01 my-cluster]# ps -ef | grep ceph | grep -v grep
ceph       12735       1  0 15:43 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id cephnode01 --setuser ceph --setgroup ceph

[root@cephnode02 ~]# ps -ef | grep ceph | grep -v grep
ceph        3750       1  0 15:43 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id cephnode02 --setuser ceph --setgroup ceph
  
[root@cephnode03 ~]# ps -ef | grep ceph | grep -v grep
ceph       15979       1  0 15:43 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id cephnode03 --setuser ceph --setgroup ceph      
Ceph 初認與簡介

Mgr

ceph 官方開發了 ceph-mgr,主要目标實作 ceph 叢集的管理,為外界提供統一的入口。例如cephmetrics、zabbix、calamari、promethus

RGW

RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift相容。