本書致力于幫助讀者形成有關(guān)Linux開源存儲世界的細致的拓撲,從存儲硬件、Linux存儲堆棧、存儲加速、存儲安全、存儲管理、分布式存儲、云存儲等各個角度與層次展開討論,同時對處于主導(dǎo)地位的、較為流行的開源存儲項目進行闡述,包括SPDK、ISA-L、OpenSDS、Ceph、OpenStack Swift與Cinder、容器存儲等。本書內(nèi)容基本不涉及具體源碼,主要圍繞各個項目的起源與發(fā)展、實現(xiàn)原理與框架、要解決的網(wǎng)絡(luò)問題等方面展開討論,致力于幫助讀者對Linux開源存儲技術(shù)的實現(xiàn)與發(fā)展形成整體清晰的認識。本書語言通俗易懂,能夠帶領(lǐng)讀者快速走入Linux開源存儲的世界并作出自己的貢獻。
英特爾開源技術(shù)中心負責(zé)英特爾的開源技術(shù)中心的開源工作,英特爾的工程師都參與其中。您可以在一個地方找到我們維護和貢獻的項目,從Linux內(nèi)核到云編排,到ClearLinux和KATA容器等重點項目。每個項目都有自己的部分,在那里可以很容易地了解項目并參與到我們的全球社區(qū)中。
第1章 Linux開源存儲 1
1.1 Linux和開源存儲 1
1.1.1 為什么需要開源存儲 3
1.1.2 Linux開源存儲技術(shù)原理和解決方案 6
1.2 Linux開源存儲系統(tǒng)方案介紹 8
1.2.1 Linux單節(jié)點存儲方案 8
1.2.2 存儲服務(wù)的分類 11
1.2.3 數(shù)據(jù)壓縮 13
1.2.4 重復(fù)數(shù)據(jù)刪除 16
1.2.5 開源云計算數(shù)據(jù)存儲平臺 27
1.2.6 存儲管理和軟件定義存儲 29
1.2.7 開源分布式存儲和大數(shù)據(jù)解決方案 33
1.2.8 開源文檔管理系統(tǒng) 37
1.2.9 網(wǎng)絡(luò)功能虛擬化存儲 39
1.2.10 虛擬機/容器存儲 40
1.2.11 數(shù)據(jù)保護 43
1.3 三大頂級基金會 44
第2章 存儲硬件與協(xié)議 47
2.1 存儲設(shè)備的歷史軌跡 47
2.2 存儲介質(zhì)的進化 53
2.2.1 3D NAND 53
2.2.2 3D XPoint 55
2.2.3 Intel Optane 58
2.3 存儲接口協(xié)議的演變 59
2.4 網(wǎng)絡(luò)存儲技術(shù) 62
第3章 Linux存儲棧 67
3.1 Linux存儲系統(tǒng)概述 67
3.2 系統(tǒng)調(diào)用 69
3.3 文件系統(tǒng) 72
3.3.1 文件系統(tǒng)概述 73
3.3.2 Btrfs 75
3.4 Page Cache 80
3.5 Direct I/O 82
3.6 塊層(Block Layer) 83
3.6.1 bio與request 84
3.6.2 I/O調(diào)度 86
3.6.3 I/O合并 88
3.7 LVM 90
3.8 bcache 93
3.9 DRBD 96
第4章 存儲加速 99
4.1 基于CPU處理器的加速和優(yōu)化方案 100
4.2 基于協(xié)處理器或其他硬件的加速方案 103
4.2.1 FPGA加速 103
4.2.2 智能網(wǎng)卡加速 105
4.2.3 Intel QAT 107
4.2.4 NVDIMM為存儲加速 110
4.3 智能存儲加速庫(ISA-L) 111
4.3.1 數(shù)據(jù)保護:糾刪碼與磁盤陣列 112
4.3.2 數(shù)據(jù)安全:哈希 113
4.3.3 數(shù)據(jù)完整性:循環(huán)冗余校驗碼 115
4.3.4 數(shù)據(jù)壓縮:IGZIP 116
4.3.5 數(shù)據(jù)加密 117
4.4 存儲性能軟件加速庫(SPDK) 117
4.4.1 SPDK NVMe驅(qū)動 119
4.4.2 SPDK應(yīng)用框架 133
4.4.3 SPDK用戶態(tài)塊設(shè)備層 136
4.4.4 SPDK vhost target 150
4.4.5 SPDK iSCSI Target 156
4.4.6 SPDK NVMe-oF Target 163
4.4.7 SPDK RPC 165
4.4.8 SPDK生態(tài)工具介紹 172
第5章 存儲安全 181
5.1 可用性 181
5.1.1 SLA 181
5.1.2 MTTR、MTTF和MTBF 182
5.1.3 高可用方案 183
5.2 可靠性 185
5.2.1 磁盤陣列 186
5.2.2 糾刪碼 187
5.3 數(shù)據(jù)完整性 188
5.4 訪問控制 189
5.5 加密與解密 191
第6章 存儲管理與軟件定義存儲 194
6.1 OpenSDS 194
6.1.1 OpenSDS社區(qū) 195
6.1.2 OpenSDS架構(gòu) 195
6.1.3 OpenSDS應(yīng)用場景 198
6.1.4 與Kubernetes集成 200
6.1.5 與OpenStack集成 200
6.2 Libvirt存儲管理 201
6.2.1 Libvirt介紹 201
6.2.2 Libvirt存儲池和存儲卷 205
第7章 分布式存儲與Ceph 206
7.1 Ceph體系結(jié)構(gòu) 209
7.1.1 對象存儲 211
7.1.2 RADOS 212
7.1.3 OSD 212
7.1.4 數(shù)據(jù)尋址 214
7.1.5 存儲池 219
7.1.6 Monitor 220
7.1.7 數(shù)據(jù)操作流程 227
7.1.8 Cache Tiering 228
7.1.9 塊存儲 230
7.1.10 Ceph FS 232
7.2 后端存儲ObjectStore 235
7.2.1 FileStore 236
7.2.2 BlueStore 240
7.2.3 SeaStore 243
7.3 CRUSH算法 244
7.3.1 CRUSH算法的基本特性 244
7.3.2 CRUSH算法中的設(shè)備位置及狀態(tài) 246
7.3.3 CRUSH中的規(guī)則與算法細節(jié) 249
7.3.4 CRUSH算法實踐 254
7.3.5 CRUSH算法在Ceph中的應(yīng)用 261
7.4 Ceph可靠性 262
7.4.1 OSD多副本 263
7.4.2 OSD糾刪碼 264
7.4.3 RBD mirror 265
7.4.4 RBD Snapshot 267
7.4.5 Ceph數(shù)據(jù)恢復(fù) 271
7.4.6 Ceph一致性 274
7.4.7 Ceph Scrub機制 278
7.5 Ceph中的緩存 279
7.5.1 RBDCache具體實現(xiàn) 285
7.5.2 固態(tài)硬盤用作緩存 287
7.6 Ceph加密和壓縮 289
7.6.1 加密 289
7.6.2 壓縮 291
7.6.3 加密和壓縮的加速 294
7.7 QoS 294
7.7.1 前端QoS 294
7.7.2 后端QoS 295
7.7.3 dmClock客戶端 297
7.8 Ceph性能測試與分析 298
7.8.1 集群性能測試 299
7.8.2 集群性能數(shù)據(jù) 304
7.8.3 綜合測試分析工具 307
7.8.4 高級話題 311
7.9 Ceph與OpenStack 315
第8章 OpenStack存儲 318
8.1 Swift 321
8.1.1 Swift體系結(jié)構(gòu) 321
8.1.2 環(huán) 327
8.1.3 Swift API 330
8.1.4 認證 331
8.1.5 對象管理與操作 333
8.1.6 數(shù)據(jù)一致性 337
8.2 Cinder 338
8.2.1 Cinder體系結(jié)構(gòu) 338
8.2.2 Cinder API 341
8.2.3 cinder-scheduler 342
8.2.4 cinder-volume 343
8.2.5 cinder-backup 347
第9章 容器存儲 348
9.1 容器 348
9.1.1 容器技術(shù)框架 350
9.1.2 Docker 353
9.1.3 容器與鏡像 355
9.2 Docker存儲 356
9.2.1 臨時存儲 357
9.2.2 持久化存儲 366
9.3 Kubernetes存儲 369
9.3.1 Kubernetes核心概念 370
9.3.2 Kubernetes數(shù)據(jù)卷管理 376
9.3.3 Kubernetes CSI 380