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