Swift保證了虛擬環境下數據存儲的靈活性和健壯性,本書作者Joe Arnold是SwiftStack的共同創建者兼CEO,因此本書具有很強的實踐性。書中介紹了如何從Swift這種高可用、分布式的OpenStack對象中獲得最大效益,能夠幫助系統管理員快速使用和管理Swift,還涵蓋了一些高級話題。
適讀人群 :Swift系統管理員
開始運行OpenStack Swift吧,OpenStack Swift是一個免費且開源的解決方案,用于構建大規模、高性能的對象存儲集群。本書中,Joe Arnold——SwiftStack的聯合創始人兼CEO,將為您講述對象存儲的基本概念,并帶您走入對象的世界,您可以學到如何設計、構建、運營您自己的對象存儲集群并對其進行性能測試。
對于當今快速發展的網絡應用、移動應用以及軟件即服務(SaaS)應用來說,對象存儲已然不可或缺。本書將通過幾個獨立的部分——應用開發、安裝、管理及故障檢修,帶您熟悉對象存儲的整個流程。
■ 學習Swift有關組織、分發、服務數據方面的基本概念
■ 探索Swift RESTful API的基本功能和高級特性
■ 探究Swift的多個客戶端庫,包括非常有用且極具特點的Python庫
■ 編寫中間件用于自定義或者簡化存儲系統
■ 理解部署Swift的需求,包括一些特殊用例
■ 學習集群的調優選項以獲取*佳性能
■ 獲取日常運營的*佳實踐,包括監控以及規劃增加容量
■ 選擇用于對集群進行測試和基準測試的合適技術
當應用程序開始直接為網絡用戶和移動用戶提供存儲服務時,現代對象存儲便應運而生。無論用戶使用的是筆記本電腦、平板電腦還是智能手機,越來越多的應用程序都需要直接向用戶交付內容。對象存儲之所以強大,是因為它用來對話的正是web自己的語言:HTTP。此外,由于對象存儲更擅長存儲非事務性數據,所以非常適用于歸檔、備份、文件共享、科學和研究數據,以及數字媒體等。
這本書涵蓋了Swift對象存儲項目(簡稱為Swift)和SwiftStack對象存儲軟件公司。SwiftStack提供一種友好的方式來訪問、部署和管理集群。我們的目標是向你展示如何打造自己的Swift,展示SwiftStack的主要特性,并幫助你確定SwiftStack對你是否有意義。我們相信SwiftStack是一個適用于多種用途的好產品,不過也請你放心,Swift生態系統非常豐富并且在不斷完善,如果SwiftStack不是一個合適的選擇,你還可以選擇其他的服務提供商。最后,我們想向你出售Swift對象存儲產品,雖然它不一定是由SwiftStack公司出品的。
從我在應用程序中第一次使用對象存儲至今已經過去了六年,我想分享一下個人的一些經驗,到底如何處理急劇增長的數據量。我很幸運地成為開發團隊的一員,我們的團隊開發了運行在上層Amazon Web Service上的第一個廣泛使用的平臺即服務(PaaS)環境。這使得整個行業意識到一個基于http的對象存儲系統有多么強大。就我個人而言,我已經意識到對象存儲系統與傳統的存儲系統相比,可以提供更大的靈活性、更少的鎖定、更好的控制和更低的成本。業內一些其他的組織和機構也會秉承這一觀點。隨著數據(但不是IT預算)呈指數級增長,幾乎可以肯定地說,數據存儲的挑戰將一直存在,并且不斷增長,這將深刻地影響每一個擁有存儲需求和數據服務需求的個人或者企業。
由于我作為一線人員在大規模部署和管理對象存儲系統中遭受了巨大的痛苦,所以我想寫一本書來幫助他人。作為部署人員,我發現自己經常需要更多實用的信息。我還想了解這些系統是如何工作的,想了解這些系統更加全面的基本原理、為什么要這樣設計,以及如何使用這些系統。目前,隨著Swift已經成為一個非常重要且快速發展的存儲技術,我希望這本書能夠對Swift對象存儲系統提供實踐和理論上的一些有幫助的見解。
在進一步探討之前,我想分享一下John Dickinson在最初的Swift開發團隊工作的經驗。John解釋了為什么要開發Swift以及如何開發Swift,還有如何傳承OpenStack的協作和創新精神,并將其用于Swift的發展。
Swift的起源——從渺小到開放
OpenStack Swift項目技術主管、SwiftStack技術主管John Dickinson的回憶。
2008年,Rackspace開發了他們的Rackspace Cloud Files云存儲服務以滿足客戶需求,并提供給客戶一個類似于亞馬遜Simple Storage Service(S3)的存儲服務。在一定程度上,Rackspace Cloud Files底層技術的第一次迭代開發是非常偉大的。但坦白說,我們還需要大量的時間、精力和金錢去擴展它。非結構化數據增長如此之快,我們意識到我們需要更好的解決方案。所以在2009年8月,Rackspace組織了一個團隊來開發一個徹底的替代品,以替代他們最初的云存儲平臺。我很幸運參與了該項目團隊,項目代號為“Swift”。
我們的團隊一共有9個人,我們協同工作,但是我們誰都沒有特定的角色。大多數情況下,我們坐在San Antonio市中心四樓的一個既小又熱的房間,確定哪些是我們需要解決的困難和問題。我們試圖解決如何部署Swift,網絡會是什么樣子,基礎架構是什么樣子——還有類似的一些問題。我們精誠合作,但我們也會熱烈爭論,以獲取最好的解決方案。我們長時間地考慮一個問題直至下班回家。第二天我們還會帶著解決方案回來,然后去實現它,我們會選擇我們認為更好的解決方案。我們擁有很好的團隊氛圍,這是一個很棒的體驗。奇思妙想在屋子里游蕩,甚至有些想法很瘋狂。但是即便被大家認為瘋狂的想法有時卻產生了非常好的效果。
我們在這里工作了大約一年,2010年7月,我們的成果成為了Rackspace與NASA合作的OpenStack項目的一部分,我們基于Apache 2許可證發布了Swift源代碼;我們貢獻了云文件Swift代碼,后來它成為了OpenStack對象存儲;2010年10月,發布
Joe Arnold是SwiftStack的CEO。SwiftStack是Swift的核心開發者。
奧思數據創始人兼CEO李明宇,之前在中科院軟件所工作,主要負責解決實際工程問題,帶領團隊承擔分布式系統和云計算的相關工作。離開中科院后,李明宇一直致力于OpenStack等云計算和大數據相關開源技術的研究和傳播,為企業提供咨詢、評測等技術服務。李明宇的工作也得到了OpenStack國際社區的認可,受邀于2016年4月在奧斯汀OpenStack Summit峰會上進行培訓和分享。
前言 XVII
第一部分 基礎與架構
第1章 存儲的演進 3
當今數據的存儲需求 3
數據的增長:艾字節(Exabytes)、駭字節(Hellabytes)以及更多 4
非結構化數據的存儲需求 4
沒有放之四海而皆準的存儲系統 5
對象存儲與其他存儲類型的比較 6
新的存儲架構:軟件定義存儲(SDS) 7
軟件定義存儲組件 8
軟件定義存儲的優點 9
為什么是OpenStack Swift 9
小結 10
第2章 初識Swift 11
認識SwiftStack 15
第3章 Swift數據模型和體系結構 17
Swift數據模型 17
Swift體系結構 20
服務進程(Server Processes) 22
一致性進程(Consistency Processes) 24
定位數據 26
環基礎:哈希函數 26
環基礎:一致性哈希環 28
環文件:修改后的一致性哈希環 30
數據分發(Distribution of Data) 32
創建和更新環 32
創建和更新構造文件 32
重新平衡環(Rebalancing the Rings) 33
環內部結構 33
小結 34
第4章 Swift基礎 35
與集群交談:Swift API 35
發送請求 36
存儲URL 36
身份驗證 37
HTTP動詞 37
授權和采取行動 38
獲取響應 38
通信工具 39
命令行界面 39
自定義客戶端應用程序 42
示例場景 43
小結 43
第二部分 Swift應用程序設計
第5章 Swift API概述 47
API到底是什么? 47
CAP定理 48
Swift的亮點:高可用性、冗余性和高吞吐量 49
Swift API:背景 50
回顧超文本傳輸協議(HTTP) 50
表現層狀態轉化(REST) 53
Swift、HTTP和REST 53
使用Swift API 54
關于你的Swift集群 54
認證 55
檢索數據 56
存儲數據 58
刪除數據 59
更新元數據 60
小結 61
第6章 Swift客戶端庫 63
客戶端庫 63
身份驗證交換 64
存儲請求:基本用法 65
其他語言的客戶端庫 68
Ruby 68
PHP 68
Java 69
存儲請求:高級用法 70
使用Python的其他注意事項 71
小結 71
第7章 高級API特性 73
大對象(Large Objects) 73
對象版本管理 75
對象過期 75
臨時URL中間件(TempURL) 76
表單提交中間件 76
自定義元數據 77
上傳和更新元數據 77
跨域資源共享(CORS) 78
Swift集群信息 79
范圍請求 80
域重映射中間件 80
靜態Web托管(Static Web Hosting) 81
Content-Type頭 82
批量操作中間件 82
代碼示例 83
靜態大對象 83
動態大對象 84
對象版本管理 85
TempURL(Time-Limited URLs) 86
表單提交 87
跨域資源共享(CORS) 88
自定義元數據 89
Swift集群信息 90
范圍請求 90
域重映射 91
靜態web托管 92
Content-Type 93
批量上傳 93
批量刪除 94
小結 94
第8章 部署Swift中間件 95
WSGI框架簡介 95
編寫WSGI 97
數據流和數據的修改 98
通過Paste來配置中間件 100
如何編寫Swift中間件 102
由內而外 104
簡單的例子 104
中間件中更多的工作 106
回顧與前瞻 110
小結 111
第三部分 Swift的安裝
第9章 源碼安裝OpenStack Swift 115
下載OpenStack Swift 115
依賴 116
安裝Swift CLI(python-Swiftclient) 116
安裝Swift 117
復制Swift配置文件 117
配置Swift 117
向Swift中添加驅動器 118
存儲策略 122
創建環構造器文件 124
向構造文件中添加磁盤 128
添加硬盤 130
構建環 131
配置Swift日志 132
創建日志配置文件 132
重啟Rsyslog,開始記錄Swift日志 133
配置代理服務 133
設置哈希路徑前綴和后綴 133
開啟代理服務 134
設置TempAuth驗證和Swift授權 134
開啟memcahed 134
在proxy-server.conf中添加用戶 135
啟動服務和重啟代理 135
賬戶認證 136
驗證賬戶訪問 137
創建容器 138
上傳對象 139
開啟一致性進程 139
配置rsync 140
啟動其他一致性進程 141
小結 141
第10章 安裝SwiftStack 143
SwiftStack控制器和節點概述 143
SwiftStack控制器 143
SwiftStack節點 145
使用SwiftStack創建一個Swift集群 146
創建一個SwiftStack控制器用戶 146
安裝SwiftStack節點軟件 147
聲明一個新節點 147
創建集群 148
獲取節點 149
啟用SwiftStack節點 149
配置SwiftStack節點 150
添加Swift用戶 150
SwiftStack中間件 151
部署到集群 152
通過網頁控制臺來創建容器和上傳對象 153
小結 154
第四部分 規劃Swift部署
第11章 Swift的硬件 157
節點的硬件規格 158
CPU 158
內存 161
盤 162
集群組網(Cluster Networking) 164
網卡(NIC) 165
對外網絡(Outward-Facing Network) 165
對內網絡(Cluster-Facing Network) 165
數據復制網絡(Replication Network) 166
帶外管理(Out-of-Band Management) 166
其他網絡連接 166
小結 167
第12章 規劃Swift部署 169
你的用例 169
系統設計 170
多少個節點? 171
節點服務分層(Tiering Node Services) 175
定義集群空間 176
節點命名規則 178
身份驗證與授權 178
組網 179
對外網絡 180
集群內部的網絡 181
示例部署 184
小規模集群:幾個節點 184
中等規模集群:多個機架 184
大規模集群:多個地域 184
小結 185
第13章 認證和授權 187
認證 187
認證系統工作原理 188
認證請求 190
認證處理 192
認證響應 194
在存儲請求中使用認證令牌 196
授權 196
授權案例 197
授權原理 197
存儲請求處理 200
令牌確認和授權信息查詢 200
授權回調和響應 201
授權和訪問級別 201
賬戶訪問控制 202
只讀訪問(Read-Only Access) 202
讀寫訪問(Read-Write Access) 203
管理員訪問(Admin Access) 203
賬戶訪問控制的JSON字典 203
容器訪問控制 204
容器ACL示例 205
Swift認證系統 206
Keystone 206
TempAuth 206
SWAuth 207
SwiftStack認證系統 207
SwiftStack Auth 207
SwiftStack LDAP 208
SwiftStack Active Directory 208
小結 209
第14章 集群調優和性能優化 211
Swift設置 211
worker進程 212
塊大小 213
設置后臺進程 214
外部管理設置 218
Swift中間件 219
中間件管道 219
重要中間件 219
最有用的中間件 222
其他中間件 223
SwiftStack方法 224
小結 225
第15章 操作Swift集群 227
操作注意事項 227
Swift如何分發數據 228
追蹤環和構造器文件 228
管理容量 229
我們應當避免什么 230
添加容量 230
現有集群:初始化節點上的環 231
添加節點 234
移除容量 239
移除節點 240
移除盤 241
使用SwiftStack管理容量 243
添加容量 244
添加盤 245
添加節點 246
移除容量 246
移除節點 246
移除盤 247
監控你的集群 248
Swift特有指標:監控什么 248
監控和日志工具 250
SwiftStack工具 250
使用SwiftStack進行操作 252
小結 253
第五部分 調試和檢修故障
第16章 硬件故障與恢復 257
處理故障的驅動器 258
處理已滿的盤 259
處理扇區和部分磁盤故障(也稱為位衰減) 259
處理無法訪問的節點 260
處理故障節點 261
節點故障案例研究 262
小結 263
第17章 基準測試 265
評估性能 266
性能指標、基準測試和測試 267
準備你的集群以進行基準測試 268
避免陷阱和錯誤 269
基準測試目標和工具 269
不要貪婪 270
瓶頸 271
使用ssbench進行基準測試 273
安裝ssbench 273
基本ssbench運行 273
定義用例 274
ssbench如何工作 275
測量基本性能 275
進一步使用ssbench 276
定義場景文件 277
ssbench-worker 280
啟動ssbench-worker的方法 280
使用swift-bench進行基準測試 281
準備 282
swift-bench如何工作 282
容器數量 282
測試高并發(-c, -b) 283
測試延遲 283
對象大小(-s, -l) 284
對象數(-n) 284
GET數(-g) 284
不刪除選項(-x) 284
創建配置文件 285
swift-bench運行示例 285
運行分布式swift-bench 285
swift-bench配置示例 286
統計工具 287
小結 288
Swift后記 289