SwiftStack-Swift容量管理-平滑添加/刪除存儲


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。

這個時候要刪除的存儲就能夠從服務器下架了。

相關文章
相關標籤/搜索