描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111578420
产品特色
内容简介
诞生于2006年的Ceph,是开源社区的明星项目,也是私有云事实上的标准——OpenStack的默认存储后端。作为当前炙手可热的分布式存储系统,Ceph拥有诸多引人注目的特性。本书侧重介绍RADOS及三大核心应用组件——RBD、RGW和CephFS.书中大部分内容基于社区新(2017年1月)发布的Kraken稳定版,侧重于BlueStore、ECoverwrites、QoS等一众新增组件和新增特性的介绍,写作时每章务必追求从基本原理切入,采用循序渐进的方式自然过渡和推广至Ceph,并结合Ceph的核心设计理念指出需要进行哪些必要的改进和裁剪,使得读者不但能够知其然,而且能够知其所以然。此外,为了进一步加深读者印象,每个章节都穿插了不少实用案例,后一章的素材更是全部源于我们日常积累的、从客户处收集的生产案例,极具代表性和通用性,如果读者能够在阅读、学习的同时进行实战演练,理论结合实践,相信必定能够取得更大收益。
目 录
Contents?目 录
推荐序一
推荐序二
前 言
第1章 计算为王—— 基于可扩展哈希的受控副本分布策略CRUSH 1
1.1 straw及straw2算法简介 2
1.2 CRUSH 算法详解 6
1.2.1 集群的层级化描述——Cluster Map 7
1.2.2 数据分布策略——Placement Rule 9
1.3 调制CRUSH 14
1.3.1 编辑 CRUSH Map 15
1.3.2 定制CRUSH规则 19
1.3.3 数据重平衡 21
1.4 总结与展望 23
第2章 性能之巅——新型对象存储引擎BlueStore 25
2.1 设计理念与指导原则 26
2.2 磁盘数据结构 30
2.2.1 PG 30
2.2.2 对象 38
2.3 缓存管理 46
2.3.1 常见的缓存淘汰算法 46
2.3.2 BlueStore中的缓存管理 49
2.4 磁盘空间管理 53
2.4.1 常见磁盘空间管理模式 53
2.4.2 BitmapFreelistManager 56
2.4.3 BitmapAllocator 57
2.5 BlueFS 59
2.5.1 RocksDB与BlueFS 59
2.5.2 磁盘数据结构 62
2.5.3 块设备 65
2.6 实现原理 66
2.6.1 mkfs 66
2.6.2 mount 67
2.6.3 read 69
2.6.4 write 72
2.7 使用指南 77
2.7.1 部署BlueStore 77
2.7.2 配置参数 80
2.8 总结与展望 83
第3章 时空博弈——纠删码原理与overwrites支持 84
3.1 RAID技术概述 85
3.2 RS-RAID和Jerasure 90
3.2.1 计算校验和 92
3.2.2 数据恢复 92
3.2.3 算术运算 93
3.2.4 缺陷与改进 99
3.2.5 Jerasure 100
3.3 纠删码在Ceph中的应用 102
3.3.1 术语 104
3.3.2 概述 105
3.3.3 新写 106
3.3.4 读 108
3.3.5 覆盖写 110
3.3.6 日志 112
3.3.7 Scrub 113
3.4 总结与展望 113
第4章 迁移之美 —— PG 读写流程与状态迁移详解 116
4.1 PG概述 117
4.2 读写流程 120
4.2.1 消息接收与分发 127
4.2.2 do_request 129
4.2.3 do_op 129
4.2.4 execute_ctx 136
4.3 状态迁移 146
4.3.1 状态机概述 147
4.3.2 创建 PG 150
4.3.3 Peering 154
4.3.4 Recovery 169
4.3.5 Backfill 172
4.4 总结与展望 173
第5章 控制先行——存储服务质量QoS 175
5.1 研究现状 176
5.2 dmClock算法原理 177
5.2.1 mClock 177
5.2.2 dmClock 179
5.3 QoS的设计与实现 180
5.3.1 优先级队列(prio) 181
5.3.2 权重的优先级队列(wpq) 183
5.3.3 dmClock队列 184
5.3.4 Client的设计 191
5.4 总结与展望 192
第6章 无心插柳——分布式块存储RBD 195
6.1 RBD架构 195
6.2 存储组织 196
6.2.1 元数据 197
6.2.2 数据 209
6.3 功能特性 211
6.3.1 快照 211
6.3.2 克隆 216
6.4 总结与展望 219
第7章 应云而生——对象存储网关RGW 220
7.1 总体架构 221
7.2 数据组织和存储 222
7.2.1 用户 225
7.2.2 存储桶 228
7.2.3 对象 229
7.2.4 数据存储位置 231
7.3 功能实现 232
7.3.1 功能特性 233
7.3.2 I/O路径 235
7.3.3 存储桶创建 240
7.3.4 对象上传 242
7.3.5 对象下载 244
7.4 总结与展望 244
第8章 经典重现—— 分布式文件系统 CephFS 246
8.1 文件系统基础知识 247
8.1.1 文件系统 247
8.1.2 文件系统中的元数据 249
8.1.3 硬链接和软链接 250
8.1.4 日志 251
8.2 分布式文件系统CephFS 252
8.2.1 CephFS设计框架和背景 252
8.2.2 MDS的作用 254
8.3 MDS设计原理与实现 255
8.3.1 MDS元数据存储 255
8.3.2 MDS负载均衡实现 260
8.3.3 MDS故障恢复 268
8.4 总结与展望 271
第9章 运用之妙—— 应用案例实战 272
9.1 实战案例一:Ceph 集群定时Scrub 272
9.2 实战案例二:Ceph对接OpenStack 274
9.3 实战案例三:Ceph数据重建配置策略 288
9.4 实战案例四:Ceph集群Full紧急处理 290
9.5 实战案例五:Ceph快照在增量备份的应用 292
9.6 实战案例六:Ceph集群异常watcher处理 297
9.7 总结与展望 298
推荐序一
推荐序二
前 言
第1章 计算为王—— 基于可扩展哈希的受控副本分布策略CRUSH 1
1.1 straw及straw2算法简介 2
1.2 CRUSH 算法详解 6
1.2.1 集群的层级化描述——Cluster Map 7
1.2.2 数据分布策略——Placement Rule 9
1.3 调制CRUSH 14
1.3.1 编辑 CRUSH Map 15
1.3.2 定制CRUSH规则 19
1.3.3 数据重平衡 21
1.4 总结与展望 23
第2章 性能之巅——新型对象存储引擎BlueStore 25
2.1 设计理念与指导原则 26
2.2 磁盘数据结构 30
2.2.1 PG 30
2.2.2 对象 38
2.3 缓存管理 46
2.3.1 常见的缓存淘汰算法 46
2.3.2 BlueStore中的缓存管理 49
2.4 磁盘空间管理 53
2.4.1 常见磁盘空间管理模式 53
2.4.2 BitmapFreelistManager 56
2.4.3 BitmapAllocator 57
2.5 BlueFS 59
2.5.1 RocksDB与BlueFS 59
2.5.2 磁盘数据结构 62
2.5.3 块设备 65
2.6 实现原理 66
2.6.1 mkfs 66
2.6.2 mount 67
2.6.3 read 69
2.6.4 write 72
2.7 使用指南 77
2.7.1 部署BlueStore 77
2.7.2 配置参数 80
2.8 总结与展望 83
第3章 时空博弈——纠删码原理与overwrites支持 84
3.1 RAID技术概述 85
3.2 RS-RAID和Jerasure 90
3.2.1 计算校验和 92
3.2.2 数据恢复 92
3.2.3 算术运算 93
3.2.4 缺陷与改进 99
3.2.5 Jerasure 100
3.3 纠删码在Ceph中的应用 102
3.3.1 术语 104
3.3.2 概述 105
3.3.3 新写 106
3.3.4 读 108
3.3.5 覆盖写 110
3.3.6 日志 112
3.3.7 Scrub 113
3.4 总结与展望 113
第4章 迁移之美 —— PG 读写流程与状态迁移详解 116
4.1 PG概述 117
4.2 读写流程 120
4.2.1 消息接收与分发 127
4.2.2 do_request 129
4.2.3 do_op 129
4.2.4 execute_ctx 136
4.3 状态迁移 146
4.3.1 状态机概述 147
4.3.2 创建 PG 150
4.3.3 Peering 154
4.3.4 Recovery 169
4.3.5 Backfill 172
4.4 总结与展望 173
第5章 控制先行——存储服务质量QoS 175
5.1 研究现状 176
5.2 dmClock算法原理 177
5.2.1 mClock 177
5.2.2 dmClock 179
5.3 QoS的设计与实现 180
5.3.1 优先级队列(prio) 181
5.3.2 权重的优先级队列(wpq) 183
5.3.3 dmClock队列 184
5.3.4 Client的设计 191
5.4 总结与展望 192
第6章 无心插柳——分布式块存储RBD 195
6.1 RBD架构 195
6.2 存储组织 196
6.2.1 元数据 197
6.2.2 数据 209
6.3 功能特性 211
6.3.1 快照 211
6.3.2 克隆 216
6.4 总结与展望 219
第7章 应云而生——对象存储网关RGW 220
7.1 总体架构 221
7.2 数据组织和存储 222
7.2.1 用户 225
7.2.2 存储桶 228
7.2.3 对象 229
7.2.4 数据存储位置 231
7.3 功能实现 232
7.3.1 功能特性 233
7.3.2 I/O路径 235
7.3.3 存储桶创建 240
7.3.4 对象上传 242
7.3.5 对象下载 244
7.4 总结与展望 244
第8章 经典重现—— 分布式文件系统 CephFS 246
8.1 文件系统基础知识 247
8.1.1 文件系统 247
8.1.2 文件系统中的元数据 249
8.1.3 硬链接和软链接 250
8.1.4 日志 251
8.2 分布式文件系统CephFS 252
8.2.1 CephFS设计框架和背景 252
8.2.2 MDS的作用 254
8.3 MDS设计原理与实现 255
8.3.1 MDS元数据存储 255
8.3.2 MDS负载均衡实现 260
8.3.3 MDS故障恢复 268
8.4 总结与展望 271
第9章 运用之妙—— 应用案例实战 272
9.1 实战案例一:Ceph 集群定时Scrub 272
9.2 实战案例二:Ceph对接OpenStack 274
9.3 实战案例三:Ceph数据重建配置策略 288
9.4 实战案例四:Ceph集群Full紧急处理 290
9.5 实战案例五:Ceph快照在增量备份的应用 292
9.6 实战案例六:Ceph集群异常watcher处理 297
9.7 总结与展望 298
前 言
前 言?Preface诞生于 2006 年的 Ceph,是开源社区的明星项目,也是私有云事实上的标准——OpenStack 的默认存储后端。作为当前火爆的分布式存储系统,Ceph 拥有诸多引人注目的特性。
首先,Ceph 是一种软件定义存储,可以运行在几乎所有主流的Linux 发行版(典型如 CentOS 和 Ubuntu)和其他类 UNIX 操作系统(典型如 FreeBSD)上。2016 年,社区进一步将 Ceph 从 x86 架构移植到 ARM 架构中,令Ceph 应用场景进一步扩展至移动、低功耗等前沿领域,使得 Ceph 未来充满无限可能。
其次,Ceph 的分布式基因使其可以轻易管理成百上千个节点、 PB 级及以上存储容量的大规模集群,同时基于计算的扁平寻址设计使得 Ceph 客户端可以直接和服务端的任意节点通信,从而避免因为存在访问热点而导致性能瓶颈。实际上,在没有网络传输限制的前提下,Ceph 可以呈现我们所梦寐以求的、性能与集群规模成线性扩展的优秀特性。
后,Ceph 是一个统一存储系统,既支持传统的块、文件存储协议,例如 SAN 和 NAS;也支持新兴的对象存储协议,例如 S3 和 Swift,这使得 Ceph 理论上可以满足时下一切主流的存储应用需求。此外,良好的架构设计使得 Ceph可以轻易拓展至需要存储的任何领域。
上述这一切使得理论上只要存在存储需求,Ceph 就能找到用武之地。因此,诚如Ceph社区所言:Ceph是存储的未来!
为什么写这本书在 Ceph 的设计理念中,高可扩展性、高可靠性和高性能都是其核心考虑要素。此外,为了能够程度地拓展 Ceph的“触角”(Ceph 本意就是章鱼),Ceph 当中所有组件都被设计成松耦合和高度可定制的。基于上述考虑,Ceph 采用面向对象的语言——C 进行开发,并且在具体实现上大量采用了 STL 和Boost 库中的高级特性。一方面,C 被公认为复杂的编程语言之一;另一方面,经过 10 年的发展,Ceph 已经成为一个代码行数超过百万的庞然大物,各种组件多如牛毛,组件之间关系错综复杂。更加令人望而生畏的是:随着 Ceph 应用场景日益广泛,大量新需求新特性持续涌入,Ceph 正加速向前发展!社区代码每天都在发生翻天覆地的变化——一方面很多模块从无到有,另一方面很多模块从有到无,即便是一些仍然存在的模块,短短几个开发周期之后就会变得面目全非。上述这一切都成为大量渴望接触 Ceph、玩转 Ceph 和深度参与 Ceph的开发人士的梦魇,足以令他们手足无措,对 Ceph望而却步。
此外,虽然 Ceph诞生至今已经超过 10 年的时间,但是在国内兴起却是近几年的事情(感谢 OpenStack),因此相关书籍异常匮乏。市面上仅有的几本,或者单纯从实践角度针对如何使用 Ceph 进行介绍,因为缺乏理论作为指导,加之 Ceph 的命令集一直处于进化之中并且越来越庞大,普通读者可能无法留下深刻印象;或者单纯从源码角度对 Ceph 进行分解和剖析,一方面牵涉到大量实现细节,另一方面源码日新月异,因此非资深开发者可能不易上手。再将视野转向国外——Ceph 官方社区虽然早有专门的文档库对 Ceph 进行系统性的介绍,但是一方面文档库过于庞大并且涉及大量专业术语,另一方面作者和国内读者语言、文化背景存在巨大差异,导致直接阅读这类文档困难重重、举步维艰。
来自 ZTE 的 Clove 团队,自 2014 年开始接触 Ceph,是国内早从事 Ceph 研究和开发的团队之一。团队从传统存储领域转型,大部分成员此前都有从事SAN 或者 NAS 开发的背景,因此转战 Ceph 可谓如鱼得水。自成立之日起,Clove 团队就一直和 Ceph 社区保持着良好的互动,我们在使用 Ceph、享受 Ceph 带给我们种种好处的同时,一方面通过反馈故障、修复故障、推送特性等方式持续回馈社区,另一方面通过参与和举办线下沙龙等方式不遗余力地宣传和推广 Ceph 。时至今日,团队中不少人都已经成长为国内在Ceph 社区中独当一面的活跃开发者。
因为我们在多年的摸索过程中深切体会到学习资料匮乏对 Ceph 初学者所造成的巨大困扰;加之,普及Ceph、推广 Ceph,与社区共筑良好的 Ceph 生态圈并终实现社区广大开发者和用户双赢也是我们和社区的共识,我们自 2016 年年中开始动笔编写本书。之所以选择这个时间点,一是因为我们团队已经在传统存储领域以及 Ceph 社区耕耘多年,自身积淀已经逐步殷实;二是 Ceph 这两年在国内发展如火如荼,受众日益广泛,时机逐渐成熟。书中大部分内容基于社区(2017 年 1 月)发布的 Kraken 稳定版,侧重于 BlueStore、EC overwrites、QoS 等一众新增组件和新增特性的介绍,写作时每章务必追求从基本原理切入,采用循序渐进的方式自然过渡和推广至 Ceph,并结合 Ceph 的核心设计理念指出需要进行哪些必要的改进和裁剪,使得读者不但能够知其然,而且能够知其所以然;同时,写作时尽量避免涉及过多、非必要的专业术语,做到深入浅出;并且每章相对独立,程度地减少阅读障碍。此外,为了进一步加深读者印象,每个章节都穿插了不少实用案例,后一章的素材更是全部源于我们日常积累的、从客户处收集的生产案例,极具代表性和通用性,如果读者能够在阅读、学习的同时进行实战演练,理论结合实
首先,Ceph 是一种软件定义存储,可以运行在几乎所有主流的Linux 发行版(典型如 CentOS 和 Ubuntu)和其他类 UNIX 操作系统(典型如 FreeBSD)上。2016 年,社区进一步将 Ceph 从 x86 架构移植到 ARM 架构中,令Ceph 应用场景进一步扩展至移动、低功耗等前沿领域,使得 Ceph 未来充满无限可能。
其次,Ceph 的分布式基因使其可以轻易管理成百上千个节点、 PB 级及以上存储容量的大规模集群,同时基于计算的扁平寻址设计使得 Ceph 客户端可以直接和服务端的任意节点通信,从而避免因为存在访问热点而导致性能瓶颈。实际上,在没有网络传输限制的前提下,Ceph 可以呈现我们所梦寐以求的、性能与集群规模成线性扩展的优秀特性。
后,Ceph 是一个统一存储系统,既支持传统的块、文件存储协议,例如 SAN 和 NAS;也支持新兴的对象存储协议,例如 S3 和 Swift,这使得 Ceph 理论上可以满足时下一切主流的存储应用需求。此外,良好的架构设计使得 Ceph可以轻易拓展至需要存储的任何领域。
上述这一切使得理论上只要存在存储需求,Ceph 就能找到用武之地。因此,诚如Ceph社区所言:Ceph是存储的未来!
为什么写这本书在 Ceph 的设计理念中,高可扩展性、高可靠性和高性能都是其核心考虑要素。此外,为了能够程度地拓展 Ceph的“触角”(Ceph 本意就是章鱼),Ceph 当中所有组件都被设计成松耦合和高度可定制的。基于上述考虑,Ceph 采用面向对象的语言——C 进行开发,并且在具体实现上大量采用了 STL 和Boost 库中的高级特性。一方面,C 被公认为复杂的编程语言之一;另一方面,经过 10 年的发展,Ceph 已经成为一个代码行数超过百万的庞然大物,各种组件多如牛毛,组件之间关系错综复杂。更加令人望而生畏的是:随着 Ceph 应用场景日益广泛,大量新需求新特性持续涌入,Ceph 正加速向前发展!社区代码每天都在发生翻天覆地的变化——一方面很多模块从无到有,另一方面很多模块从有到无,即便是一些仍然存在的模块,短短几个开发周期之后就会变得面目全非。上述这一切都成为大量渴望接触 Ceph、玩转 Ceph 和深度参与 Ceph的开发人士的梦魇,足以令他们手足无措,对 Ceph望而却步。
此外,虽然 Ceph诞生至今已经超过 10 年的时间,但是在国内兴起却是近几年的事情(感谢 OpenStack),因此相关书籍异常匮乏。市面上仅有的几本,或者单纯从实践角度针对如何使用 Ceph 进行介绍,因为缺乏理论作为指导,加之 Ceph 的命令集一直处于进化之中并且越来越庞大,普通读者可能无法留下深刻印象;或者单纯从源码角度对 Ceph 进行分解和剖析,一方面牵涉到大量实现细节,另一方面源码日新月异,因此非资深开发者可能不易上手。再将视野转向国外——Ceph 官方社区虽然早有专门的文档库对 Ceph 进行系统性的介绍,但是一方面文档库过于庞大并且涉及大量专业术语,另一方面作者和国内读者语言、文化背景存在巨大差异,导致直接阅读这类文档困难重重、举步维艰。
来自 ZTE 的 Clove 团队,自 2014 年开始接触 Ceph,是国内早从事 Ceph 研究和开发的团队之一。团队从传统存储领域转型,大部分成员此前都有从事SAN 或者 NAS 开发的背景,因此转战 Ceph 可谓如鱼得水。自成立之日起,Clove 团队就一直和 Ceph 社区保持着良好的互动,我们在使用 Ceph、享受 Ceph 带给我们种种好处的同时,一方面通过反馈故障、修复故障、推送特性等方式持续回馈社区,另一方面通过参与和举办线下沙龙等方式不遗余力地宣传和推广 Ceph 。时至今日,团队中不少人都已经成长为国内在Ceph 社区中独当一面的活跃开发者。
因为我们在多年的摸索过程中深切体会到学习资料匮乏对 Ceph 初学者所造成的巨大困扰;加之,普及Ceph、推广 Ceph,与社区共筑良好的 Ceph 生态圈并终实现社区广大开发者和用户双赢也是我们和社区的共识,我们自 2016 年年中开始动笔编写本书。之所以选择这个时间点,一是因为我们团队已经在传统存储领域以及 Ceph 社区耕耘多年,自身积淀已经逐步殷实;二是 Ceph 这两年在国内发展如火如荼,受众日益广泛,时机逐渐成熟。书中大部分内容基于社区(2017 年 1 月)发布的 Kraken 稳定版,侧重于 BlueStore、EC overwrites、QoS 等一众新增组件和新增特性的介绍,写作时每章务必追求从基本原理切入,采用循序渐进的方式自然过渡和推广至 Ceph,并结合 Ceph 的核心设计理念指出需要进行哪些必要的改进和裁剪,使得读者不但能够知其然,而且能够知其所以然;同时,写作时尽量避免涉及过多、非必要的专业术语,做到深入浅出;并且每章相对独立,程度地减少阅读障碍。此外,为了进一步加深读者印象,每个章节都穿插了不少实用案例,后一章的素材更是全部源于我们日常积累的、从客户处收集的生产案例,极具代表性和通用性,如果读者能够在阅读、学习的同时进行实战演练,理论结合实
评论
还没有评论。