本書致力于幫助讀者形成有關Linux開源存儲世界的細致的拓撲,從存儲硬件、Linux存儲堆棧、存儲加速、存儲安全、存儲管理、分布式存儲、云存儲等各個角度與層次展開討論,同時對處于主導地位的、較為流行的開源存儲項目進行闡述,包括SPDK、ISA-L、OpenSDS、Ceph、OpenStack Swift與Cinder、容器存儲等。本書內容基本不涉及具體源碼,主要圍繞各個項目的起源與發展、實現原理與框架、要解決的網絡問題等方面展開討論,致力于幫助讀者對Linux開源存儲技術的實現與發展形成整體清晰的認識。本書語言通俗易懂,能夠帶領讀者快速走入Linux開源存儲的世界并作出自己的貢獻。
英特爾開源技術中心負責英特爾的開源技術中心的開源工作,英特爾的工程師都參與其中。您可以在一個地方找到我們維護和貢獻的項目,從Linux內核到云編排,到ClearLinux和KATA容器等重點項目。每個項目都有自己的部分,在那里可以很容易地了解項目并參與到我們的全球社區中。
第1章 Linux開源存儲 1
1.1 Linux和開源存儲 1
1.1.1 為什么需要開源存儲 3
1.1.2 Linux開源存儲技術原理和解決方案 6
1.2 Linux開源存儲系統方案介紹 8
1.2.1 Linux單節點存儲方案 8
1.2.2 存儲服務的分類 11
1.2.3 數據壓縮 13
1.2.4 重復數據刪除 16
1.2.5 開源云計算數據存儲平臺 27
1.2.6 存儲管理和軟件定義存儲 29
1.2.7 開源分布式存儲和大數據解決方案 33
1.2.8 開源文檔管理系統 37
1.2.9 網絡功能虛擬化存儲 39
1.2.10 虛擬機/容器存儲 40
1.2.11 數據保護 43
1.3 三大頂級基金會 44
第2章 存儲硬件與協議 47
2.1 存儲設備的歷史軌跡 47
2.2 存儲介質的進化 53
2.2.1 3D NAND 53
2.2.2 3D XPoint 55
2.2.3 Intel Optane 58
2.3 存儲接口協議的演變 59
2.4 網絡存儲技術 62
第3章 Linux存儲棧 67
3.1 Linux存儲系統概述 67
3.2 系統調用 69
3.3 文件系統 72
3.3.1 文件系統概述 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調度 86
3.6.3 I/O合并 88
3.7 LVM 90
3.8 bcache 93
3.9 DRBD 96
第4章 存儲加速 99
4.1 基于CPU處理器的加速和優化方案 100
4.2 基于協處理器或其他硬件的加速方案 103
4.2.1 FPGA加速 103
4.2.2 智能網卡加速 105
4.2.3 Intel QAT 107
4.2.4 NVDIMM為存儲加速 110
4.3 智能存儲加速庫(ISA-L) 111
4.3.1 數據保護:糾刪碼與磁盤陣列 112
4.3.2 數據安全:哈希 113
4.3.3 數據完整性:循環冗余校驗碼 115
4.3.4 數據壓縮:IGZIP 116
4.3.5 數據加密 117
4.4 存儲性能軟件加速庫(SPDK) 117
4.4.1 SPDK NVMe驅動 119
4.4.2 SPDK應用框架 133
4.4.3 SPDK用戶態塊設備層 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生態工具介紹 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 數據完整性 188
5.4 訪問控制 189
5.5 加密與解密 191
第6章 存儲管理與軟件定義存儲 194
6.1 OpenSDS 194
6.1.1 OpenSDS社區 195
6.1.2 OpenSDS架構 195
6.1.3 OpenSDS應用場景 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體系結構 209
7.1.1 對象存儲 211
7.1.2 RADOS 212
7.1.3 OSD 212
7.1.4 數據尋址 214
7.1.5 存儲池 219
7.1.6 Monitor 220
7.1.7 數據操作流程 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算法中的設備位置及狀態 246
7.3.3 CRUSH中的規則與算法細節 249
7.3.4 CRUSH算法實踐 254
7.3.5 CRUSH算法在Ceph中的應用 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數據恢復 271
7.4.6 Ceph一致性 274
7.4.7 Ceph Scrub機制 278
7.5 Ceph中的緩存 279
7.5.1 RBDCache具體實現 285
7.5.2 固態硬盤用作緩存 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 集群性能數據 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體系結構 321
8.1.2 環 327
8.1.3 Swift API 330
8.1.4 認證 331
8.1.5 對象管理與操作 333
8.1.6 數據一致性 337
8.2 Cinder 338
8.2.1 Cinder體系結構 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 容器技術框架 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數據卷管理 376
9.3.3 Kubernetes CSI 380