部分 基础篇8 b7 i; S& l# _/ z/ ?2 t
第1章 分布式系统与一致性协议2' q% M; g& o4 x
1.1 CAP原理3* f7 o& V$ _6 u; L7 a
1.2 一致性5/ }4 V% L z6 n
1.2.1 一致性模型7
1 H* o* E6 j2 f$ a8 J3 I1.2.2 一致性模型分述96 I- Q$ X& [5 I
1.2.3 复制状态机16
: n% w- _5 C' d) U4 @1.2.4 拜占庭将军问题18& M. J) r! ?+ `. m9 Q
1.2.5 FLP不可能性199 [& X' y, F. H' h& q
1.2.6 小结21+ b: K; W5 v* ?7 r! k
1.3 Paxos协议22
4 y1 j) M3 C$ A, a" G% }, ^% y1.4 Raft协议:为可理解性而生24
) g- U* ?3 x% U S0 ^$ M3 m1.4.1 Raft一致性算法26
0 |7 s/ P, `4 G' {& o1.4.2 可用性与时序45& V$ l' ?+ v& c2 y. Z* M$ z
1.4.3 异常情况46
7 s- i- m- K8 H1 Y1 s' i. |9 w3 b1.4.4 日志压缩与快照52
5 V7 c& R% i7 o" p P% O8 m% @1.4.5 Raft算法性能评估56+ e# y7 Z. w0 I
1.4.6 小结58" Y7 _ O; J! m# ~3 R$ @6 I& Y
第二部分 实战篇
% k5 r' ?" r1 N% ], n/ i第2章 为什么使用etcd62
9 s; ]& |( G9 }( t9 r; R2.1 etcd是什么64
0 x& \# g# J5 Q( q, B+ p" N2.2 etcd架构简介66$ S5 }% t1 \9 Q; d) ]1 S
2.2.1 etcd数据通道69( c$ F( N0 H5 }5 m; C- Q$ U
2.2.2 etcd架构71
( [4 h b# L* n' W* {2.3 etcd典型应用场景举例72
' w( c5 k* G& j( q) y3 K: h& v2.3.1 服务注册与发现72
/ a! l5 R# g! V3 n2.3.2 消息发布和订阅75
3 r4 T1 `6 ~0 Y! l2.3.3 负载均衡76
1 W* z* o8 O2 R3 k2.3.4 分布式通知与协调77
% a3 q3 {8 w, T$ _2.3.5 分布式锁78
0 b+ z, h# ?" }3 Z. z; r2 v' u+ C4 L2.3.6 分布式队列80
W9 e; p* `( S5 v' @( t) v3 u2.3.7 集群监控与Leader竞选81
# S( `7 e8 I% r/ c7 O$ b2.3.8 小结82
! _/ i6 U: x/ q; X0 [2.4 etcd性能测试82& w# _1 u% d8 n; Z6 T! V U/ H
2.4.1 etcd读性能82
p$ O1 {% W& v+ V+ p. T, B! A2.4.2 etcd写性能83
* X3 W% i `, Q" Z2 F6 q0 p# s2.5 etcd与其他键值存储系统的对比84$ P: F" e1 s" c' }
2.5.1 ZooKeeper VS etcd852 d9 O% X/ y5 O0 w
2.5.2 Consul VS etcd887 `3 S# P/ _- q1 b2 D
2.5.3 NewSQL(Cloud Spanner、CockroachDB、TiDB)VS etcd88
% ~" R9 H4 r1 c( H5 e2.5.4 使用etcd做分布式协同89
% i6 p4 S' @2 Y8 m4 [) m2.5.5 小结90- c, `; u: |4 _1 C
2.6 使用etcd的项目90
6 |- X$ [+ {& v) M1 d: T- X) c' \2.7 etcd概念词汇表91
/ \* \0 C" j: p$ E( r, t, j2.8 etcd发展里程碑92- A% c' X1 t9 ?& `2 b! `
2.8.1 etcd 0.4版本93
6 f. R6 ^4 w& g: i2.8.2 etcd 2.0版本93+ j2 B( o( u. S1 a0 N7 r2 R. V# `
2.8.3 etcd 3.0版本93
( I0 l$ O( [( A. {第3章 etcd初体验95* r. n8 g; q- b, O, ?
3.1 单机部署951 {* ~( W. E8 D2 ?
3.1.1 单实例etcd95
0 z( z6 @7 S( \; w: Z! \3.1.2 多实例etcd984 p& C( i: [: a/ v: \/ A D% W
3.2 多节点集群化部署100
& C% a6 x: @* \1 i' w7 m3.2.1 静态配置1017 H% V5 F9 | c! y6 |
3.2.2 服务发现1049 c0 a( @5 {3 q
3.3 etcdctl常用命令行107* e7 }5 g8 g# D4 ^* R, m$ ]
3.3.1 key的常规操作107
6 w [$ V0 l2 C. q3.3.2 key的历史与watch1126 e# _' m" B t9 u
3.3.3 租约115
% [+ ^! C5 I7 a b5 q! O3.4 etcd常用配置参数117, k3 }# O5 V+ g/ z+ H1 M
3.4.1 member相关参数项117
% }9 Z. T8 d. [6 V+ t! z3.4.2 cluster相关参数项118- |8 \9 ], {# u& [# f* Q
3.4.3 proxy相关参数项120
3 m8 W' M7 n. _& S3 D+ y3.4.4 安全相关参数项1206 d1 w4 M2 T' V( l2 @ A
3.4.5 日志相关参数项121
& J8 S9 Y1 P2 V8 ]3.4.6 不安全参数项121* X- g) Q7 P3 w3 K
3.4.7 统计相关参数项122
# j/ O$ L0 p8 u3 V, W3 j3.4.8 认证相关参数项122
$ }( N! M0 D% x9 n; Q: x* f- a1 j第4章 etcd开放API之v2123
4 q4 E. |' l- S4.1 API保证124* l+ b6 S7 S5 q$ n4 ^9 z
4.2 etcd v2 API126
4 K5 h% M7 F- J$ t% E8 H, O2 j4.2.1 集群管理API126
* }5 X( q2 r4 y4.2.2 键值API126
8 |" d$ C& Y% s. t% T4.2.3 键的TTL130) A* w2 f! d* o0 @+ c
4.2.4 等待变化通知:watch134
7 k2 k& a/ D1 e1 F4.2.5 自动创建有序key146
^3 E% b( v5 m$ U0 f9 c4.2.6 目录TTL148" v9 |. {( W% |8 g" [
4.2.7 原子的CAS149 L! Q0 P5 q& v0 n0 p! u& J
4.2.8 原子的CAD151. D+ j- l2 @- l+ o& s$ \
4.2.9 创建目录153; D% K8 H& [1 n4 k2 b$ o
4.2.10 罗列目录154
' H9 G' P! [. _4 S: S+ Z4.2.11 删除目录156
, ]6 _( f* n! O4 b8 n8 Z4.2.12 获取一个隐藏节点157
/ L k. b2 T: r7 ^, D4.2.13 通过文件设置key158' y0 ]2 Q) ^/ X7 C' U
4.2.14 线性读158
/ l3 T5 x Y& b9 L. ^4.3 统计数据158- L y& f' M1 p( v
4.3.1 Leader数据159
9 F. ]) g2 S- e1 U, U$ h9 ~4.3.2 节点自身的数据160+ g) b' L: ~7 Z% e
4.3.3 更多统计数据1613 J3 _' H6 a* F; b
4.4 member API162
; Q/ u5 `1 R6 j" ^9 Y4.4.1 List member162$ P& {2 T2 ?) {1 G: f
4.4.2 加入一个member1633 b1 s# p3 i6 N" V: X* G
4.4.3 删除一个member163
6 Z8 H7 S0 I2 c% k5 W \$ ~4 W N4.4.4 修改member的peer URL164
4 U/ z D& p* @" X1 ~7 p第5章 etcd开放API之v3165
3 B9 P& T( E" h5 P* |: j5.1 从etcd v2到etcd v3166
3 v% ^. h- B @) A- @, o8 @5.1.1 gRPC167( R5 p( v9 i% F9 u1 `4 Y" S
5.1.2 序列化和反序列化优化167/ g, \! C2 s7 \$ O( V6 E1 x% ]
5.1.3 减少TCP连接167( L& w* l2 Y, }6 |7 M: M& `
5.1.4 租约机制167
6 n' l/ N2 _5 t1 R: C5.1.5 etcd v3的观察者模式168# `+ S- d- A- P* O) t9 G
5.1.6 etcd v3的数据存储模型169 _/ ]; A; U) O* g3 r
5.1.7 etcd v3的迷你事务170
. y+ V8 W: D& d. t5.1.8 快照171$ j& {( D6 |+ z- M6 I
5.1.9 大规模watch171
1 |! J7 j2 u, I4 W5 _) e/ [: I5.2 gRPC服务172
; r7 r# l2 n) L' G$ y& A( |% g M2 W2 C9 T5.3 请求和响应174# W/ Z+ x8 J# d; z* I
5.4 KV API176
: \1 h) K; F4 X3 ]3 j' C5.4.1 键值对176" ~% S5 X" D% u0 }
5.4.2 revision177
2 K( G3 K) ] a9 d5 ?- H/ a3 H5.4.3 键区间1788 @: m. d7 ]" i2 i* k
5.4.4 Range API178
* r, [* _; L( O+ Q5.4.5 PUT调用181
4 c6 \. i* h; Z6 t0 d# e5.4.6 事务182
9 K2 G( \$ x5 L5.4.7 Compact调用1867 T) O* S9 z. f1 x6 K/ W+ @
5.5 watch API186. E3 {% M% j$ S2 {) @* H
5.5.1 Event187. \( i: o6 W+ N0 a
5.5.2 流式watch1872 f+ c% \2 E( Z: }7 O2 A, L+ s
5.6 Lease API190
( B7 S9 f( x, ~* @8 p5.6.1 获得租约190
3 w) U/ o, Z/ u5.6.2 Keep Alives192
8 a- x1 ^' F& E8 m' W1 Q" X5.7 API使用示例192
1 ~6 Z# n' d9 ]; Q第6章 etcd集群运维与稳定性195
" \7 b. V0 w3 D2 c; J g+ x6.1 etcd升级195
6 X8 P' S2 f; N; [+ [6.1.1 etcd从2.3升级到3.0195# z Y& }. k x0 I+ y: W
6.1.2 etcd从3.0升级到3.1199* M! |. @' t) ` S
6.2 从etcd v2切换到v3202
! F. ^3 u% ]% r. b, \6 H6.2.1 切换客户端代码2029 p3 `' I2 p9 \9 H9 J# n* I
6.2.2 数据迁移203
! e0 N2 p; J0 V P, j C+ t6.3 运行时重配置204
, P/ H5 G. n, q( v) B/ h6.3.1 两阶段配置更新保证集群安全205
( @2 [) C" @* S- G/ u) d, Y$ {9 t3 N6.3.2 永久性失去半数以上member206
+ k/ M6 U8 O& ?9 p* O6 W+ W3 e6.4 参数调优207
2 e3 G9 O% J! V3 Q" _. E/ p6 ^6.4.1 时间参数2074 I& i3 s7 H+ S+ [; q* r& H
6.4.2 快照2084 S G5 Y/ k* J) B
6.4.3 磁盘209
# n0 t" ]& z( t4 B# k0 {) c' f* B6 g6.4.4 网络209* x! O2 o# o6 ^3 ~
6.5 监控209
1 z+ h# ^( V( @" O; t2 x& ~- Y: B6.6 维护210 java8.com% ?5 ~1 F% D* ^, [$ j! [ b! i. r
6.6.1 压缩历史版本210
' Q8 L9 }2 c2 u6.6.2 消除碎片化211# W6 T1 P5 k1 v! _! l
6.6.3 存储配额211
9 P2 w7 s! F9 B8 r8 c. `- ~& K7 [6.6.4 快照备份2137 T7 s6 m/ ~2 A U! D. Z+ e4 u* Q
6.7 灾难恢复213, O/ v/ f. Y. D
6.7.1 快照214! ]- P: e& [: ~9 x. z
6.7.2 恢复集群214
1 p. y8 O8 d# j a- _6.8 etcd网关215
5 W4 M' z+ X- {: ^6.8.1 什么时候使用etcd网关216
( U9 I# S: K$ Z6.8.2 什么时候不该使用etcd网关216
7 \& e4 G% U* s' A+ J: A! |6.8.3 启动etcd网关217) f4 v+ E( D! m9 O& c6 b1 n9 i+ u
6.9 gRPC代理217+ T( P# c9 V: x$ O) w
6.9.1 可扩展的watch API2181 u) r# |' @5 I4 t3 N$ A( j
6.9.2 限制219
5 N- ~5 o5 p! u2 ^, m! O( W$ a6 H; H6.9.3 可扩展的带租约的API219
$ K# H; M$ K- t5 `$ E6 R# n6.9.4 服务端保护220
$ x6 n' Q6 r/ Y* R! u# N6.9.5 启动gRPC代理220+ I2 M3 n. D. d6 ]: b+ j+ ^
6.9.6 客户端节点同步和域名解析221
# a5 [) k4 ?5 X. e: n: @6.9.7 名字空间222
& I0 J% P1 L; F+ L/ p8 x2 \6.10 故障恢复223
' C) k9 t1 x9 O* }/ x6.10.1 小部分从节点故障223
" K! f" L7 E: d( }. n$ J$ P; P j/ v. V" S6.10.2 主节点故障224 v8 \0 u3 u! @$ [! W% a
6.10.3 大部分节点故障2240 D7 C+ F# s( y$ a2 x
6.10.4 网络分区224
4 \4 ^; W: A, t0 D+ Z" C6.10.5 集群启动异常225
9 y& y3 [" ]+ F: Y& R6.11 硬件225
% R, M2 [: |& B5 O0 F第7章 etcd安全231
' d: _9 I! e8 s2 ^+ u1 g7.1 访问安全231
. S6 ^! |( }/ I- y7.1.1 权限资源2325 b; }0 h2 a8 W; `, l( H1 r6 l
7.1.2 键值资源234
* P6 ]1 e P7 \ E W& Z7.1.3 配置资源234
; d Y5 y1 G) w1 S& ?7.2 etcd访问控制实践235% Q% k) S3 k$ b* h* b, |% I- ]; o0 c
7.2.1 User相关命令2356 V9 p. `6 `0 D9 e% W0 J# g0 c2 A0 o3 [
7.2.2 Role相关命令2364 V1 M5 Z9 N% c# D4 F- }
7.2.3 启用用户权限功能237
$ I3 _* k3 {3 d7 B6 h0 L7.3 传输安全238$ _/ ?. k$ v+ l Z5 t
7.3.1 TLS/SSL工作原理239# S8 j5 G$ ]* H |1 T" A3 ?6 t `
7.3.2 使用TLS加密etcd通信241
* t# N5 D% g: [+ r. L- r8 T5 B
1 z6 z. X* `1 z" v