SwiftStack在OpenStack Swift基礎上開發的一種產品,固然公司的名稱也一樣爲SwiftStack。
node
博客:http://swiftstack.com/blog/swift
SwiftStack裏面有篇文章比較好的是Swift Capacity Management 即Swift的容量管理,當在Swift服務器集羣中服務器
刪除或者添加存儲的時候,應該怎麼作使得系統能夠平滑過渡,而不會使得在執行刪除或添加存儲操做後服務性能
器的出現佔用大量的I/O以及帶寬,CPU資源的問題。ui
添加存儲:spa
一次性添加存儲--傻瓜作法:blog
若是在運行Swift的時候添加3TB的硬盤存儲,名稱爲d16,節點爲192.168.12.104ci
那麼須要在ring中添加存儲資源
$ swift-ring-builder account.builder add z1-192.168.12.104:6002/d16 3000開發
$ swift-ring-builder container.builder add z1-192.168.12.104:6001/d16 3000
$ swift-ring-builder object.builder add z1-192.168.12.104:6000/d16 3000
3000爲該存儲在ring中的權重(weight),用存儲的容量(GB做爲單位)做爲權重是比較方便的作法。
Rebalance ring,而且把全部新的ring.gz從新傳送到其餘的存儲服務器上
$ swift-ring-builder account.builder rebalance
$ swift-ring-builder container.builder rebalance
$ swift-ring-builder object.builder rebalance
Swift執行了ring的修改,可是真的能夠皆大歡喜了?
錯!這樣作集羣的性能將會急劇降低。即時添加3TB的存儲,將會形成大量的數據在集羣中傳輸。
Rebalance ring意味着每一個存儲設備有相等的負載(根據權重)。若是集羣中有1.5T的數據將會傳送到新的設備中,
那麼將致使10GB的以太網卡在接下的20分鐘內達到100%使用率。整個系統的性能在數個小時內將慘不忍睹。
平滑添加存儲--聰明的作法:
添加存儲的時候把權重從小開始:3000-》25
$ swift-ring-builder account.builder add z1-192.168.12.104:6002/d16 25
$ swift-ring-builder container.builder add z1-192.168.12.104:6001/d16 25
$ swift-ring-builder object.builder add z1-192.168.12.104:6000/d16 25
$ scp account.ring.gz swift-node-1:/etc/swift/account.ring.gz
$ scp container.ring.gz swift-node-1:/etc/swift/container.ring.gz
$ scp account.ring.gz swift-node-1:/etc/swift/account.ring.gz
$ scp account.ring.gz swift-node-2:/etc/swift/account.ring.gz
$ scp container.ring.gz swift-node-2:/etc/swift/container.ring.gz
$ scp account.ring.gz swift-node-2:/etc/swift/account.ring.gz ...
Rebalance ring,並傳送ring.gz文件到集羣中的全部存儲服務器
$ swift-ring-builder account.builder rebalance
$ swift-ring-builder container.builder rebalance
$ swift-ring-builder object.builder rebalance
$ scp account.ring.gz swift-node-1:/etc/swift/account.ring.gz
$ scp container.ring.gz swift-node-1:/etc/swift/container.ring.gz
$ scp account.ring.gz swift-node-1:/etc/swift/account.ring.gz
$ scp account.ring.gz swift-node-2:/etc/swift/account.ring.gz
$ scp container.ring.gz swift-node-2:/etc/swift/container.ring.gz
$ scp account.ring.gz swift-node-2:/etc/swift/account.ring.gz ...
等待一段時間後(好比說一個小時)從新設置該存儲的權重(25->50),再reblance ring,再傳送ring.gz到集羣中的全部存儲服務器
$ swift-ring-builder account.builder set_weight z1-192.168.12.104:6002/d16 50
$ swift-ring-builder container.builder set_weight z1-192.168.12.104:6001/d16 50
$ swift-ring-builder object.builder set_weight z1-192.168.12.104:6000/d16 50
$ swift-ring-builder account.builder rebalance
$ swift-ring-builder container.builder rebalance
$ swift-ring-builder object.builder rebalance
$ scp account.ring.gz ...
不斷重複,直到120個小時以後,權重變爲3000了,設備添加就算是成功了。
固然,能夠寫經過腳本的方式省略大量的重複步驟!
刪除存儲
方式和添加存儲是同樣的,把存儲的權重逐步減小,每一個小時或者固定的時間內重複步驟,直到權重變爲0。
這個時候要刪除的存儲就能夠從服務器下架了。