前言
第一部分 基礎篇
第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
· · · · · · (
收起)