雲原生分佈式存儲基石:etcd深入解析
內容描述
本書為讀者深度解析分佈式鍵值存儲系統,全書分為3部分,第1部分是對分佈式系統的概念和一致性協議的綜述,重點解析Raft協議,使讀者對分佈式鍵值存儲系統有初步瞭解;第2部分介紹etcd安裝、部署、運維、安全等方面的知識,幫助讀者進一步掌握分佈式系統的使用方法,熟悉其常見功能和使用場景;第3部分是本書的特色部分,從代碼層次深入探討了etcd各大關鍵特性的具體設計與實現原理,讀者讀完本部分,會對整個etcd的架構有更加清晰的認識,可以從中汲取靈感,從而將一些實用的經驗應用到自己的分佈式系統中。
目錄大綱
前言
第一部分基礎篇
第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
作者介紹
杜軍,畢業於浙江大學計算機科學與技術專業,《Docker——容器與容器雲》Kubernetes部分的作者,就職於華為Cloud BU PaaS服務開發部,研究方向:容器技術、PaaS和分佈式存儲系統。熟悉雲計算、虛擬化、容器技術、分佈式存儲、容器網絡等技術,活躍於開源社區,是etcd社區的核心貢獻者,Kubernetes社區全球前100位貢獻者之一,2017年的CNUTCon講師。