Ceph技術(shù)架構(gòu)及原理分析_第1頁
Ceph技術(shù)架構(gòu)及原理分析_第2頁
Ceph技術(shù)架構(gòu)及原理分析_第3頁
Ceph技術(shù)架構(gòu)及原理分析_第4頁
Ceph技術(shù)架構(gòu)及原理分析_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 Ceph技術(shù)架構(gòu)及原理分析目 錄 TOC o 1-3 h z u HYPERLINK l _Toc522792449 1. Ceph架構(gòu)簡介及使用場景介紹 PAGEREF _Toc522792449 h 4 HYPERLINK l _Toc522792450 1.1 Ceph簡介 PAGEREF _Toc522792450 h 4 HYPERLINK l _Toc522792451 1.2 Ceph特點(diǎn) PAGEREF _Toc522792451 h 4 HYPERLINK l _Toc522792452 1.3 Ceph架構(gòu) PAGEREF _Toc522792452 h 5 HYPERL

2、INK l _Toc522792453 1.4 Ceph核心組件及概念介紹 PAGEREF _Toc522792453 h 5 HYPERLINK l _Toc522792454 1.5 三種存儲(chǔ)類型-塊存儲(chǔ) PAGEREF _Toc522792454 h 6 HYPERLINK l _Toc522792455 1.6 三種存儲(chǔ)類型-文件存儲(chǔ) PAGEREF _Toc522792455 h 7 HYPERLINK l _Toc522792456 1.7 三種存儲(chǔ)類型-對象存儲(chǔ) PAGEREF _Toc522792456 h 9 HYPERLINK l _Toc522792457 2. Ceph

3、 IO流程及數(shù)據(jù)分布 PAGEREF _Toc522792457 h 10 HYPERLINK l _Toc522792458 2.1 正常IO流程圖 PAGEREF _Toc522792458 h 10 HYPERLINK l _Toc522792459 2.2 新主IO流程圖 PAGEREF _Toc522792459 h 11 HYPERLINK l _Toc522792460 2.3 Ceph IO算法流程 PAGEREF _Toc522792460 h 12 HYPERLINK l _Toc522792461 2.4 Ceph IO偽代碼流程 PAGEREF _Toc52279246

4、1 h 13 HYPERLINK l _Toc522792462 2.5 Ceph RBD IO流程 PAGEREF _Toc522792462 h 13 HYPERLINK l _Toc522792463 2.6 Ceph RBD IO框架圖 PAGEREF _Toc522792463 h 15 HYPERLINK l _Toc522792464 2.7 Ceph Pool和PG分布情況 PAGEREF _Toc522792464 h 17 HYPERLINK l _Toc522792465 2.8 Ceph 數(shù)據(jù)擴(kuò)容PG分布 PAGEREF _Toc522792465 h 18 HYPER

5、LINK l _Toc522792466 3. Ceph心跳機(jī)制 PAGEREF _Toc522792466 h 18 HYPERLINK l _Toc522792467 3.1 心跳介紹 PAGEREF _Toc522792467 h 18 HYPERLINK l _Toc522792468 3.2 Ceph 心跳檢測 PAGEREF _Toc522792468 h 19 HYPERLINK l _Toc522792469 3.3 Ceph OSD之間相互心跳檢測 PAGEREF _Toc522792469 h 20 HYPERLINK l _Toc522792470 3.4 Ceph OS

6、D與Mon心跳檢測 PAGEREF _Toc522792470 h 20 HYPERLINK l _Toc522792471 3.5 Ceph心跳檢測總結(jié) PAGEREF _Toc522792471 h 22 HYPERLINK l _Toc522792472 4. Ceph通信框架 PAGEREF _Toc522792472 h 23 HYPERLINK l _Toc522792473 4.1 Ceph通信框架種類介紹 PAGEREF _Toc522792473 h 23 HYPERLINK l _Toc522792474 4.2 Ceph通信框架設(shè)計(jì)模式 PAGEREF _Toc52279

7、2474 h 23 HYPERLINK l _Toc522792475 4.3 Ceph通信框架流程圖 PAGEREF _Toc522792475 h 23 HYPERLINK l _Toc522792476 4.4 Ceph通信框架類圖 PAGEREF _Toc522792476 h 25 HYPERLINK l _Toc522792477 4.5 Ceph通信數(shù)據(jù)格式 PAGEREF _Toc522792477 h 26 HYPERLINK l _Toc522792478 5. Ceph CRUSH算法 PAGEREF _Toc522792478 h 28 HYPERLINK l _Toc

8、522792479 5.1 數(shù)據(jù)分布算法挑戰(zhàn) PAGEREF _Toc522792479 h 28 HYPERLINK l _Toc522792480 5.2 Ceph CRUSH算法說明 PAGEREF _Toc522792480 h 29 HYPERLINK l _Toc522792481 5.3 Ceph CRUSH算法原理 PAGEREF _Toc522792481 h 29 HYPERLINK l _Toc522792482 5.4 CRUSH算法案例 PAGEREF _Toc522792482 h 32 HYPERLINK l _Toc522792483 6. 定制化Ceph RB

9、D QOS PAGEREF _Toc522792483 h 34 HYPERLINK l _Toc522792484 6.1 QOS介紹 PAGEREF _Toc522792484 h 34 HYPERLINK l _Toc522792485 6.2 Ceph IO操作類型 PAGEREF _Toc522792485 h 34 HYPERLINK l _Toc522792486 6.3 Ceph 官方QOS原理 PAGEREF _Toc522792486 h 35 HYPERLINK l _Toc522792487 6.4 定制化QOS原理 PAGEREF _Toc522792487 h 35

10、 HYPERLINK l _Toc522792488 6.4.2 RBD令牌桶算法流程 PAGEREF _Toc522792488 h 361. Ceph架構(gòu)簡介及使用場景介紹1.1 Ceph簡介Ceph是一個(gè)統(tǒng)一的分布式存儲(chǔ)系統(tǒng),設(shè)計(jì)初衷是提供較好的性能、可靠性和可擴(kuò)展性。Ceph項(xiàng)目最早起源于Sage就讀博士期間的工作(最早的成果于2004年發(fā)表),并隨后貢獻(xiàn)給開源社區(qū)。在經(jīng)過了數(shù)年的發(fā)展之后,目前已得到眾多云計(jì)算廠商的支持并被廣泛應(yīng)用。RedHat及OpenStack都可與Ceph整合以支持虛擬機(jī)鏡像的后端存儲(chǔ)。1.2 Ceph特點(diǎn) 高性能摒棄了傳統(tǒng)的集中式存儲(chǔ)元數(shù)據(jù)尋址的方案,采用CR

11、USH算法,數(shù)據(jù)分布均衡,并行度高。 b.考慮了容災(zāi)域的隔離,能夠?qū)崿F(xiàn)各類負(fù)載的副本放置規(guī)則,例如跨機(jī)房、機(jī)架感知等。能夠支持上千個(gè)存儲(chǔ)節(jié)點(diǎn)的規(guī)模,支持TB到PB級的數(shù)據(jù)。 高可用性副本數(shù)可以靈活控制。支持故障域分隔,數(shù)據(jù)強(qiáng)一致性。多種故障場景自動(dòng)進(jìn)行修復(fù)自愈。沒有單點(diǎn)故障,自動(dòng)管理。 高可擴(kuò)展性去中心化。擴(kuò)展靈活。隨著節(jié)點(diǎn)增加而線性增長。 特性豐富支持三種存儲(chǔ)接口:塊存儲(chǔ)、文件存儲(chǔ)、對象存儲(chǔ)。支持自定義接口,支持多種語言驅(qū)動(dòng)。1.3 Ceph架構(gòu)支持三種接口: - Object:有原生的API,而且也兼容Swift和S3的API。 - Block:支持精簡配置、快照、克隆。 - File:P

12、osix接口,支持快照。 1.4 Ceph核心組件及概念介紹 Monitor 一個(gè)Ceph集群需要多個(gè)Monitor組成的小集群,它們通過Paxos同步數(shù)據(jù),用來保存OSD的元數(shù)據(jù)。 OSD OSD全稱Object Storage Device,也就是負(fù)責(zé)響應(yīng)客戶端請求返回具體數(shù)據(jù)的進(jìn)程。一個(gè)Ceph集群一般都有很多個(gè)OSD。 MDS MDS全稱Ceph Metadata Server,是CephFS服務(wù)依賴的元數(shù)據(jù)服務(wù)。 Object Ceph最底層的存儲(chǔ)單元是Object對象,每個(gè)Object包含元數(shù)據(jù)和原始數(shù)據(jù)。 PG PG全稱Placement Grouops,是一個(gè)邏輯的概念,一個(gè)P

13、G包含多個(gè)OSD。引入PG這一層其實(shí)是為了更好的分配數(shù)據(jù)和定位數(shù)據(jù)。 RADOS RADOS全稱Reliable Autonomic Distributed Object Store,是Ceph集群的精華,用戶實(shí)現(xiàn)數(shù)據(jù)分配、Failover等集群操作。 Libradio Librados是Rados提供庫,因?yàn)镽ADOS是協(xié)議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C+支持。 CRUSH CRUSH是Ceph使用的數(shù)據(jù)分布算法,類似一致性哈希,讓數(shù)據(jù)分配到預(yù)期的地方。 RBD RBD全稱RADOS

14、 block device,是Ceph對外提供的塊設(shè)備服務(wù)。 RGW RGW全稱RADOS gateway,是Ceph對外提供的對象存儲(chǔ)服務(wù),接口與S3和Swift兼容。 CephFS CephFS全稱Ceph File System,是Ceph對外提供的文件系統(tǒng)服務(wù)。1.5 三種存儲(chǔ)類型-塊存儲(chǔ)典型設(shè)備: 磁盤陣列,硬盤主要是將裸磁盤空間映射給主機(jī)使用的。優(yōu)點(diǎn): - 通過Raid與LVM等手段,對數(shù)據(jù)提供了保護(hù)。 - 多塊廉價(jià)的硬盤組合起來,提高容量。- 多塊磁盤組合出來的邏輯盤,提升讀寫效率。缺點(diǎn): - 采用SAN架構(gòu)組網(wǎng)時(shí),光纖交換機(jī),造價(jià)成本高。- 主機(jī)之間無法共享數(shù)據(jù)。使用場景: -

15、 docker容器、虛擬機(jī)磁盤存儲(chǔ)分配。 - 日志存儲(chǔ)。 - 文件存儲(chǔ)。 - 1.6 三種存儲(chǔ)類型-文件存儲(chǔ)典型設(shè)備: FTP、NFS服務(wù)器 為了克服塊存儲(chǔ)文件無法共享的問題,所以有了文件存儲(chǔ)。 在服務(wù)器上架設(shè)FTP與NFS服務(wù),就是文件存儲(chǔ)。優(yōu)點(diǎn):- 造價(jià)低,隨便一臺機(jī)器就可以了。 - 方便文件共享。缺點(diǎn): - 讀寫速率低。 - 傳輸速率慢。使用場景: - 日志存儲(chǔ)。 - 有目錄結(jié)構(gòu)的文件存儲(chǔ)。- 1.7 三種存儲(chǔ)類型-對象存儲(chǔ)典型設(shè)備: 內(nèi)置大容量硬盤的分布式服務(wù)器(swift, s3) 多臺服務(wù)器內(nèi)置大容量硬盤,安裝上對象存儲(chǔ)管理軟件,對外提供讀寫訪問功能。優(yōu)點(diǎn): - 具備塊存儲(chǔ)的讀寫高

16、速。 - 具備文件存儲(chǔ)的共享等特性。使用場景: (適合更新變動(dòng)較少的數(shù)據(jù)) - 圖片存儲(chǔ)。- 視頻存儲(chǔ)。 - 2. Ceph IO流程及數(shù)據(jù)分布2.1 正常IO流程圖步驟: 1. client 創(chuàng)建cluster handler。 2. client 讀取配置文件。 3. client 連接上monitor,獲取集群map信息。 4. client 讀寫io 根據(jù)crshmap 算法請求對應(yīng)的主osd數(shù)據(jù)節(jié)點(diǎn)。 5. 主osd數(shù)據(jù)節(jié)點(diǎn)同時(shí)寫入另外兩個(gè)副本節(jié)點(diǎn)數(shù)據(jù)。6. 等待主節(jié)點(diǎn)以及另外兩個(gè)副本節(jié)點(diǎn)寫完數(shù)據(jù)狀態(tài)。 7. 主節(jié)點(diǎn)及副本節(jié)點(diǎn)寫入狀態(tài)都成功后,返回給client,io寫入完成。2.2

17、 新主IO流程圖說明: 如果新加入的OSD1取代了原有的 OSD4成為 Primary OSD, 由于 OSD1 上未創(chuàng)建 PG , 不存在數(shù)據(jù),那么 PG 上的 I/O 無法進(jìn)行,怎樣工作的呢? 步驟:1. client連接monitor獲取集群map信息。 2. 同時(shí)新主osd1由于沒有pg數(shù)據(jù)會(huì)主動(dòng)上報(bào)monitor告知讓osd2臨時(shí)接替為主。 3. 臨時(shí)主osd2會(huì)把數(shù)據(jù)全量同步給新主osd1。4. client IO讀寫直接連接臨時(shí)主osd2進(jìn)行讀寫。5. osd2收到讀寫io,同時(shí)寫入另外兩副本節(jié)點(diǎn)。6. 等待osd2以及另外兩副本寫入成功。 7. osd2三份數(shù)據(jù)都寫入成功返回給

18、client, 此時(shí)client io讀寫完畢。 8. 如果osd1數(shù)據(jù)同步完畢,臨時(shí)主osd2會(huì)交出主角色。 9. osd1成為主節(jié)點(diǎn),osd2變成副本。2.3 Ceph IO算法流程File用戶需要讀寫的文件。File-Object映射:ino (File的元數(shù)據(jù),F(xiàn)ile的唯一id)。ono(File切分產(chǎn)生的某個(gè)object的序號,默認(rèn)以4M切分一個(gè)塊大小)。oid(object id: ino + ono)。Object是RADOS需要的對象。Ceph指定一個(gè)靜態(tài)hash函數(shù)計(jì)算oid的值,將oid映射成一個(gè)近似均勻分布的偽隨機(jī)值,然后和mask按位相與,得到pgid。Object-

19、PG映射:hash(oid) & mask- pgid 。mask = PG總數(shù)m(m為2的整數(shù)冪)-1 。PG(Placement Group),用途是對object的存儲(chǔ)進(jìn)行組織和位置映射, (類似于redis cluster里面的slot的概念) 一個(gè)PG里面會(huì)有很多object。采用CRUSH算法,將pgid代入其中,然后得到一組OSD。PG-OSD映射:CRUSH(pgid)-(osd1,osd2,osd3) 。2.4 Ceph IO偽代碼流程locator = object_nameobj_hash = hash(locator)pg = obj_hash % num_pgosds

20、_for_pg = crush(pg) # returns a list of osdsprimary = osds_for_pg0replicas = osds_for_pg1:2.5 Ceph RBD IO流程步驟:1. 客戶端創(chuàng)建一個(gè)pool,需要為這個(gè)pool指定pg的數(shù)量。 2. 創(chuàng)建pool/image rbd設(shè)備進(jìn)行掛載。 3. 用戶寫入的數(shù)據(jù)進(jìn)行切塊,每個(gè)塊的大小默認(rèn)為4M,并且每個(gè)塊都有一個(gè)名字,名字就是object+序號。 4. 將每個(gè)object通過pg進(jìn)行副本位置的分配。 5. pg根據(jù)cursh算法會(huì)尋找3個(gè)osd,把這個(gè)object分別保存在這三個(gè)osd上。 6.

21、osd上實(shí)際是把底層的disk進(jìn)行了格式化操作,一般部署工具會(huì)將它格式化為xfs文件系統(tǒng)。 7. object的存儲(chǔ)就變成了存儲(chǔ)一個(gè)文rbd0.object1.file。2.6 Ceph RBD IO框架圖客戶端寫數(shù)據(jù)osd過程:1. 采用的是librbd的形式,使用librbd創(chuàng)建一個(gè)塊設(shè)備,向這個(gè)塊設(shè)備中寫入數(shù)據(jù)。 2. 在客戶端本地同過調(diào)用librados接口,然后經(jīng)過pool,rbd,object、pg進(jìn)行層層映射,在PG這一層中,可以知道數(shù)據(jù)保存在哪3個(gè)OSD上,這3個(gè)OSD分為主從的關(guān)系。 3. 客戶端與primay OSD建立SOCKET 通信,將要寫入的數(shù)據(jù)傳給primary

22、OSD,由primary OSD再將數(shù)據(jù)發(fā)送給其他replica OSD數(shù)據(jù)節(jié)點(diǎn)。2.7 Ceph Pool和PG分布情況說明: - pool是ceph存儲(chǔ)數(shù)據(jù)時(shí)的邏輯分區(qū),它起到namespace的作用。 - 每個(gè)pool包含一定數(shù)量(可配置)的PG。- PG里的對象被映射到不同的OSD上。- pool是分布到整個(gè)集群的。- pool可以做故障隔離域,根據(jù)不同的用戶場景不一進(jìn)行隔離。2.8 Ceph 數(shù)據(jù)擴(kuò)容PG分布場景數(shù)據(jù)遷移流程: - 現(xiàn)狀3個(gè)OSD, 4個(gè)PG - 擴(kuò)容到4個(gè)OSD, 4個(gè)PG現(xiàn)狀: 擴(kuò)容后:說明 每個(gè)OSD上分布很多PG, 并且每個(gè)PG會(huì)自動(dòng)散落在不同的OSD上。如果

23、擴(kuò)容那么相應(yīng)的PG會(huì)進(jìn)行遷移到新的OSD上,保證PG數(shù)量的均衡。3. Ceph心跳機(jī)制3.1 心跳介紹心跳是用于節(jié)點(diǎn)間檢測對方是否故障的,以便及時(shí)發(fā)現(xiàn)故障節(jié)點(diǎn)進(jìn)入相應(yīng)的故障處理流程。問題:- 故障檢測時(shí)間和心跳報(bào)文帶來的負(fù)載之間做權(quán)衡。- 心跳頻率太高則過多的心跳報(bào)文會(huì)影響系統(tǒng)性能。 - 心跳頻率過低則會(huì)延長發(fā)現(xiàn)故障節(jié)點(diǎn)的時(shí)間,從而影響系統(tǒng)的可用性。故障檢測策略應(yīng)該能夠做到: - 及時(shí):節(jié)點(diǎn)發(fā)生異常如宕機(jī)或網(wǎng)絡(luò)中斷時(shí),集群可以在可接受的時(shí)間范圍內(nèi)感知。- 適當(dāng)?shù)膲毫Γ喊▽?jié)點(diǎn)的壓力,和對網(wǎng)絡(luò)的壓力。- 容忍網(wǎng)絡(luò)抖動(dòng):網(wǎng)絡(luò)偶爾延遲。- 擴(kuò)散機(jī)制:節(jié)點(diǎn)存活狀態(tài)改變導(dǎo)致的元信息變化需要通過某種機(jī)制

24、擴(kuò)散到整個(gè)集群。3.2 Ceph 心跳檢測OSD節(jié)點(diǎn)會(huì)監(jiān)聽public、cluster、front和back四個(gè)端口 - public端口:監(jiān)聽來自Monitor和Client的連接。 - cluster端口:監(jiān)聽來自O(shè)SD Peer的連接。 - front端口:供客戶端連接集群使用的網(wǎng)卡, 這里臨時(shí)給集群內(nèi)部之間進(jìn)行心跳。 - back端口:供客集群內(nèi)部使用的網(wǎng)卡。集群內(nèi)部之間進(jìn)行心跳。- hbclient:發(fā)送ping心跳的messenger。3.3 Ceph OSD之間相互心跳檢測步驟: - 同一個(gè)PG內(nèi)OSD互相心跳,他們互相發(fā)送PING/PONG信息。- 每隔6s檢測一次(實(shí)際會(huì)在這

25、個(gè)基礎(chǔ)上加一個(gè)隨機(jī)時(shí)間來避免峰值)。- 20s沒有檢測到心跳回復(fù),加入failure隊(duì)列。3.4 Ceph OSD與Mon心跳檢測OSD報(bào)告給Monitor:- OSD有事件發(fā)生時(shí)(比如故障、PG變更)。- 自身啟動(dòng)5秒內(nèi)。 - OSD周期性的上報(bào)給Monito - OSD檢查failure_queue中的伙伴OSD失敗信息。 - 向Monitor發(fā)送失效報(bào)告,并將失敗信息加入failure_pending隊(duì)列,然后將其從failure_queue移除。- 收到來自failure_queue或者failure_pending中的OSD的心跳時(shí),將其從兩個(gè)隊(duì)列中移除,并告知Monitor取消之前

26、的失效報(bào)告。 - 當(dāng)發(fā)生與Monitor網(wǎng)絡(luò)重連時(shí),會(huì)將failure_pending中的錯(cuò)誤報(bào)告加回到failure_queue中,并再次發(fā)送給Monitor。 - Monitor統(tǒng)計(jì)下線OSD - Monitor收集來自O(shè)SD的伙伴失效報(bào)告。- 當(dāng)錯(cuò)誤報(bào)告指向的OSD失效超過一定閾值,且有足夠多的OSD報(bào)告其失效時(shí),將該OSD下線。3.5 Ceph心跳檢測總結(jié)Ceph通過伙伴OSD匯報(bào)失效節(jié)點(diǎn)和Monitor統(tǒng)計(jì)來自O(shè)SD的心跳兩種方式判定OSD節(jié)點(diǎn)失效。- 及時(shí):伙伴OSD可以在秒級發(fā)現(xiàn)節(jié)點(diǎn)失效并匯報(bào)Monitor,并在幾分鐘內(nèi)由Monitor將失效OSD下線。 - 適當(dāng)?shù)膲毫Γ河捎谟谢?/p>

27、伴OSD匯報(bào)機(jī)制,Monitor與OSD之間的心跳統(tǒng)計(jì)更像是一種保險(xiǎn)措施,因此OSD向Monitor發(fā)送心跳的間隔可以長達(dá)600秒,Monitor的檢測閾值也可以長達(dá)900秒。Ceph實(shí)際上是將故障檢測過程中中心節(jié)點(diǎn)的壓力分散到所有的OSD上,以此提高中心節(jié)點(diǎn)Monitor的可靠性,進(jìn)而提高整個(gè)集群的可擴(kuò)展性。 - 容忍網(wǎng)絡(luò)抖動(dòng):Monitor收到OSD對其伙伴OSD的匯報(bào)后,并沒有馬上將目標(biāo)OSD下線,而是周期性的等待幾個(gè)條件: - 目標(biāo)OSD的失效時(shí)間大于通過固定量osd_heartbeat_grace和歷史網(wǎng)絡(luò)條件動(dòng)態(tài)確定的閾值。 - 來自不同主機(jī)的匯報(bào)達(dá)到mon_osd_min_dow

28、n_reporters。- 滿足前兩個(gè)條件前失效匯報(bào)沒有被源OSD取消。- 擴(kuò)散:作為中心節(jié)點(diǎn)的Monitor并沒有在更新OSDMap后嘗試廣播通知所有的OSD和Client,而是惰性的等待OSD和Client來獲取。以此來減少M(fèi)onitor壓力并簡化交互邏輯。4. Ceph通信框架4.1 Ceph通信框架種類介紹網(wǎng)絡(luò)通信框架三種不同的實(shí)現(xiàn)方式: - Simple線程模式 特點(diǎn):每一個(gè)網(wǎng)絡(luò)鏈接,都會(huì)創(chuàng)建兩個(gè)線程,一個(gè)用于接收,一個(gè)用于發(fā)送。 缺點(diǎn):大量的鏈接會(huì)產(chǎn)生大量的線程,會(huì)消耗CPU資源,影響性能。 - Async事件的I/O多路復(fù)用模式 特點(diǎn):這種是目前網(wǎng)絡(luò)通信中廣泛采用的方式。k版默認(rèn)

29、已經(jīng)使用Asnyc了。- XIO方式使用了開源的網(wǎng)絡(luò)通信庫accelio來實(shí)現(xiàn) 特點(diǎn):這種方式需要依賴第三方的庫accelio穩(wěn)定性,目前處于試驗(yàn)階段。4.2 Ceph通信框架設(shè)計(jì)模式設(shè)計(jì)模式(Subscribe/Publish): 訂閱發(fā)布模式又名觀察者模式,它意圖是“定義對象間的一種一對多的依賴關(guān)系, 當(dāng)一個(gè)對象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對象都得到通知并被自動(dòng)更新”。4.3 Ceph通信框架流程圖步驟:- Accepter監(jiān)聽peer的請求, 調(diào)用 SimpleMessenger:add_accept_pipe() 創(chuàng)建新的 Pipe 到 SimpleMessenger:pipes

30、來處理該請求。 - Pipe用于消息的讀取和發(fā)送。該類主要有兩個(gè)組件,Pipe:Reader,Pipe:Writer用來處理消息讀取和發(fā)送。 - Messenger作為消息的發(fā)布者, 各個(gè) Dispatcher 子類作為消息的訂閱者, Messenger 收到消息之后, 通過 Pipe 讀取消息,然后轉(zhuǎn)給 Dispatcher 處理。- Dispatcher是訂閱者的基類,具體的訂閱后端繼承該類,初始化的時(shí)候通過 Messenger:add_dispatcher_tail/head 注冊到 Messenger:dispatchers. 收到消息后,通知該類處理。- DispatchQueue該

31、類用來緩存收到的消息, 然后喚醒 DispatchQueue:dispatch_thread 線程找到后端的 Dispatch 處理消息。4.4 Ceph通信框架類圖4.5 Ceph通信數(shù)據(jù)格式通信協(xié)議格式需要雙方約定數(shù)據(jù)格式。消息的內(nèi)容主要分為三部分: - header /消息頭,類型消息的信封 - user data /需要發(fā)送的實(shí)際數(shù)據(jù) - payload /操作保存元數(shù)據(jù) - middle /預(yù)留字段 - data /讀寫數(shù)據(jù) - footer /消息的結(jié)束標(biāo)記class Message : public RefCountedObject protected: ceph_msg_hea

32、der header; / 消息頭 ceph_msg_footer footer; / 消息尾 bufferlist payload; / front unaligned blob bufferlist middle; / middle unaligned blob bufferlist data; / data payload (alignment will be preserved where possible) /* recv_stamp is set when the Messenger starts reading the * Message off the wire */ utim

33、e_t recv_stamp; /開始接收數(shù)據(jù)的時(shí)間戳 /* dispatch_stamp is set when the Messenger starts calling dispatch() on * its endpoints */ utime_t dispatch_stamp; /dispatch 的時(shí)間戳 /* throttle_stamp is the point at which we got throttle */ utime_t throttle_stamp; /獲取throttle 的slot的時(shí)間戳 /* time at which message was fully r

34、ead */ utime_t recv_complete_stamp; /接收完成的時(shí)間戳 ConnectionRef connection; /網(wǎng)絡(luò)連接 uint32_t magic = 0; /消息的魔術(shù)字 bi:list_member_hook dispatch_q; /boost:intrusive 成員字段;struct ceph_msg_header _le64 seq; / 當(dāng)前session內(nèi) 消息的唯一 序號 _le64 tid; / 消息的全局唯一的 id _le16 type; / 消息類型 _le16 priority; / 優(yōu)先級 _le16 version; / 版

35、本號 _le32 front_len; / payload 的長度 _le32 middle_len;/ middle 的長度 _le32 data_len; / data 的 長度 _le16 data_off; / 對象的數(shù)據(jù)偏移量 struct ceph_entity_name src; /消息源 /* oldest code we think can decode this. unknown if zero. */ _le16 compat_version; _le16 reserved; _le32 crc; /* header crc32c */ _attribute_ (pack

36、ed);struct ceph_msg_footer _le32 front_crc, middle_crc, data_crc; /crc校驗(yàn)碼 _le64 sig; /消息的64位signature _u8 flags; /結(jié)束標(biāo)志 _attribute_ (packed);5. Ceph CRUSH算法5.1 數(shù)據(jù)分布算法挑戰(zhàn) 數(shù)據(jù)分布和負(fù)載均衡:1. 數(shù)據(jù)分布均衡,使數(shù)據(jù)能均勻的分布到各個(gè)節(jié)點(diǎn)上。2. 負(fù)載均衡,使數(shù)據(jù)訪問讀寫操作的負(fù)載在各個(gè)節(jié)點(diǎn)和磁盤的負(fù)載均衡。 靈活應(yīng)對集群伸縮1. 系統(tǒng)可以方便的增加或者刪除節(jié)點(diǎn)設(shè)備,并且對節(jié)點(diǎn)失效進(jìn)行處理。2. 增加或者刪除節(jié)點(diǎn)設(shè)備后,能自動(dòng)實(shí)現(xiàn)

37、數(shù)據(jù)的均衡,并且盡可能少的遷移數(shù)據(jù)。 支持大規(guī)模集群1. 要求數(shù)據(jù)分布算法維護(hù)的元數(shù)據(jù)相對較小,并且計(jì)算量不能太大。隨著集群規(guī)模的增 加,數(shù)據(jù)分布算法開銷相對比較小。5.2 Ceph CRUSH算法說明 CRUSH算法的全稱為:Controlled Scalable Decentralized Placement of Replicated Data,可控的、可擴(kuò)展的、分布式的副本數(shù)據(jù)放置算法。 pg到OSD的映射的過程算法叫做CRUSH 算法。(一個(gè)Object需要保存三個(gè)副本,也就是需要保存在三個(gè)osd上)。 CRUSH算法是一個(gè)偽隨機(jī)的過程,他可以從所有的OSD中,隨機(jī)性選擇一個(gè)OSD集

38、合,但是同一個(gè)PG每次隨機(jī)選擇的結(jié)果是不變的,也就是映射的OSD集合是固定的。5.3 Ceph CRUSH算法原理CRUSH算法因子:- 層次化的Cluster Map 反映了存儲(chǔ)系統(tǒng)層級的物理拓?fù)浣Y(jié)構(gòu)。定義了OSD集群具有層級關(guān)系的 靜態(tài)拓?fù)浣Y(jié)構(gòu)。OSD層級使得 CRUSH算法在選擇OSD時(shí)實(shí)現(xiàn)了機(jī)架感知能力,也就是通過規(guī)則定義, 使得副本可以分布在不同的機(jī) 架、不同的機(jī)房中、提供數(shù)據(jù)的安全性 。 - Placement Rules 決定了一個(gè)PG的對象副本如何選擇的規(guī)則,通過這些可以自己設(shè)定規(guī)則,用戶可以自定義設(shè)置副本在集群中的分布。5.3.1 層級化的Cluster MapCRUSH M

39、ap是一個(gè)樹形結(jié)構(gòu),OSDMap更多記錄的是OSDMap的屬性(epoch/fsid/pool信息以及osd的ip等等)。葉子節(jié)點(diǎn)是device(也就是osd),其他的節(jié)點(diǎn)稱為bucket節(jié)點(diǎn),這些bucket都是虛構(gòu)的節(jié)點(diǎn),可以根據(jù)物理結(jié)構(gòu)進(jìn)行抽象,當(dāng)然樹形結(jié)構(gòu)只有一個(gè)最終的根節(jié)點(diǎn)稱之為root節(jié)點(diǎn),中間虛擬的bucket節(jié)點(diǎn)可以是數(shù)據(jù)中心抽象、機(jī)房抽象、機(jī)架抽象、主機(jī)抽象等。5.3.2 數(shù)據(jù)分布策略Placement Rules數(shù)據(jù)分布策略Placement Rules主要有特點(diǎn): a. 從CRUSH Map中的哪個(gè)節(jié)點(diǎn)開始查找 b. 使用那個(gè)節(jié)點(diǎn)作為故障隔離域 c. 定位副本的搜索模式(

40、廣度優(yōu)先 or 深度優(yōu)先)rule replicated_ruleset #規(guī)則集的命名,創(chuàng)建pool時(shí)可以指定rule集ruleset 0 #rules集的編號,順序編即可type replicated #定義pool類型為replicated(還有erasure模式)min_size 1 #pool中最小指定的副本數(shù)量不能小1max_size 10 #pool中最大指定的副本數(shù)量不能大于10step take default #查找bucket入口點(diǎn),一般是root類型的bucketstep chooseleaf firstn 0 type host #選擇一個(gè)host,并遞歸選擇葉子節(jié)點(diǎn)

41、osdstep emit #結(jié)束5.3.3 Bucket隨機(jī)算法類型 一般的buckets:適合所有子節(jié)點(diǎn)權(quán)重相同,而且很少添加刪除item。 list buckets:適用于集群擴(kuò)展類型。增加item,產(chǎn)生最優(yōu)的數(shù)據(jù)移動(dòng),查找item,時(shí)間復(fù)雜度O(n)。 tree buckets:查找負(fù)責(zé)度是O (log n), 添加刪除葉子節(jié)點(diǎn)時(shí),其他節(jié)點(diǎn)node_id不變。 straw buckets:允許所有項(xiàng)通過類似抽簽的方式來與其他項(xiàng)公平“競爭”。定位副本時(shí),bucket中的每一項(xiàng)都對應(yīng)一個(gè)隨機(jī)長度的straw,且擁有最長長度的straw會(huì)獲得勝利(被選中),添加或者重新計(jì)算,子樹之間的數(shù)據(jù)移動(dòng)提供最優(yōu)的解決方案。5.4 CRUSH算法案例說明: 集群中有部分sas和ssd磁盤,現(xiàn)在有個(gè)業(yè)務(wù)線性能

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論