第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规则 38
2.4数据重平衡 40
2.4.1 reweight 42
2.4.2 weight-set 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部署BlueStore 127
5.7.2配置参数 129
5.8总结和展望 132
第6章 移动的对象载体——PG 134
6.1基本概念与术语 135
6.2读写流程 138
6.2.1消息接收与分发 145
6.2.2 do_request 147
6.2.3 do_op 149
6.2.4 execute_ctx 155
6.3状态迁移 163
6.3.1状态机概述 164
6.3.2创建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统计更新与自动修复 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 RS-RAID和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