序言
前言
第1章 Ceph整體架構 1
1.1 Ceph的發展曆程 1
1.2 Ceph的設計目標 2
1.3 Ceph基本架構圖 2
1.4 Ceph客戶端接口 3
1.4.1 RBD 4
1.4.2 CephFS 4
1.4.3 RadosGW 4
1.5 RADOS 6
1.5.1 Monitor 6
1.5.2 對象存儲 7
1.5.3 pool和PG的概念 7
1.5.4 對象尋址過程 8
1.5.5 數據讀寫過程 9
1.5.6 數據均衡 10
1.5.7 Peering 11
1.5.8 Recovery和Backfill 11
1.5.9 糾刪碼 11
1.5.10 快照和剋隆 12
1.5.11 Cache Tier 12
1.5.12 Scrub 13
1.6 本章小結 13
第2章 Ceph通用模塊 14
2.1 Object 14
2.2 Buffer 16
2.2.1 buffer::raw 16
2.2.2 buffer::ptr 17
2.2.3 buffer::list 17
2.3 綫程池 19
2.3.1 綫程池的啓動 20
2.3.2 工作隊列 20
2.3.3 綫程池的執行函數 21
2.3.4 超時檢查 22
2.3.5 ShardedThreadPool 22
2.4 Finisher 23
2.5 Throttle 23
2.6 SafeTimer 24
2.7 本章小結 25
第3章 Ceph網絡通信 26
3.1 Ceph網絡通信框架 26
3.1.1 Message 27
3.1.2 Connection 29
3.1.3 Dispatcher 29
3.1.4 Messenger 29
3.1.5 網絡連接的策略 30
3.1.6 網絡模塊的使用 30
3.2 Simple實現 32
3.2.1 SimpleMessager 33
3.2.2 Accepter 33
3.2.3 DispatchQueue 33
3.2.4 Pipe 34
3.2.5 消息的發送 35
3.2.6 消息的接收 36
3.2.7 錯誤處理 37
3.3 本章小結 38
第4章 CRUSH數據分布算法 39
4.1 數據分布算法的挑戰 39
4.2 CRUSH算法的原理 40
4.2.1 層級化的Cluster Map 40
4.2.2 Placement Rules 42
4.2.3 Bucket隨機選擇算法 46
4.3 代碼實現分析 49
4.3.1 相關的數據結構 49
4.3.2 代碼實現 50
4.4 對CRUSH算法的評價 52
4.5 本章小結 52
第5章 Ceph客戶端 53
5.1 Librados 53
5.1.1 RadosClient 54
5.1.2 IoCtxImpl 56
5.2 OSDC 56
5.2.1 ObjectOperation 56
5.2.2 op_target 57
5.2.3 Op 57
5.2.4 Striper 58
5.2.5 ObjectCacher 59
5.3 客戶寫操作分析 59
5.3.1 寫操作消息封裝 60
5.3.2 發送數據op_submit 61
5.3.3 對象尋址_calc_target 61
5.4 Cls 62
5.4.1 模塊以及方法的注冊 62
5.4.2 模塊的方法執行 63
5.4.3 舉例說明 64
5.5 Librbd 65
5.5.1 RBD的相關的對象 65
5.5.2 RBD元數據操作 66
5.5.3 RBD數據操作 67
5.5.4 RBD的快照和剋隆 69
5.6 本章小結 71
第6章 Ceph的數據讀寫 72
6.1 OSD模塊靜態類圖 72
6.2 相關數據結構 73
6.2.1 Pool 74
6.2.2 PG 75
6.2.3 OSDMap 75
6.2.4 OSDOp 77
6.2.5 Object_info_t 77
6.2.6 ObjectState 78
6.2.7 SnapSetContext 79
6.2.8 ObjectContext 79
6.2.9 Session 80
6.3 讀寫操作的序列圖 81
6.4 讀寫流程代碼分析 83
6.4.1 階段1:接收請求 83
6.4.2 階段2:OSD的op_wq處理 85
6.4.3 階段3:PGBackend的處理 95
6.4.4 從副本的處理 95
6.4.5 主副本接收到從副本的應答 95
6.5 本章小結 96
第7章 本地對象存儲 97
7.1 基本概念介紹 98
7.1.1 對象的元數據 98
7.1.2 事務和日誌的基本概念 98
7.1.3 事務的封裝 99
7.2 ObjectStore對象存儲接口 100
7.2.1 對外接口說明 101
7.2.2 ObjectStore代碼示例 101
7.3 日誌的實現 102
7.3.1 Jouanal對外接口 102
7.3.2 FileJournal 103
7.4 FileStore的實現 109
7.4.1 日誌的三種類型 110
7.4.2 JournalingObjectStore 111
7.4.3 Filestore的更新操作 112
7.4.4 日誌的應用 115
7.4.5 日誌的同步 115
7.5 omap的實現 116
7.5.1 omap存儲 117
7.5.2 omap的剋隆 118
7.5.3 部分代碼實現分析 119
7.6 CollectionIndex 120
7.6.1 CollectIndex接口 122
7.6.2 HashIndex 123
7.6.3 LFNIndex 124
7.7 本章小結 124
第8章 Ceph糾刪碼 125
8.1 EC的基本原理 125
8.2 EC的不同插件 126
8.2.1 RS編碼 126
8.2.2 LRC編碼 126
8.2.3 SHEC編碼 128
8.2.4 EC和副本的比較 129
8.3 Ceph中EC的實現 129
8.3.1 Ceph中EC的基本概念 129
8.3.2 EC支持的寫操作 130
8.3.3 EC的迴滾機製 131
8.4 EC的源代碼分析 132
8.4.1 EC的寫操作 132
8.4.2 EC的write_full 133
8.4.3 ECBackend 133
8.5 本章小結 133
第9章 Ceph快照和剋隆 134
9.1 基本概念 134
9.1.1 快照和剋隆 134
9.1.2 RDB的快照和剋隆比較 135
9.2 快照實現的核心數據結構 137
9.3 快照的工作原理 139
9.3.1 快照的創建 139
9.3.2 快照的寫操作 139
9.3.3 快照的讀操作 140
9.3.4 快照的迴滾 141
9.3.5 快照的刪除 141
9.4 快照讀寫操作源代碼分析 141
9.4.1 快照的寫操作 141
9.4.2 make_writeable函數 142
9.4.3 快照的讀操作 145
9.5 本章小結 146
第10章 Ceph Peering機製 147
10.1 statechart狀態機 147
10.1.1 狀態 147
10.1.2 事件 148
10.1.3 狀態響應事件 148
10.1.4 狀態機的定義 149
10.1.5 context函數 150
10.1.6 事件的特殊處理 150
10.2 PG狀態機 151
10.3 PG的創建過程 151
10.3.1 PG在主OSD上的創建 151
10.3.2 PG在從OSD上的創建 153
10.3.3 PG的加載 154
10.4 PG創建後狀態機的狀態轉換 154
10.5 Ceph的Peering過程分析 156
10.5.1 基本概念 156
10.5.2 PG日誌 159
10.5.3 Peering的狀態轉換圖 166
10.5.4 pg_info數據結構 167
10.5.5 GetInfo 169
10.5.6 GetLog 176
10.5.7 GetMissing 181
10.5.8 Active操作 183
10.5.9 副本端的狀態轉移 187
10.5.10 狀態機異常處理 188
10.6 本章小結 188
第11章 Ceph數據修復 189
11.1 資源預約 190
11.2 數據修復狀態轉換圖 191
11.3 Recovery過程 193
11.3.1 觸發修復 193
11.3.2 ReplicatedPG 195
11.3.3 pgbackend 199
11.4 Backfill過程 205
11.4.1 相關數據結構 205
11.4.2 Backfill的具體實現 205
11.5 本章小結 210
第12章 Ceph一緻性檢查 211
12.1 端到端的數據校驗 211
12.2 Scrub概念介紹 213
12.3 Scrub的調度 213
12.3.1 相關數據結構 214
12.3.2 Scrub的調度實現 214
12.4 Scrub的執行 217
12.4.1 相關數據結構 217
12.4.2 Scrub的控製流程 219
12.4.3 構建ScrubMap 221
12.4.4 從副本處理 224
12.4.5 副本對比 225
12.4.6 結束Scrub過程 228
12.5 本章小結 228
第13章 Ceph自動分層存儲 230
13.1 自動分層存儲技術 230
13.2 Ceph分層存儲架構和原理 231
13.3 Cache Tier的模式 231
13.4 Cache Tier的源碼分析 234
13.4.1 pool中的Cache Tier數據結構 234
13.4.2 HitSet 236
13.4.3 Cache Tier的初始化 237
13.4.4 讀寫路徑上的Cache Tier處理 238
13.4.5 cache的flush和evict操作 245
13.5 本章小結 250
· · · · · · (
收起)