1介紹
雲硬碟是
iaas
雲平台的重要組成部分,雲硬碟給虛擬機器提供了持久的塊儲存裝置。目前的
aws
的ebs(elastic block store)
給amazon
的ec2
例項提供了高可用高可靠的塊級儲存卷,
ebs適合於一些需要訪問塊裝置的應用,比如資料庫、檔案系統等。在
openstack
中,可以使用
ceph
、sheepdog
、glusterfs
作為雲硬碟的開源解決方案。
ceph
是統一儲存系統,支援三種介面。
ceph
也是分布式儲存系統,它的特點是:
2架構
1.1元件
的底層是
rados
,它的意思是
「a reliable, autonomous, distributed object storage」
。rados
由兩個元件組成:
ceph
基於rados
開發了object storage
、block storage
、filesystem
。ceph
另外兩個元件是:
2.2對映
ceph
的命名空間是
(pool, object)
,每個object
都會對映到一組
osd中
(由這組
osd儲存這個
object):
(pool, object) → (pool, pg) → osd set → disk
ceph
中pools
的屬性有: 在
ceph
中,object
先對映到
pg(placement group)
,再由pg
對映到osd set
。每個pool
有多個pg
,每個object
通過計算
hash
值並取模得到它所對應的pg。
pg再對映到一組
osd(
osd的個數由
pool
的副本數決定),第乙個
osd是
primary
,剩下的都是
replicas。
資料對映
(data placement)
的方式決定了儲存系統的效能和擴充套件性。
(pool, pg) → osd set
的對映由四個因素決定:
client
從monitors
中得到crush map
、osd map
、crush ruleset
,然後使用
crush
演算法計算出
object
所在的osd set
。所以ceph
不需要name
伺服器,
client
直接和osd
進行通訊。偽**如下所示:
locator = object_name
obj_hash = hash(locator)
pg = obj_hash % num_pg
osds_for_pg = crush(pg) # returns a list of osds
primary = osds_for_pg[0]
replicas = osds_for_pg[1:]
這種資料對映的優點是:
2.3強一致性
2.4容錯性
在分布式系統中,常見的故障有網路中斷、掉電、伺服器宕機、硬碟故障等,
ceph
能夠容忍這些故障,並進行自動修復,保證資料的可靠性和系統可用性。
故障檢測:
osd之間有心跳檢測,當
osd a
檢測到osd b
沒有回應時,會報告給
monitors
說osd b
無法連線,則
monitors
給osd b
標記為down
狀態,並更新
osd map
。當過了
m秒之後還是無法連線到
osd b
,則monitors
給osd b
標記為out狀態(
表明osd b
不能工作),並更新
osd map。
備註:可以在
ceph
中配置m
的值。
故障恢復:
當某個pg對應的osd set中有乙個osd被標記為down時(假如是primary被標記為down,則某個replica會成為新的primary,並處理所有讀寫 object請求),則該pg處於active+degraded狀態,也就是當前pg有效的副本數是n-1。
過了m秒之後,假如還是無法連線該osd,則它被標記為out,ceph會重新計算pg到osd set的對映(當有新的osd加入到集群時,也會重新計算所有pg到osd set的對映),以此保證pg的有效副本數是n。
新osd set的primary先從舊的osd set中收集pg log,得到乙份authoritative history(完整的、全序的操作序列),並讓其他replicas同意這份authoritative history(也就是其他replicas對pg的所有objects的狀態達成一致),這個過程叫做peering。
當peering過程完成之後,pg進入active+recoverying狀態,primary會遷移和同步那些降級的objects,保證這些objects 的副本數為n。
2.5資料遷移
當有節點加入或退出集群時,osdmap發生改變。這時,會觸發pg的重分配。通過backfilling機制完成資料的遷移。簡單舉例如下:
原始:pg_a à osd.0 osd.1 osd.2
擴容加入新節點後:
pg_a à osd.3 osd.1 osd.2
此時會生成:
pg_a_temp à osd.1 osd.2 osd.3
2.6狀態同步
osdmap是ceph集群中所有 osd 的資訊,所有 osd 節點的改變如程序退出,節點的加入和退出或者節點權重的變化都會反映到這張 map 上。這張 map 不僅會被 monitor 掌握,osd 節點和 client 也會從 monitor 得到這張表。如乙個新的 osd 加入會導致一些 pg 的遷移,那麼這些 pg 的 osd 會得到通知。除此之外,monitor 也會隨機的挑選一些 osd 傳送osdmap。
monitor 掌握了整個集群的 osd 狀態和 pg 狀態,每個pg都是一部分 object 的擁有者,維護 object 的資訊是每個 pg 的責任,monitor 不會掌握 object level 的資訊。因此每個pg都需要維護 pg 的狀態來保證 object 的一致性。但是每個 pg 的資料和相關故障恢復、遷移所必須的記錄都是由每個 pg 自己維護,也就是存在於每個 pg 所在的 osd 上。上述的peering過程就是pg維護object一致性的過程,在osd狀態發生變化時觸發。
2.7資料修復
資料修復是以pg為單位進行的。
scrub: primary node發起,掃瞄各副本的object meta資料,對比修復。預設每天一次。可配。
deep scrub: primary node發起,掃瞄各副本的object的meta和實際資料,bit to bit的對比修復。預設一周進行一次。可配。
3優點
3.1高效能
3.2高可靠性
3.3高擴充套件性
4與cassandra的比較
crush演算法與cassandra的環結構相比,過於複雜。但pg和crush演算法,使得pg內osd交換和同步狀態即可。而不是像cassandra那樣,每個節點都與其他所有節點同步狀態。這樣使得ceph集群可以做得很大。
Ceph 整體架構
1.1 ceph 介面 ceph 支援三種介面 1.2 ceph 核心元件及概念介紹 ceph架構 ceph生態系統可以大致劃分為四部分 1.客戶端 資料使用者 2.元資料伺服器 快取和同步分布式元資料 3.物件儲存集群 將資料和元資料作為物件儲存,執行其他關鍵職能 4.集群監視器 執行監視功能 c...
ceph架構簡介
在測試openstack的後端儲存時,看到了ceph作為後端儲存時的各種優勢 於是查詢資料,總結了這篇ceph架構的部落格,介紹了ceph的架構和ceph的核心元件。ceph整體十分龐大,本文只是介紹了整體架構和概念,想要詳細檢視ceph請看博文 ceph介紹及原理架構分享 ceph是乙個統一的分布...
CEPH架構總體說明
1.3 rados 2.rados概念介紹 3.參考資料 rados block device,主要面向雲平台的虛擬機器提供虛擬磁碟,類似於san。rbd提供兩種介面,一種是通過qemu driver提供kvm虛擬機器使用,另一種是在作業系統核心態實現了乙個核心模組,直接把塊裝置對映給物理主機,由物...