第1章 etcd入门 1
1.1 etcd简介 1
1.2 数据模型 2
1.3 环境搭建 3
1.3.1 环境变量 3
1.3.2 代码结构 3
1.3.3 运行 4
本章小结 6
第2章 Raft协议 7
2.1 Leader选举 8
2.2 日志复制 15
2.3 网络分区的场景 21
2.4 日志压缩与快照 27
2.5 其他技术点 29
2.5.1 linearizable语义 29
2.5.2 只读请求 29
2.5.3 PreVote状态 30
2.5.4 Leader节点转移 31
本章小结 31
第3章 etcd-raft模块详解 33
3.1 raft结构体 35
3.1.1 Config结构体 37
3.1.2 Storage接口及其实现 38
3.1.3 unstable结构体 43
3.1.4 raftLog结构体 48
3.1.5 raft实现 55
3.2 Node接口 95
3.2.1 node结构体 98
3.2.2 初始化 98
3.2.3 run()方法 100
3.2.4 Node接口实现 109
3.3 raftexample示例分析 110
3.3.1 raftNode 111
3.3.2 HTTP服务端 125
3.3.3 kvstore 128
本章小结 129
第4章 网络层 130
4.1 Go语言网络编程基础 130
4.1.1 http.Server 130
4.1.2 RoundTripper 135
4.2 etcd-rafthttp模块详解 142
4.2.1 rafthttp.Transporter接口 144
4.2.2 Peer接口 148
4.2.3 pipeline 152
4.2.4 streamWriter实例 155
4.2.5 streamReader实例 159
4.2.6 snapshotSender 162
4.3 Handler实例 164
4.3.1 pipelineHandler 164
4.3.2 streamHandler 165
4.3.3 snapshotHandler 166
本章小结 167
第5章 WAL日志与快照 169
5.1 WAL日志 169
5.1.1 初始化 174
5.1.2 打开日志 176
5.1.3 读取日志 177
5.1.4 追加日志 181
5.1.5 文件切换 184
5.2 SnapShotter 186
本章小结 189
第6章 storage 190
6.1 etcd v2版本存储 190
6.1.1 node 192
6.1.2 Event 197
6.1.3 watcher和watcherHub 200
6.1.4 store 205
6.2 etcd v3版本存储 216
6.2.1 backend 217
6.2.2 watcher机制 274
6.2.3 Lessor 292
本章小结 300
第7章 etcd-server详解 302
7.1 raftNode结构体 302
7.2 RaftCluster 311
7.3 EtcdServer 312
7.3.1 初始化 315
7.3.2 注册Handler 326
7.3.3 启动 328
7.4 ApplierV2和applierV3 350
7.4.1 ApplierV2 350
7.4.2 applierV3 353
7.5 AlarmStore 366
本章小结 369
第8章 etcd客户端详解 371
8.1 GRPC基础 371
8.1.1 定义proto文件 371
8.1.2 服务端 373
8.1.3 创建客户端 376
8.2 Client v3 376
8.2.1 kvServer 378
8.2.2 EtcdServer 379
8.2.3 Client 387
8.3 Client v2 394
8.3.1 KeysAPI接口 394
8.3.2 httpClient接口 396
本章小结 401
参考文献 402