前言
第一部分 基础篇
第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章 为什么使用etcd62
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 etcd85
2.5.2 Consul VS etcd88
2.5.3 NewSQL(Cloud Spanner、CockroachDB、TiDB)VS etcd88
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 单实例etcd95
3.1.2 多实例etcd98
3.2 多节点集群化部署100
3.2.1 静态配置101
3.2.2 服务发现104
3.3 etcdctl常用命令行107
3.3.1 key的常规操作107
3.3.2 key的历史与watch112
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之v2123
4.1 API保证124
4.2 etcd v2 API126
4.2.1 集群管理API126
4.2.2 键值API126
4.2.3 键的TTL130
4.2.4 等待变化通知:watch134
4.2.5 自动创建有序key146
4.2.6 目录TTL148
4.2.7 原子的CAS149
4.2.8 原子的CAD151
4.2.9 创建目录153
4.2.10 罗列目录154
4.2.11 删除目录156
4.2.12 获取一个隐藏节点157
4.2.13 通过文件设置key158
4.2.14 线性读158
4.3 统计数据158
4.3.1 Leader数据159
4.3.2 节点自身的数据160
4.3.3 更多统计数据161
4.4 member API162
4.4.1 List member162
4.4.2 加入一个member163
4.4.3 删除一个member163
4.4.4 修改member的peer URL164
第5章 etcd开放API之v3165
5.1 从etcd v2到etcd v3166
5.1.1 gRPC167
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 大规模watch171
5.2 gRPC服务172
5.3 请求和响应174
5.4 KV API176
5.4.1 键值对176
5.4.2 revision177
5.4.3 键区间178
5.4.4 Range API178
5.4.5 PUT调用181
5.4.6 事务182
5.4.7 Compact调用186
5.5 watch API186
5.5.1 Event187
5.5.2 流式watch187
5.6 Lease API190
5.6.1 获得租约190
5.6.2 Keep Alives192
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切换到v3202
6.2.1 切换客户端代码202
6.2.2 数据迁移203
6.3 运行时重配置204
6.3.1 两阶段配置更新保证集群安全205
6.3.2 永久性失去半数以上member206
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 API218
6.9.2 限制219
6.9.3 可扩展的带租约的API219
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.