ceph 面试_终于有人把Ceph分布式存储讲清楚了!
Ceph項(xiàng)目最早起源于Sage就讀博士期間的工作(最早的成果于2004年發(fā)表),并隨后貢獻(xiàn)給開源社區(qū)。在經(jīng)過了數(shù)年的發(fā)展之后,目前已得到眾多云計(jì)算廠商的支持并被廣泛應(yīng)用。RedHat及OpenStack都可與Ceph整合以支持虛擬機(jī)鏡像的后端存儲(chǔ)。但是在2014年OpenStack火爆的時(shí)候、Ceph并不被很多人所接受。當(dāng)時(shí)Ceph并不穩(wěn)定(Ceph發(fā)布的第四個(gè)版本 Dumpling v0.67),而且架構(gòu)新穎,復(fù)雜,當(dāng)時(shí)人們對(duì)Ceph在生產(chǎn)落地如何保障數(shù)據(jù)的安全,數(shù)據(jù)的一致性存在懷疑。
隨著OpenStack的快速發(fā)展,給Ceph的發(fā)展注入了強(qiáng)心劑,越來越多的人使用Ceph作為OpenStack的底層共享存儲(chǔ),Ceph在中國(guó)的社區(qū)也蓬勃發(fā)展起來。近兩年OpenStack火爆度不及當(dāng)年,借助于云原生尤其是Kubernetes技術(shù)的發(fā)展,作為底層存儲(chǔ)的基石,Ceph再次發(fā)力,為Kubernets有狀態(tài)化業(yè)務(wù)提供了存儲(chǔ)機(jī)制的實(shí)現(xiàn)。
存儲(chǔ)發(fā)展史
企業(yè)中使用存儲(chǔ)按照其功能,使用場(chǎng)景,一直在持續(xù)發(fā)展和迭代,大體上可以分為四個(gè)階段:
?DAS:Direct Attached Storage,即直連存儲(chǔ),第一代存儲(chǔ)系統(tǒng),通過SCSI總線擴(kuò)展至一個(gè)外部的存儲(chǔ),磁帶整列,作為服務(wù)器擴(kuò)展的一部分;
?NAS:Network Attached Storage,即網(wǎng)絡(luò)附加存儲(chǔ),通過網(wǎng)絡(luò)協(xié)議如NFS遠(yuǎn)程獲取后端文件服務(wù)器共享的存儲(chǔ)空間,將文件存儲(chǔ)單獨(dú)分離出來;
?SAN:Storage Area Network,即存儲(chǔ)區(qū)域網(wǎng)絡(luò),分為IP-SAN和FC-SAN,即通過TCP/IP協(xié)議和FC(Fiber Channel)光纖協(xié)議連接到存儲(chǔ)服務(wù)器;
?Object Storage:即對(duì)象存儲(chǔ),隨著大數(shù)據(jù)的發(fā)展,越來越多的圖片,視頻,音頻靜態(tài)文件存儲(chǔ)需求,動(dòng)仄PB以上的存儲(chǔ)空間,需無限擴(kuò)展。
存儲(chǔ)的發(fā)展,根據(jù)不同的階段誕生了不同的存儲(chǔ)解決方案,每一種存儲(chǔ)都有它當(dāng)時(shí)的歷史誕生的環(huán)境以及應(yīng)用場(chǎng)景,解決的問題和優(yōu)缺點(diǎn)。
區(qū)別如下:
DAS 直連存儲(chǔ)服務(wù)器使用 SCSI 或 FC 協(xié)議連接到存儲(chǔ)陣列、通過 SCSI 總線和 FC 光纖協(xié)議類型進(jìn)行數(shù)據(jù)傳輸;例如一塊有空間大小的裸磁盤:/dev/sdb。DAS存儲(chǔ)雖然組網(wǎng)簡(jiǎn)單、成本低廉但是可擴(kuò)展性有限、無法多主機(jī)實(shí)現(xiàn)共享、目前已經(jīng)很少使用了。
NAS網(wǎng)絡(luò)存儲(chǔ)服務(wù)器使用TCP網(wǎng)絡(luò)協(xié)議連接至文件共享存儲(chǔ)、常見的有NFS、CIFS協(xié)議等;通過網(wǎng)絡(luò)的方式映射存儲(chǔ)中的一個(gè)目錄到目標(biāo)主機(jī),如/data。NAS網(wǎng)絡(luò)存儲(chǔ)使用簡(jiǎn)單,通過IP協(xié)議實(shí)現(xiàn)互相訪問,多臺(tái)主機(jī)可以同時(shí)共享同一個(gè)存儲(chǔ)。但是NAS網(wǎng)絡(luò)存儲(chǔ)的性能有限,可靠性不是很高。
SAN存儲(chǔ)區(qū)域網(wǎng)絡(luò)服務(wù)器使用一個(gè)存儲(chǔ)區(qū)域網(wǎng)絡(luò)IP或FC連接到存儲(chǔ)陣列、常見的SAN協(xié)議類型有IP-SAN和FC-SAN。SAN存儲(chǔ)區(qū)域網(wǎng)絡(luò)的性能非常好、可擴(kuò)展性強(qiáng);但是成本特別高、尤其是FC存儲(chǔ)網(wǎng)絡(luò):因?yàn)樾枰玫紿BA卡、FC交換機(jī)和支持FC接口的存儲(chǔ)。
Object Storage對(duì)象存儲(chǔ)通過網(wǎng)絡(luò)使用API訪問一個(gè)無限擴(kuò)展的分布式存儲(chǔ)系統(tǒng)、兼容于S3風(fēng)格、原生PUT/GET等協(xié)議類型。表現(xiàn)形式就是可以無限使用存儲(chǔ)空間,通過PUT/GET無限上傳和下載。可擴(kuò)展性極強(qiáng)、使用簡(jiǎn)單,但是只使用于靜態(tài)不可編輯文件,無法為服務(wù)器提供塊級(jí)別存儲(chǔ)。
綜上、企業(yè)中不同場(chǎng)景使用的存儲(chǔ),使用表現(xiàn)形式無非是這三種:磁盤(塊存儲(chǔ)設(shè)備),掛載至目錄像本地文件一樣使用(文件共享存儲(chǔ)),通過API向存儲(chǔ)系統(tǒng)中上傳PUT和下載GET文件(對(duì)象存儲(chǔ))。
什么是Ceph?
接下來我們要講講Ceph,那么到底什么是Ceph呢?Ceph能夠提供企業(yè)中三種常見的存儲(chǔ)需求:塊存儲(chǔ)、文件存儲(chǔ)和對(duì)象存儲(chǔ),正如Ceph官方所定義的一樣“Ceph uniquely delivers object, block, and file storage in one unified system.”,Ceph在一個(gè)統(tǒng)一的存儲(chǔ)系統(tǒng)中同時(shí)提供了對(duì)象存儲(chǔ)、塊存儲(chǔ)和文件存儲(chǔ),即Ceph是一個(gè)統(tǒng)一存儲(chǔ),能夠?qū)⑵髽I(yè)企業(yè)中的三種存儲(chǔ)需求統(tǒng)一匯總到一個(gè)存儲(chǔ)系統(tǒng)中,并提供分布式、橫向擴(kuò)展,高度可靠性的存儲(chǔ)系統(tǒng),Ceph存儲(chǔ)提供的三大存儲(chǔ)接口:
上圖詳見官方文檔:http://docs.ceph.org.cn/
1、CEPH OBJECT STORE對(duì)象存儲(chǔ),包含功能,特性如下:
?RESTful Interface RESTful風(fēng)格接口;
?S3- and Swift-compliant APIs 提供兼容于S3和Swfit風(fēng)格API;
?S3-style subdomains S3風(fēng)格的目錄風(fēng)格;
?Unified S3/Swift namespace 統(tǒng)一扁平的S3/Swift命名空間,即所有的對(duì)象存放在同一個(gè)平面上;
?User management 提供用戶管理認(rèn)證接入;
?Usage tracking 使用情況追蹤;
?Striped objects 對(duì)象切割,將一個(gè)大文件切割為多個(gè)小文件(objects);
?Cloud solution integration 云計(jì)算解決方案即成,可以與Swfit對(duì)象存儲(chǔ)即成;
?Multi-site deployment 多站點(diǎn)部署,保障可靠性;
?Multi-site replication 多站點(diǎn)復(fù)制,提供容災(zāi)方案。
2、CEPH BLOCK DEVICE塊存儲(chǔ),包含功能,特性如下:
?Thin-provisioned 瘦分配,即先分配特定存儲(chǔ)大小,隨著使用實(shí)際使用空間的增長(zhǎng)而占用存儲(chǔ)空間,避免空間占用;
?Images up to 16 exabytes 耽擱景象最大能支持16EB;
?Configurable striping 可配置的切片,默認(rèn)是4M;
?In-memory caching 內(nèi)存緩存;
?Snapshots 支持快照,將當(dāng)時(shí)某個(gè)狀態(tài)記錄下載;
?Copy-on-write cloning Copy-on-write克隆復(fù)制功能,即制作某個(gè)鏡像實(shí)現(xiàn)快速克隆,子鏡像依賴于母鏡像;
?Kernel driver support 內(nèi)核驅(qū)動(dòng)支持,即rbd內(nèi)核模塊;
?KVM/libvirt support 支持KVM/libvirt,實(shí)現(xiàn)與云平臺(tái)如openstack,cloudstack集成的基礎(chǔ);
?Back-end for cloud solutions 云計(jì)算多后端解決方案,即為openstack,kubernetes提供后端存儲(chǔ);
?Incremental backup 增量備份;
?Disaster recovery (multisite asynchronous replication) 災(zāi)難恢復(fù),通過多站點(diǎn)異步復(fù)制,實(shí)現(xiàn)數(shù)據(jù)鏡像拷貝。
3、CEPH FILE SYSTEM文件存儲(chǔ),包含功能,特性如下:
?POSIX-compliant semantics POSIX風(fēng)格接口;
?Separates metadata from data 元數(shù)據(jù)metadata和數(shù)據(jù)data分開存儲(chǔ);
?Dynamic rebalancing 動(dòng)態(tài)數(shù)據(jù)均衡;
?Subdirectory snapshots 子目錄快照;
?Configurable striping 可配置切割大小;
?Kernel driver support 內(nèi)核驅(qū)動(dòng)支持,即CephFS;
?FUSE support 支持FUSE風(fēng)格;
?NFS/CIFS deployable 支持NFS/CIFS形式部署;
?Use with Hadoop (replace HDFS) 可支持與Hadoop繼承,替換HDFS存儲(chǔ)。
通俗點(diǎn)講:Ceph提供了三種存儲(chǔ)接口:塊存儲(chǔ)RBD,對(duì)象存儲(chǔ)RGW和文件存儲(chǔ)CephFS,每種存儲(chǔ)都有其相應(yīng)的功能和特性。
Ceph存儲(chǔ)架構(gòu)
Ceph 獨(dú)一無二地用統(tǒng)一的系統(tǒng)提供了對(duì)象、塊、和文件存儲(chǔ)功能,它可靠性高、管理簡(jiǎn)便、并且是自由軟件。Ceph 的強(qiáng)大足以改變貴公司的 IT 基礎(chǔ)架構(gòu)、和管理海量數(shù)據(jù)的能力。Ceph 可提供極大的伸縮性——供成千用戶訪問 PB 乃至 EB 級(jí)的數(shù)據(jù)。Ceph 節(jié)點(diǎn)以普通硬件和智能守護(hù)進(jìn)程作為支撐點(diǎn), Ceph 存儲(chǔ)集群組織起了大量節(jié)點(diǎn),它們之間靠相互通訊來復(fù)制數(shù)據(jù)、并動(dòng)態(tài)地重分布數(shù)據(jù)。
什么是Ceph分布式存儲(chǔ)?
接下來,我們先來看一下Ceph的存儲(chǔ)架構(gòu),了解Ceph的分布式架構(gòu),功能組件和涉及相關(guān)概念。Ceph分布式集群是建立在RADOS算法之上的,RADOS是一個(gè)可擴(kuò)展性,高可靠的存儲(chǔ)服務(wù)算法,是Ceph的實(shí)現(xiàn)的基礎(chǔ)。Ceph有兩個(gè)重要的組件組成:Ceph Monitors(Ceph監(jiān)視器)和Ceph OSDs(Ceph OSD 守護(hù)進(jìn)程)。
其中Ceph Monitor作為集群中的控制中心,擁有整個(gè)集群的狀態(tài)信息,各個(gè)組件如OSDs將自己的狀態(tài)信息報(bào)告給Ceph Monitor這個(gè)總司令,由此可以可知,Ceph Monitor這個(gè)總司令肩負(fù)起整個(gè)集群協(xié)調(diào)工作;同時(shí)Ceph Monitor還負(fù)責(zé)將集群的指揮工作,將集群的狀態(tài)同步給客戶端,客戶端根據(jù)Ceph Monitor發(fā)送的集群狀態(tài)信息可以獲取到集群的狀態(tài),當(dāng)集群狀態(tài)有變化如OSD增加或故障時(shí),Ceph Monitor會(huì)負(fù)責(zé)更新集群狀態(tài)并下發(fā)給客戶端。Ceph Monitor的重要不言而喻,為了保障集群的可用性,需要部署高可用,一般需要部署2n+1個(gè)節(jié)點(diǎn),如3個(gè)或5個(gè)Ceph Monitor節(jié)點(diǎn)。
什么是集群的狀態(tài)呢?Ceph Monitor中保存的集群狀態(tài)根據(jù)其功能角色的不同,分為以下幾個(gè)map狀態(tài)表:
?Monitor Maps,集群Ceph Monitor集群的節(jié)點(diǎn)狀態(tài),通過ceph mon dump可以獲取;
?OSD Maps,集群數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的狀態(tài)表,記錄集群中OSD狀態(tài)變化,通過ceph osd dump可以獲取;
?PGs Maps,PGs即placement group,表示在OSD中的分布式方式,通過ceph pg dump可以獲取;
?Crush Maps,Crush包含資源池pool在存儲(chǔ)中的映射路徑方式,即數(shù)據(jù)是如何分布的;
?MDS Maps,CephFS依賴的MDS管理組件,可通過ceph mds dump獲取,用于追蹤MDS狀態(tài)。
除了Ceph Monitor之外,還有一個(gè)重要的組件是OSD,集群中通常有多個(gè)OSD組成,OSD即Object Storage Daemon,負(fù)責(zé)Ceph集群中真正數(shù)據(jù)存儲(chǔ)的功能,也就是我們的數(shù)據(jù)最終都會(huì)寫入到OSD中。除了Monitor之外,根據(jù)Ceph提供的不同功能,還有其他組件,包括:
?Ceph Monitors(ceph-mon);
?Ceph OSDs(ceph-osd);
?Ceph MDS(ceph-mds),用于提供CephFS文件存儲(chǔ),提供文件存儲(chǔ)所需元數(shù)據(jù)管理;
?Ceph RGW(ceph-rgw),用于提供Ceph對(duì)象存儲(chǔ)網(wǎng)關(guān),提供存儲(chǔ)網(wǎng)關(guān)接入;
?Ceph Manager(ceph-mgr),提供集群狀態(tài)監(jiān)控和性能監(jiān)控。
注:Ceph Monitor監(jiān)視器維護(hù)著集群運(yùn)行圖的主副本。一個(gè)監(jiān)視器集群確保了當(dāng)某個(gè)監(jiān)視器失效時(shí)的高可用性。存儲(chǔ)集群客戶端向 Ceph Monitor 監(jiān)視器索取集群運(yùn)行圖的最新副本。而Ceph OSD 守護(hù)進(jìn)程檢查自身狀態(tài)、以及其它 OSD 的狀態(tài),并報(bào)告給監(jiān)視器們。存儲(chǔ)集群的客戶端和各個(gè) Ceph OSD 守護(hù)進(jìn)程使用 CRUSH 算法高效地計(jì)算數(shù)據(jù)位置,而不是依賴于一個(gè)中心化的查詢表。它的高級(jí)功能包括:基于 librados的原生存儲(chǔ)接口、和多種基于 librados 的服務(wù)接口。
Ceph數(shù)據(jù)的存儲(chǔ)
了解完Ceph的架構(gòu)后,我們先來了解一下Ceph的讀寫流程,期間會(huì)涉及到CRUSH,PGs等這些概念,我們從一個(gè)最基本的的概念入手:Ceph中一切皆對(duì)象,不管是RBD塊存儲(chǔ)接口,RGW對(duì)象存儲(chǔ)接口還是文件存儲(chǔ)CephFS接口,其存儲(chǔ)如到Ceph中的數(shù)據(jù)均可以看作是一個(gè)對(duì)象,一個(gè)文件需要切割為多個(gè)對(duì)象(object),然后將object存儲(chǔ)到OSD中,如下圖:
注:Ceph 存儲(chǔ)集群從 Ceph 客戶端接收數(shù)據(jù)——不管是來自 Ceph 塊設(shè)備、 Ceph 對(duì)象存儲(chǔ)、 Ceph 文件系統(tǒng)、還是基于 librados 的自定義實(shí)現(xiàn)——并存儲(chǔ)為對(duì)象。每個(gè)對(duì)象是文件系統(tǒng)中的一個(gè)文件,它們存儲(chǔ)在對(duì)象存儲(chǔ)設(shè)備上。由 Ceph OSD 守護(hù)進(jìn)程處理存儲(chǔ)設(shè)備上的讀/寫操作。
那么,這些切割后的object怎么選擇到對(duì)應(yīng)的OSD存儲(chǔ)節(jié)點(diǎn)呢,這需要依賴于Ceph的智能調(diào)度算法CRUSH,通過CRUSH算法將object調(diào)度到合適的OSD節(jié)點(diǎn)上,不管是客戶端還是OSD,均使用CRUSH算法來計(jì)算object在集群中OSD的位置信息,同時(shí)保障object的副本能落到合適的OSD節(jié)點(diǎn)上,關(guān)于CRUSH算法的實(shí)現(xiàn)比較復(fù)雜,詳情可以參考:CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data。
Ceph OSD 在扁平的命名空間內(nèi)把所有數(shù)據(jù)存儲(chǔ)為對(duì)象(也就是沒有目錄層次)。對(duì)象包含一個(gè)標(biāo)識(shí)符、二進(jìn)制數(shù)據(jù)、和由名字/值對(duì)組成的元數(shù)據(jù),元數(shù)據(jù)語(yǔ)義完全取決于 Ceph 客戶端。例如, CephFS 用元數(shù)據(jù)存儲(chǔ)文件屬性,如文件所有者、創(chuàng)建日期、最后修改日期等等。
object調(diào)度到OSD節(jié)點(diǎn)上,如果一個(gè)文件發(fā)生了變動(dòng)或OSD出現(xiàn)了異常,以一個(gè)100G的文件為例,每個(gè)object默認(rèn)為4M,將會(huì)切割為25600個(gè)object,如果Ceph集群需要正對(duì)每個(gè)object都進(jìn)行調(diào)度的話,可想而知,在一個(gè)大規(guī)模集群中,crush的調(diào)度將會(huì)變得異常的繁重。因此,Ceph引入了另外一個(gè)概念PG,PG是Place Group即放置組,可以簡(jiǎn)單理解為一個(gè)裝載object的容器,object將映射到PG中,PG最終會(huì)調(diào)度到某個(gè)具體的OSD上,因此CRUSH由object調(diào)度轉(zhuǎn)為PG的調(diào)度,而PG的數(shù)量是相對(duì)固定的,因此集群分布時(shí)調(diào)度相對(duì)沒有那么繁重,同時(shí),當(dāng)某個(gè)OSD異常時(shí),CRUSH調(diào)度算法只需將其上的PG調(diào)度至其他OSD上(而不是將其上的object進(jìn)行調(diào)度)。Ceph的整個(gè)數(shù)據(jù)調(diào)度寫入流程如下圖:
?一個(gè)文件將會(huì)切割為多個(gè)object(如1G文件每個(gè)object為4M將切割為256個(gè)),每個(gè)object會(huì)由一個(gè)由innode(ino)和object編號(hào)(ono)組成oid,即object id,oid是真?zhèn)€集群唯一,唯一標(biāo)識(shí)object對(duì)象;
?針對(duì)object id做hash并做取模運(yùn)算,從而獲取到pgid,即place group id,通過hash+mask獲取到PGs ID,PG是存儲(chǔ)object的容器;
?Ceph通過CRUSH算法,將pgid進(jìn)行運(yùn)算,找到當(dāng)前集群最適合存儲(chǔ)PG的OSD節(jié)點(diǎn),如osd1和osd2(假設(shè)為2個(gè)副本);
?PG的數(shù)據(jù)最終寫入到OSD節(jié)點(diǎn),完成數(shù)據(jù)的寫入過程,當(dāng)然這里會(huì)涉及到多副本,一份數(shù)據(jù)寫多副本。
好了,現(xiàn)在我們對(duì)Ceph有了基本認(rèn)識(shí)了。后面我們講繼續(xù)了解Ceph伸縮性和高可用性;動(dòng)態(tài)集群管理;糾刪編碼;緩存分級(jí)等內(nèi)容。當(dāng)然、我們也會(huì)具體了解到如糾刪編碼中關(guān)于讀出和寫入編碼塊,被中斷的完全寫等更細(xì)的內(nèi)容。
本文由博客群發(fā)一文多發(fā)等運(yùn)營(yíng)工具平臺(tái) OpenWrite 發(fā)布
總結(jié)
以上是生活随笔為你收集整理的ceph 面试_终于有人把Ceph分布式存储讲清楚了!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python项目简历内容包括哪些方面_简
- 下一篇: kuka机器人股票代码_【内幕】溢价收购