内容简介 · · · · · ·
本书为读者深度解析分布式键值存储系统,全书分为3部分,第1部分是对分布式系统的概念和一致性协议的综述,重点解析Raft协议,使读者对分布式键值存储系统有初步了解;第2部分介绍etcd安装、部署、运维、安全、API调用等方面的知识,帮助读者进一步掌握分布式系统的使用方法,熟悉其常见功能和使用场景;第3部分是本书的特色部分,从代码层次深入探讨了etcd各大关键特性的具体设计与实现原理,读者读完本部分,会对整个etcd的架构有更加清晰的认识,可以从中汲取灵感,从而将一些实用的经验应用到自己的分布式系统中。
作者简介 · · · · · ·
杜军,浙江大学计算机学院硕士毕业,《Docker——容器与容器云》和《云原生分布式存储基石:etcd》这两本书的作者。现任职于华为Cloud BU PaaS服务产品部,主要负责容器与Kubernetes集群管理技术的研发。是Kubernetes核心维护者,也是CNCF TOC Contributor。在Kubernetes社区主导了Kube-proxy IPVS模式,Pod网络QoS,流图调度器Poseidon,Cluster-API-OpenStack和边缘计算KubeEdge等项目的开发。你可以在KubeCon,LinuxCon和CNUTCon等大会找到我分享的主题演讲,我也做过多次Kubernetes和CKA考试的培训。
目录 · · · · · ·
第一部分 基础篇
第1章 分布式系统与一致性协议 2
1.1 CAP原理 3
1.2 一致性 5
1.2.1 一致性模型 7
1.2.2 一致性模型分述 9
1.2.3 复制状态机 16
1.2.4 拜占庭将军问题 18
1.2.5 FLP不可能性 19
1.2.6 小结 21
1.3 Paxos协议 22
1.4 Raft协议:为可理解性而生 24
1.4.1 Raft一致性算法 26
1.4.2 可用性与时序 45
1.4.3 异常情况 46
1.4.4 日志压缩与快照 52
1.4.5 Raft算法性能评估 56
1.4.6 小结 58
第二部分 实战篇
第2章 为什么使用etcd 62
2.1 etcd是什么 64
2.2 etcd架构简介 66
2.2.1 etcd数据通道 69
2.2.2 etcd架构 71
2.3 etcd典型应用场景举例 72
2.3.1 服务注册与发现 72
2.3.2 消息发布和订阅 75
2.3.3 负载均衡 76
2.3.4 分布式通知与协调 77
2.3.5 分布式锁 78
2.3.6 分布式队列 80
2.3.7 集群监控与Leader竞选 81
2.3.8 小结 82
2.4 etcd性能测试 82
2.4.1 etcd读性能 82
2.4.2 etcd写性能 83
2.5 etcd与其他键值存储系统的对比 84
2.5.1 ZooKeeper VS etcd 85
2.5.2 Consul VS etcd 88
2.5.3 NewSQL(Cloud Spanner、CockroachDB、TiDB)VS etcd 88
2.5.4 使用etcd做分布式协同 89
2.5.5 小结 90
2.6 使用etcd的项目 90
2.7 etcd概念词汇表 91
2.8 etcd发展里程碑 92
2.8.1 etcd 0.4版本 93
2.8.2 etcd 2.0版本 93
2.8.3 etcd 3.0版本 93
第3章 etcd初体验 95
3.1 单机部署 95
3.1.1 单实例etcd 95
3.1.2 多实例etcd 98
3.2 多节点集群化部署 100
3.2.1 静态配置 101
3.2.2 服务发现 104
3.3 etcdctl常用命令行 107
3.3.1 key的常规操作 107
3.3.2 key的历史与watch 112
3.3.3 租约 115
3.4 etcd常用配置参数 117
3.4.1 member相关参数项 117
3.4.2 cluster相关参数项 118
3.4.3 proxy相关参数项 120
3.4.4 安全相关参数项 120
3.4.5 日志相关参数项 121
3.4.6 不安全参数项 121
3.4.7 统计相关参数项 122
3.4.8 认证相关参数项 122
第4章 etcd开放API之v 2123
4.1 API保证 124
4.2 etcd v2 API 126
4.2.1 集群管理API 126
4.2.2 键值API 126
4.2.3 键的TTL 130
4.2.4 等待变化通知:watch 134
4.2.5 自动创建有序key 146
4.2.6 目录TTL 148
4.2.7 原子的CAS 149
4.2.8 原子的CAD 151
4.2.9 创建目录 153
4.2.10 罗列目录 154
4.2.11 删除目录 156
4.2.12 获取一个隐藏节点 157
4.2.13 通过文件设置key 158
4.2.14 线性读 158
4.3 统计数据 158
4.3.1 Leader数据 159
4.3.2 节点自身的数据 160
4.3.3 更多统计数据 161
4.4 member API 162
4.4.1 List member 162
4.4.2 加入一个member 163
4.4.3 删除一个member 163
4.4.4 修改member的peer URL 164
第5章 etcd开放API之v 3165
5.1 从etcd v2到etcd v 3166
5.1.1 gRPC 167
5.1.2 序列化和反序列化优化 167
5.1.3 减少TCP连接 167
5.1.4 租约机制 167
5.1.5 etcd v3的观察者模式 168
5.1.6 etcd v3的数据存储模型 169
5.1.7 etcd v3的迷你事务 170
5.1.8 快照 171
5.1.9 大规模watch 171
5.2 gRPC服务 172
5.3 请求和响应 174
5.4 KV API 176
5.4.1 键值对 176
5.4.2 revision 177
5.4.3 键区间 178
5.4.4 Range API 178
5.4.5 PUT调用 181
5.4.6 事务 182
5.4.7 Compact调用 186
5.5 watch API 186
5.5.1 Event 187
5.5.2 流式watch 187
5.6 Lease API 190
5.6.1 获得租约 190
5.6.2 Keep Alives 192
5.7 API使用示例 192
第6章 etcd集群运维与稳定性 195
6.1 etcd升级 195
6.1.1 etcd从2.3升级到3. 0195
6.1.2 etcd从3.0升级到3. 1199
6.2 从etcd v2切换到v 3202
6.2.1 切换客户端代码 202
6.2.2 数据迁移 203
6.3 运行时重配置 204
6.3.1 两阶段配置更新保证集群安全 205
6.3.2 永久性失去半数以上member 206
6.4 参数调优 207
6.4.1 时间参数 207
6.4.2 快照 208
6.4.3 磁盘 209
6.4.4 网络 209
6.5 监控 209
6.6 维护 210
6.6.1 压缩历史版本 210
6.6.2 消除碎片化 211
6.6.3 存储配额 211
6.6.4 快照备份 213
6.7 灾难恢复 213
6.7.1 快照 214
6.7.2 恢复集群 214
6.8 etcd网关 215
6.8.1 什么时候使用etcd网关 216
6.8.2 什么时候不该使用etcd网关 216
6.8.3 启动etcd网关 217
6.9 gRPC代理 217
6.9.1 可扩展的watch API 218
6.9.2 限制 219
6.9.3 可扩展的带租约的API 219
6.9.4 服务端保护 220
6.9.5 启动gRPC代理 220
6.9.6 客户端节点同步和域名解析 221
6.9.7 名字空间 222
6.10 故障恢复 223
6.10.1 小部分从节点故障 223
6.10.2 主节点故障 224
6.10.3 大部分节点故障 224
6.10.4 网络分区 224
6.10.5 集群启动异常 225
6.11 硬件 225
第7章 etcd安全 231
7.1 访问安全 231
7.1.1 权限资源 232
7.1.2 键值资源 234
7.1.3 配置资源 234
7.2 etcd访问控制实践 235
7.2.1 User相关命令 235
7.2.2 Role相关命令 236
7.2.3 启用用户权限功能 237
7.3 传输安全 238
7.3.1 TLS/SSL工作原理 239
7.3.2 使用TLS加密etcd通信 241
7.3.3 etcd安全配置详解 247
第三部分 高级篇
第8章 多版本并发控制 252
8.1 为什么选择MVCC 253
8.2 etcd v2存储机制实现 255
8.3 etcd v3数据模型 255
8.3.1 逻辑视图 256
8.3.2 物理视图 259
8.4 etcd v3的MVCC的实现 259
8.5 etcd v3 MVCC源码分析 261
8.5.1 revision 262
8.5.2 key到revision之间的映射关系 263
8.5.3 从BoltDB中读取key的value值 264
8.5.4 压缩历史版本 266
8.6 为什么选择BoltDB作为底层的存储引擎 267
第9章 etcd的日志和快照管理 269
9.1 数据的持久化和复制 271
9.2 etcd的日志管理 272
9.2.1 WAL数据结构 272
9.2.2 WAL文件物理格式 273
9.2.3 WAL文件的初始化 274
9.2.4 WAL追加日志项 276
9.2.5 WAL日志回放 277
9.2.6 Master向Slave推送日志 278
9.2.7 Follower日志追加 280
9.3 etcd v2的快照管理 280
9.3.1 快照数据结构 281
9.3.2 创建快照 281
9.3.3 快照复制 284
9.3.4 快照之后的日志回收 286
第10章 etcd v3的事务和隔离 288
10.1 事务ACID 288
10.2 事务的隔离性 289
10.2.1 Read uncommitted(读未提交) 290
10.2.2 Read committed(读提交) 290
10.2.3 Repeatable read(重复读) 290
10.3 etcd的事务 291
10.3.1 Serializability的重要性 291
10.3.2 etcd v3的事务实现 293
10.3.3 软件事务内存 295
10.3.4 etcd v3 STM实现 296
第11章 etcd watch机制详解 300
11.1 etcd v2的watch机制详解 300
11.1.1 客户端的watch请求 300
11.1.2 key发生变更时通知客户端 303
11.1.3 带版本号的watch 303
11.1.4 etcd v2 watch的限制 304
11.2 etcd v3的watch实现机制 306
· · · · · · (收起)
丛书信息
· · · · · ·
喜欢读"云原生分布式存储基石:etcd深入解析"的人也喜欢 · · · · · ·
-
- 发布!(第2版) 7.8
-
- 分布式一致性算法开发实战 6.5
-
- 操作系统导论 9.4
-
- 简约之美 7.3
-
- Elasticsearch实战 7.5
-
- 未来架构:从服务化到云原生 5.8
-
- 七周七语言(卷2) 7.8
云原生分布式存储基石:etcd深入解析的书评 · · · · · · ( 全部 3 条 )
> 更多书评 3篇
论坛 · · · · · ·
在这本书的论坛里发言以下书单推荐 · · · · · · ( 全部 )
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有72人想读,手里有一本闲着?
订阅关于云原生分布式存储基石:etcd深入解析的评论:
feed: rss 2.0
0 有用 玉衡 2019-09-29 17:26:19
第一部分主要描述一致性协议和Raft算法。一致性协议感觉博客水平,没有系统性讲解,部分图片存在错误。建议想了解一致性协议的同学读《分布式系统概念与设计》等书;Raft算法是对Raft论文部分章节的翻译,而且有些地方有明显翻译(或理解)错误,建议想了解Raft算法的同学一定要阅读论文原文。 第二部分实战不评价。 第三部分本应该是本书的重点,但是笔墨偏少,不够深入。例如etcd读写接口怎么使用的MVC... 第一部分主要描述一致性协议和Raft算法。一致性协议感觉博客水平,没有系统性讲解,部分图片存在错误。建议想了解一致性协议的同学读《分布式系统概念与设计》等书;Raft算法是对Raft论文部分章节的翻译,而且有些地方有明显翻译(或理解)错误,建议想了解Raft算法的同学一定要阅读论文原文。 第二部分实战不评价。 第三部分本应该是本书的重点,但是笔墨偏少,不够深入。例如etcd读写接口怎么使用的MVCC并没有细讲或者并没有讲清楚;讲了事务的ACID和隔离级别,但并没有很好的和etcd结合起来;watch机制中的watchhub也没讲。想深入了解etcd的同学看来是不能偷懒,还是应该乖乖去撸源码。 (展开)
0 有用 Hypo 2019-06-14 16:10:49
不错的 etcd 和 raft 入门书
23 有用 长线策略家 2020-02-09 14:03:00
作者在《etcd技术内幕》给人家差评然后推荐自己的书,人品太差,书肯定不会好。
0 有用 菠萝power 2022-07-11 17:04:55
没看直接1星,作者太low
0 有用 36wishesmu 2022-09-06 13:24:27 广东
当一个工具书看源码的时候index还可以