《Ceph之RADOS設(shè)計原理與實現(xiàn)》是繼《Ceph設(shè)計原理與實現(xiàn)》之后,中興通訊Clove團(tuán)隊在Ceph領(lǐng)域的又一全新力作。Clove團(tuán)隊是Ceph開源社區(qū)國內(nèi)負(fù)盛名的組織貢獻(xiàn)者之一,自Jewel版起,連續(xù)4個版本代碼貢獻(xiàn)量位列世界前三。目前該團(tuán)隊擁有社區(qū)技術(shù)委員會成員一名,Ceph Mermber三名。鑒于Clove團(tuán)隊在Ceph不斷發(fā)展與壯大過程中做出的杰出貢獻(xiàn),創(chuàng)始人SageWeil先生再次為該書親自作序。
存儲是云計算的基石,Ceph是開源分布式軟件定義存儲解決方案中的領(lǐng)頭羊。該書以大量存儲技術(shù)的基本原理(例如分布式一致性、文件系統(tǒng)等)為主線,系統(tǒng)剖析了Ceph核心組件RADOS的設(shè)計原理與具體實現(xiàn)。通過閱讀該書可以掌握Ceph的核心設(shè)計理念與高級應(yīng)用技巧,從而快速提升自身對于Ceph的研發(fā)與運維能力。
適讀人群 :本書適合于對 Ceph 有一定了解,想更進(jìn)一步參與到 Ceph 開源項目中來,并致力于后續(xù)為 Ceph、特別是 RADOS 組件添磚加瓦的開發(fā)者或者高級開發(fā)者閱讀。此外,高級運維人員 1)Ceph 創(chuàng)始人 Sage Weil 親自作序,王璞、陳緒、何寶宏、孫振鵬等專家力薦。
(2)作者是中興通訊Clove團(tuán)隊核心成員,同時也是Ceph 開源社區(qū)技術(shù)委員會成員與 Ceph Member聯(lián)袂奉獻(xiàn)。
(3)中興通訊Clove團(tuán)隊在Ceph項目的Commit數(shù)量,世界NO.2,僅次于創(chuàng)始團(tuán)隊Red Hat
(4)系統(tǒng)剖析 Ceph 核心組件 RADOS 的設(shè)計原理與具體實現(xiàn),全面掌握 Ceph 的核心設(shè)計理念與高級應(yīng)用技巧,快速提升對于 Ceph 的研發(fā)與運維能力。
2018年3月,全球 Cephers 的盛會——Cephalocon APAC 2018 在北京舉行。來自RedHat、SUSE、Intel、中興通訊、中國移動等 Ceph 生態(tài)聯(lián)盟成員的 1000 多位 Ceph 開發(fā)者、使用者和愛好者共聚一堂,探討 Ceph 的現(xiàn)狀與未來,彰顯了 Ceph 開源社區(qū)的蓬勃生機。
時光荏苒,自Ceph由Sage A. Weil在博士論文提出以來,十多年間,已經(jīng)從一個默默無聞的學(xué)生作品成長為分布式存儲領(lǐng)域最具活力與領(lǐng)導(dǎo)力的開源項目。據(jù) Ceph 官方不完全統(tǒng)計,在世界范圍內(nèi),目前已有超過 100 家公司(機構(gòu))研究與使用 Ceph,其中不乏歐洲原子能研究組織(CERN)這樣知名的全球性科研機構(gòu)和 Yahoo、阿里巴巴等著名的互聯(lián)網(wǎng)公司?梢姡鳛榉植际杰浖x存儲的標(biāo)桿,Ceph 領(lǐng)先的架構(gòu)和設(shè)計理念已經(jīng)深入人心。
Ceph 的魅力源于其架構(gòu)的前瞻性、可塑性和長期演進(jìn)能力。事實上,在設(shè)計之初,Ceph 被定位成一個純粹的分布式文件系統(tǒng),主要用于解決大型超級計算機之間如何通過聯(lián)網(wǎng)的方式提供可擴(kuò)展的文件存儲服務(wù)。隨著云計算、大數(shù)據(jù)和人工智能逐漸成為信息時代的主旋律,Ceph 正不斷拓展自身的觸角,從取代 Swift 成為 OpenStack 首選存儲后端進(jìn)入公眾視野,到完美適配以 Amazon S3 為代表的公有云接口,再到征戰(zhàn)下一個沒有硝煙的虛擬化(技術(shù))高地——容器。時至今日,Ceph 已然成為一個兼容塊、文件、對象等各類經(jīng)典/新興存儲協(xié)議的超級統(tǒng)一存儲平臺。隨著 Ceph 的加速進(jìn)化,可以預(yù)見,我們將會看到越來越多的基于 Ceph 構(gòu)建的自定義存儲應(yīng)用。
為什么寫這本書
開源軟件誕生的土壤決定了大部分開源軟件從來就不是面向普通大眾的,典型的如 Linux,其無可視化界面的命令行操作方式和海量命令足以讓90%的用戶望而卻步。Ceph 作為一個出身于學(xué)院的開源作品也存在類似的缺點。此外,隨著自身的不斷演進(jìn)和完善,Ceph 已經(jīng)從最初的分布式文件系統(tǒng)逐漸成長為一個全能的分布式統(tǒng)一存儲平臺,因此其復(fù)雜程度遠(yuǎn)遠(yuǎn)超過功能相對單一的傳統(tǒng)存儲系統(tǒng)。更糟的是,雖然社區(qū)有建議的編碼規(guī)范,但是為了不挫傷貢獻(xiàn)者的積極性,這些規(guī)范并未作為強制要求,因此隨著貢獻(xiàn)者數(shù)量的快速增長,Ceph 代碼本身也不可避免地趨于異構(gòu)化。上述種種因素使得無論是使用還是開發(fā) Ceph 都難度巨大,再加上語言和文化背景的差異,足以造成大量國內(nèi) Ceph 初級玩家難以逾越的鴻溝。
距我們創(chuàng)作《Ceph 設(shè)計原理與實現(xiàn)》一書已經(jīng)過去了兩年。一方面,Ceph 代碼發(fā)生了巨大變化;另一方面,我們對 Ceph 的認(rèn)知也有了較大提升。因此,我們兩位負(fù)責(zé)研究 RADOS 組件的同事基于前作中的相關(guān)章節(jié)重新創(chuàng)作了本書。
與前作相比,本書更加專注于 RADOS 這個基礎(chǔ)組件,而剝離了RBD、RGW、CephFS 等具體存儲應(yīng)用和案例實戰(zhàn)部分。這主要是基于以下考慮:
首先,RBD、RGW 和 CephFS與其承載的具體業(yè)務(wù)耦合度較高,例如 RBD 后續(xù)的重點工作是兼容 iSCSI/FC 傳統(tǒng)塊存儲接口,而要徹底掌握 RGW 則必然要對以 S3、Swift 為代表的新興對象存儲協(xié)議簇有比較透徹的了解等,限于篇幅,很難單純從 Ceph 的角度對這些組件做出比較完整和透徹的解讀。
其次,由于時間倉促,加之不少章節(jié)均由不同的作者獨立創(chuàng)作,因此前作中章節(jié)之間難免重復(fù)或者脫節(jié),而本書則更加注重章節(jié)之間銜接與編排的合理性。此外,由于作者數(shù)量大幅減少,本書風(fēng)格更加統(tǒng)一,相對而言讀者可以獲得更好的閱讀體驗。
再次,藉本次重新創(chuàng)作,我們進(jìn)一步削弱了前作中相關(guān)章節(jié)與代碼之間的耦合性,更加側(cè)重于闡述設(shè)計理念。由于 Ceph 社區(qū)十分活躍,貢獻(xiàn)者數(shù)量眾多,每個版本代碼都會發(fā)生翻天覆地的變化,因此,理解設(shè)計原理,以不變應(yīng)萬變,無疑比掌握某個特定版本的代碼更為重要。
最后,需要再次強調(diào)的是,雖然本書部分章節(jié)源自《Ceph 設(shè)計原理與實現(xiàn)》一書,但是基本上都進(jìn)行了重新創(chuàng)作。重復(fù)錄入這些章節(jié)不是簡單的查漏補缺,而是進(jìn)一步提煉與升華,它們是本書不可或缺的組成部分。事實上,與新增內(nèi)容相比,重新創(chuàng)作這些章節(jié)花費了我們更多的時間與精力。
本書的讀者對象
本書適合于對 Ceph 有一定了解,想更進(jìn)一步參與到 Ceph 開源項目中來,并致力于后續(xù)為 Ceph,特別是 RADOS 組件添磚加瓦的開發(fā)者或者高級開發(fā)者閱讀。
此外,高級運維人員通過閱讀本書也能夠了解和掌握 Ceph 的核心設(shè)計理念及高級應(yīng)用技巧,從而在日常運維工作中更加得心應(yīng)手。
與《Ceph設(shè)計原理與實現(xiàn)》力求如實反映源碼的實現(xiàn)細(xì)節(jié)不同,本書是 Ceph(特別是 RADOS 組件)設(shè)計思想與基本理念的高度濃縮。有條件的讀者可以將兩本書對照閱讀,相信可以有更大收獲。
本書的主要內(nèi)容
本書主要介紹 Ceph 的核心——RADOS。具體編排如下:
第1章 一生萬物——RADOS 導(dǎo)論
Ceph 是集傳統(tǒng)塊、文件存儲以及新興對象存儲于一身的超級分布式統(tǒng)一存儲平臺。
Ceph 在架構(gòu)上采用存儲應(yīng)用與存儲服務(wù)完全分離的模式,并基于 RADOS 對外提供高性能和可輕松擴(kuò)展的存儲服務(wù)。理論上,基于 RADOS 及其派生的 librados 標(biāo)準(zhǔn)庫可以開發(fā)任意類型的存儲應(yīng)用,典型的如 Ceph 當(dāng)前的三大核心應(yīng)用:RBD、RGW和 CephFS。
作為全書的開始,本章旨在為讀者建立一個 RAD
作者簡介
謝型果
中興通訊軟件工程師,6 年存儲研發(fā)經(jīng)驗,精通本地文件系統(tǒng)ZFS。2014年開始研究Ceph,目前是 Ceph 開源社區(qū)技術(shù)委員會成員兼 Ceph Member,主要研究方向為 RADOS。
嚴(yán) 軍
中興通訊軟件工程師,6 年存儲研發(fā)經(jīng)驗,先后從事 NAS 與分布式統(tǒng)一存儲產(chǎn)品研發(fā)。2016 年加入 Ceph 開源社區(qū),主要研究領(lǐng)域為 RADOS 與分布式存儲系統(tǒng) QoS,目前是 Ceph 開源社區(qū)的 Ceph Member。
序1
序2
序3
前言
第1章 一生萬物——RADOS導(dǎo)論 1
1.1 RADOS概述 3
1.2 存儲池與PG 5
1.3 對象演進(jìn)與排序 6
1.4 stable_mod與客戶端尋址 10
1.5 PG分裂與集群擴(kuò)容 13
1.6 總結(jié)和展望 17
第2章 計算尋址之美與數(shù)據(jù)平衡之殤——CRUSH 19
2.1 抽簽算法 20
2.2 CRUSH算法詳解 24
2.2.1 集群的層級化描述——cluster map 25
2.2.2 數(shù)據(jù)分布策略——placement rule 27
2.3 調(diào)制CRUSH 33
2.3.1 編輯CRUSH map 34
2.3.2 定制CRUSH規(guī)則 38
2.4 數(shù)據(jù)重平衡 40
2.4.1 reweight 42
2.4.2 weightset 45
2.4.3 upmap 47
2.4.4 balancer 48
2.5 總結(jié)和展望 52
第3章 集群的大腦——Monitor 54
3.1 集群表OSDMap 56
3.2 集群管理 60
3.2.1 OSD管理 60
3.2.2 存儲池管理 63
3.2.3 告警管理 66
3.3 總結(jié)和展望 66
第4章 存儲的基石——OSD 68
4.1 OSD概述 69
4.1.1 集群管理 70
4.1.2 網(wǎng)絡(luò)通信 71
4.1.3 公共服務(wù) 72
4.2 OSD上電 74
4.3 故障檢測 75
4.4 空間管理 78
4.5 總結(jié)和展望 82
第5章 高效本地對象存儲引擎——BlueStore 84
5.1 設(shè)計原理 85
5.2 磁盤數(shù)據(jù)結(jié)構(gòu) 89
5.2.1 PG 89
5.2.2 對象 89
5.3 緩存機制 97
5.3.1 概述 97
5.3.2 實現(xiàn) 100
5.4 磁盤空間管理 103
5.4.1 概述 103
5.4.2 BitmapFreelistManager 106
5.4.3 BitmapAllocator 107
5.5 BlueFS 109
5.5.1 概述 109
5.5.2 磁盤數(shù)據(jù)結(jié)構(gòu) 112
5.5.3 塊設(shè)備 116
5.6 實現(xiàn)原理 116
5.6.1 mkfs 117
5.6.2 mount 117
5.6.3 read 119
5.6.4 write 121
5.7 使用指南 126
5.7.1 部署B(yǎng)lueStore 127
5.7.2 配置參數(shù) 129
5.8 總結(jié)和展望 132
第6章 移動的對象載體——PG 134
6.1 基本概念與術(shù)語 135
6.2 讀寫流程 138
6.2.1 消息接收與分發(fā) 145
6.2.2 do_request 147
6.2.3 do_op 149
6.2.4 execute_ctx 155
6.3 狀態(tài)遷移 163
6.3.1 狀態(tài)機概述 164
6.3.2 創(chuàng)建PG 167
6.3.3 Peering 170
6.4 總結(jié)和展望 184
第7章 在線數(shù)據(jù)恢復(fù)——Recovery和Backfill 185
7.1 Recovery 186
7.1.1 資源預(yù)留 186
7.1.2 對象修復(fù) 187
7.1.3 增量Recovery和異步Recovery 191
7.2 Backfill 192
7.3 總結(jié)和展望 199
第8章 數(shù)據(jù)正確性與一致性的守護(hù)者——Scrub 201
8.1 Scrub的指導(dǎo)思想 202
8.2 Scrub流程詳解 207
8.2.1 資源預(yù)留 207
8.2.2 范圍界定 209
8.2.3 對象掃描 211
8.2.4 副本比對 213
8.2.5 統(tǒng)計更新與自動修復(fù) 215
8.3 Scrub搶占 215
8.4 總結(jié)和展望 218
第9章 基于dmClock的分布式流控策略 219
9.1 概述 220
9.2 dmClock基本原理 221
9.2.1 mClock 221
9.2.2 dmClock 224
9.3 dmClock算法實現(xiàn) 225
9.3.1 I/O請求入隊 227
9.3.2 I/O請求出隊 227
9.3.3 實例分析 229
9.4 在Ceph中的應(yīng)用實踐 233
9.4.1 client的界定 233
9.4.2 支持帶寬限制 235
9.4.3 存儲卷的QoS 237
9.4.4 集群流控策略 240
9.5 總結(jié)和展望 244
第10章 糾刪碼原理與實踐 246
10.1 RAID技術(shù)概述 247
10.2 RSRAID和Jerasure 253
10.2.1 計算校驗和 254
10.2.2 數(shù)據(jù)恢復(fù) 255
10.2.3 算術(shù)運算 256
10.2.4 缺陷與改進(jìn) 261
10.2.5 Jerasure 262
10.3 糾刪碼在Ceph中的應(yīng)用 264
10.3.1 術(shù)語 266
10.3.2 新寫 268
10.3.3 讀 269
10.3.4 覆蓋寫 271
10.3.5 日志 274
10.3.6 Scrub 275
10.4 總結(jié)和展望 275
......