01-01 Ceph的工作原理與流程簡述


一:系統概述

1 什么是Ceph?
Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式的存儲系統。
“統一的”:意味着Ceph可以一套存儲系統同時提供對象存儲、塊存儲和文件系統存儲三種功能,以便在滿足不同應用需求的前提下簡化部署和運維。
“分布式”:在Ceph系統中則意味着真正的無中心結構和沒有理論上限的系統規模可擴展性。

2 為什么要關注Ceph?
首先,Ceph本身確實具有較為突出的優勢。其先進的核心設計思想,概括為八個字—“無需查表,算算就好”。
其次,Ceph目前在OpenStack社區中備受重視。

二: ceph系統層次

自下向上,可以將Ceph系統分為四個層次:
基礎存儲系統RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自動化的、分布式的對象存儲)
基礎庫LIBRADOS
高層應用接口:包括了三個部分:RADOS GW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System)
應用層

三:RADOS

Ceph的底層是RADOS,它由兩個組件組成:
一種是為數眾多的、負責完成數據存儲和維護功能的OSD( Object Storage Device)。
另一種則是若干個負責完成系統狀態檢測和維護的Monitor。
OSD和monitor之間相互傳輸節點狀態信息,共同得出系統的總體工作狀態,並形成一個全局系統狀態記錄數據結構,即所謂的cluster map。這個數據結構與RADOS提供的特定算法相配合,便實現了Ceph“無需查表,算算就好”的核心機制以及若干優秀特性

OSD的邏輯結構
OSD可以被抽象為兩個組成部分,即系統部分和守護進程(OSD deamon)部分。
OSD的系統部分本質上就是一台安裝了操作系統和文件系統的計算機,其硬件部分至少包括一個單核的處理器、一定數量的內存、一塊硬盤以及一張網卡。
在上述系統平台上,每個OSD擁有一個自己的OSD deamon。這個deamon負責完成OSD的所有邏輯功能,包括與monitor和其他OSD(事實上是其他OSD的deamon)通信以維護更新系統狀態,與其他OSD共同完成數據的存儲和維護,與client通信完成各種數據對象操作等等。

四:尋址流程

三次映射:
File -> Object -> PG -> OSD
(ion,ono) -> oid -> pgid -> (osd1,osd2,osd3)

幾個概念:

01 File —— 此處的file就是用戶需要存儲或者訪問的文件。對於一個基於Ceph開發的對象存儲應用而言,這個file也就對應於應用中的“對象”,也就是用戶直接操作的“對象”。
02 Ojbect —— 此處的object是RADOS所看到的“對象”。Object與上面提到的file的區別是,object的最大size由RADOS限定(通常為2MB或4MB),以便實現底層存儲的組織管理。因此,當上層應用向RADOS存入size很大的file時,需要將file切分成統一大小的一系列object(最后一個的大小可以不同)進行存儲。

03 PG(Placement Group)—— 顧名思義,PG的用途是對object的存儲進行組織和位置映射。具體而言,一個PG負責組織若干個object(可以為數千個甚至更多),但一個object只能被映射到一個PG中,即,PG和object之間是“一對多”映射關系。同時,一個PG會被映射到n個OSD上,而每個OSD上都會承載大量的PG,即,PG和OSD之間是“多對多”映射關系。在實踐當中,n至少為2,如果用於生產環境,則至少為3。一個OSD上的PG則可達到數百個。事實上,PG數量的設置牽扯到數據分布的均勻性問題。
04 OSD——即object storage device。
05 Failure domain

尋址流程

01 File -> object映射:
這次映射的目的是,將用戶要操作的file,映射為RADOS能夠處理的object。其映射十分簡單,本質上就是按照object的最大size對file進行切分。這種切分的好處有二:一是讓大小不限的file變成最大size一致、可以被RADOS高效管理的object;二是讓對單一file實施的串行處理變為對多個object實施的並行化處理。

02 Object -> PG映射:
在file被映射為一個或多個object之后,就需要將每個object獨立地映射到一個PG中去。計算公式: hash(oid) & mask -> pgid
根據RADOS的設計,給定PG的總數為m(m應該為2的整數冪),則mask的值為m-1。因此,哈希值計算和按位與操作的整體結果事實上是從所有m個PG中近似均勻地隨機選擇一個。基於這一機制,當有大量object和大量PG時,RADOS能夠保證object和PG之間的近似均勻映射。

03 PG -> OSD映射:
和“object -> PG”映射中采用的哈希算法不同,這個CRUSH算法的結果不是絕對不變的,而是受到其他因素的影響。其影響因素主要有二:一是當前系統狀態,也就是cluster map。當系統中的OSD狀態、數量發生變化時,cluster map可能發生變化,而這種變化將會影響到PG與OSD之間的映射。二是存儲策略配置。這里的策略主要與安全相關。利用策略配置,系統管理員可以指定承載同一個PG的3個OSD分別位於數據中心的不同服務器乃至機架上,從而進一步改善存儲的可靠性。

五:數據操作流程

當某個client需要向Ceph集群寫入一個file時,首先需要在本地完成尋址流程,將file變為一個object,然后找出存儲該object的一組三個OSD。
找出三個OSD后,client將直接和Primary OSD通信,發起寫入操作(步驟1)。Primary OSD收到請求后,分別向Secondary OSD和Tertiary OSD發起寫入操作(步驟2、3)。當Secondary OSD和Tertiary OSD各自完成寫入操作后,將分別向Primary OSD發送確認信息(步驟4、5)。當Primary OSD確信其他兩個OSD的寫入完成后,則自己也完成數據寫入,並向client確認object寫入操作完成(步驟6)

六:集群維護

由若干個monitor共同負責整個Ceph集群中所有OSD狀態的發現與記錄,並且共同形成cluster map的master版本,然后擴散至全體OSD以及client。OSD使用cluster map進行數據的維護,而client使用cluster map進行數據的尋址。
monitor並不主動輪詢各個OSD的當前狀態。正相反,OSD需要向monitor上報狀態信息。常見的上報有兩種情況:一是新的OSD被加入集群,二是某個OSD發現自身或者其他OSD發生異常。在收到這些上報信息后,monitor將更新cluster map信息並加以擴散。

Cluster map的內容:

Epoch,即版本號,為一個單調遞增序列,Epoch越大,則cluster map版本越新。
各個OSD的網絡地址。
各個OSD的狀態。up或者down,表明OSD是否正常工作;in或者out,表明OSD是否在至少一個PG中。
CRUSH算法配置參數。表明了Ceph集群的物理層級關系(cluster hierarchy),位置映射規則(placement rules)

新增一個OSD
首先根據配置信息與monitor通信,monitor將其加入cluster map,並設置為up且out狀態,再將最新版本的cluster map發給這個新OSD。
自動化的故障恢復(Failure recovery)
收到monitor發過來的cluster map之后,這個新OSD計算出自己所承載的PG以及和自己承載同一個PG的其他OSD。然后與這些OSD取得聯系。如果這個PG目前處於降級狀態(即承載該PG的OSD個數少於正常值),則其他OSD將把這個PG內的所有對象和元數據賦值給新OSD。數據復制完成后,新OSD被置為up且in狀態,cluster map也更新。

自動化的re-balancing過程
如果該PG目前一切正常,則這個新OSD將替換掉現有OSD中的一個(PG內將重新選出Primary OSD),並承擔其數據。在數據復制完成后,新OSD被置為up且in狀態,而被替換的OSD將推出該PG。而cluster map內容也將據此更新。
自動化的故障探測(Failure detection)過程
如果一個OSD發現和自己共同承擔一個PG的另一個OSD無法聯通,則會將這一情況上報monitor。此外,如果一個OSD deamon發現自身工作狀態異常,也將把異常情況主動上報給monitor。此時,monitor將把出現問題的OSD的狀態設置為down且in。如果超過某一預定時間期限該OSD仍然無法恢復正常,則其狀態將被設置為down且out。如果該OSD能夠恢復正常,則其狀態會恢復成up且in。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM