Ceph源码分析

出版日期:2016-11
ISBN:9787111552075
作者:常涛

书籍目录

序言
前言
第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

作者简介

随着云计算技术的兴起和普及,云计算基石:分布式共享存储系统受到业界的重视。Ceph以其稳定、高可用、可扩展的特性,乘着开源云计算管理系统OpenStack的东风,迅速成为最热门的开源分布式存储系统。
Ceph作为一个开源的分布式存储系统,人人都可以免费获得其源代码,并能够安装部署,但是并不等于人人都能用起来,人人都能用好。用好一个开源分布式存储系统,首先要对其架构、功能原理等方面有比较好的了解,其次要有修复漏洞的能力。这些都是在采用开源分布式存储系统时所面临的挑战。
要用好Ceph,就必须深入了解和掌握Ceph源代码。Ceph源代码的实现被公认为比较复杂,阅读难度较大。阅读Ceph源代码,不但需要对C++语言以及boost库和STL库非常熟悉,还需要有分布式存储系统相关的基础知识以及对实现原理的深刻理解,最后还需要对Ceph框架和设计原理以及具体的实现细节有很好的把握。所以Ceph源代码的阅读是相当有挑战性的。
本着对Ceph源代码的浓厚兴趣以及实践工作的需要,需要对Ceph在源代码层级有比较深入的了解。当时笔者尽可能地搜索有关Ceph源代码的介绍,发现这方面的资料比较少,笔者只能自己对着Ceph源代码开始了比较艰辛的阅读之旅。在这个过程中,每一个小的进步都来之不易,理解一些实现细节,都需要对源代码进行反复地推敲和琢磨。自己在阅读的过程中,特别希望有人能够帮助理清整体代码的思路,能够解答一下关键的实现细节。本书就是秉承这样一个简单的目标,希望指引和帮助广大Ceph爱好者更好地理解和掌握Ceph源代码。
本书面向热爱Ceph的开发者,想深入了解Ceph原理的高级运维人员,想基于Ceph做优化和定制的开发人员,以及想对社区提交代码的研究人员。官网上有比较详细的介绍Ceph安装部署以及操作相关的知识,希望阅读本书的人能够自己动手实践,对Ceph进一步了解。本书基于目前最新的Ceph 10.2.1版本进行分析。
本书着重介绍Ceph的整体框架和各个实现模块的实现原理,对核心源代码进行分析,包括一些关键的实现细节。存储系统的实现都是围绕数据以及对数据的操作来展开,只要理解核心的数据结构,以及数据结构的相关操作就可以大致了解核心的实现和功能。本书的写作思路是先介绍框架和原理,其次介绍相关的数据结构,最后基于数据结构,介绍相关的操作实现流程。
最后感谢一起工作过的同事们,同他们在Ceph技术上进行交流沟通并加以验证实践,使我受益匪浅。感谢机械工业出版社的编辑吴怡对本书出版所做的努力,以及不断提出的宝贵意见。感谢我的妻子孙盛南女士在我写作期间默默的付出,对本书的写作提供了坚强的后盾。
由于Ceph源代码比较多,也比较复杂,写作的时间比较紧,加上个人的水平有限,错误和疏漏在所难免,恳请读者批评指正。有任何的意见和建议都可发送到我的邮箱changtao381@163.com,欢迎读者与我交流Ceph相关的任何问题。


 Ceph源码分析下载



发布书评

 
 


精彩短评 (总计1条)

  •     较快速翻过
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024