OpenStack雲管理系統 Swift講解

2021-06-15 04:25:57 字數 3893 閱讀 2392

分布式,虛擬化,接觸都有一年多了,之前在搞sdn,然後看了下cloudstack,搞了個環境來用了下,感覺還可以,不過在配置的時候,遇到很多困難,這大部分都是因為本人基礎差的原因,再加上本人英文水平不如網路上的大神們,所以道路艱難。

接下來,開始要多儲存進行很好的學習,也希望在學習的過程中可以分享些自己的見解,如有不對之處,希望各位大牛批評指點。謝謝了。

下面本人就講下swift的吧,swift現在是openstack開源雲計算專案的子專案之一。swift利用普通的伺服器來構建冗餘的、可擴充套件的分布式物件儲存集群,儲存容量可達pb級或者更高。swift主要利用了python開發語言進行的,它的前身是rackspace cloud files專案,隨著rackspace加入到openstack社群,racksapce也將cloud files的**貢獻給了社群,並逐漸形成現在swift。swift最新的髮型版本為es*** 1.4.6

swift架構概述

swift主要有三個組成部分:proxy server、storage server和consistency server。其架構如圖1所示,其中storage和consistency服務均允許在storage node上。auth認證服務目前已從swift中剝離出來,使用openstack的認證服務keystone,目的在於實現統一openstack各個專案間的認證管理。

圖1 swift部署架構

主要元件

proxy server

proxy server是提供swift api的伺服器程序,負責swift其餘元件間的相互通訊。對於每個客戶端的請求,它將在ring中查詢account、container或object的位置,並且相應地**請求。proxy提供了rest-full api,並且符合標準的http協議規範,這使得開發者可以快捷構建定製的client與swift互動。

storage server

storage server提供了磁碟裝置上的儲存服務。在swift中有三類儲存伺服器:account、container和object。其中container伺服器負責處理object的列表,container伺服器並不知道物件存放位置,只知道指定container裡存的哪些object。這些object資訊以sqlite資料庫檔案的形式儲存。container伺服器也做一些跟蹤統計,例如object的總數、container的使用情況。

consistency servers

在磁碟上儲存資料並向外提供rest-ful api並不是難以解決的問題,最主要的問題在於故障處理。swift的consistency servers的目的是查詢並解決由資料損壞和硬體故障引起的錯誤。主要存在三個server:auditor、updater和replicator。 auditor執行在每個swift伺服器的後台持續地掃瞄磁碟來檢測物件、container和賬號的完整性。如果發現資料損壞,auditor就會將該檔案移動到隔離區域,然後由replicator負責用乙個完好的拷貝來替代該資料。圖2給出了隔離物件的處理流圖。 在系統高負荷或者發生故障的情況下,container或賬號中的資料不會被立即更新。如果更新失敗,該次更新在本地檔案系統上會被加入佇列,然後updaters會繼續處理這些失敗了的更新工作,其中由account updater和container updater分別負責account和object列表的更新。 replicator的功能是處理資料的存放位置是否正確並且保持資料的合理拷貝數,它的設計目的是swift伺服器在面臨如網路中斷或者驅動器故障等臨時性故障情況時可以保持系統的一致性。

圖2 隔離物件的處理流圖

ring

ring是swift最重要的元件,用於記錄儲存物件與物理位置間的對映關係。在涉及查詢account、container、object資訊時,就需要查詢集群的ring資訊。 ring使用zone、device、partition和replica來維護這些對映資訊。ring中每個partition在集群中都(預設)有3個replica。每個partition的位置由ring來維護,並儲存在對映中。ring檔案在系統初始化時建立,之後每次增減儲存節點時,需要重新平衡一下ring檔案中的專案,以保證增減節點時,系統因此而發生遷移的檔案數量最少。原理

swift用到的演算法和儲存理論並不複雜,主要有幾下幾個概念。

一致性雜湊演算法

swift利用一致性雜湊演算法構建了乙個冗餘的可擴充套件的分布式物件儲存集群。swift採用一致性雜湊的主要目的是在改變集群的node數量時,能夠盡可能少地改變已存在key和node的對映關係。 該演算法的思路分為以下三個步驟。 首先計算每個節點的雜湊值,並將其分配到乙個0~232的圓環區間上。其次使用相同方法計算儲存物件的雜湊值,也將其分配到這個圓環上。隨後從資料對映到的位置開始順時針查詢,將資料儲存到找到的第乙個節點上。如果超過232仍然找不到節點,就會儲存到第乙個節點上。 假設在這個環形雜湊空間中存在4臺node,若增加一台node5,根據演算法得出node5被對映在node3和node4之間,那麼受影響的將僅是沿node5逆時針遍歷到node3之間的物件(它們本來對映到node4上)。其分布如圖3所示。

圖3 一致性雜湊環結構

replica

如果集群中的資料在本地節點上只有乙份,一旦發生故障就可能會造成資料的永久性丟失。因此,需要有冗餘的副本來保證資料安全。swift中引入了replica的概念,其預設值為3,理論依據主要**於nwr策略(也叫quorum協議)。 nwr是一種在分布式儲存系統中用於控制一致性級別的策略。在amazon的dynamo雲儲存系統中,使用了nwr來控制一致性。其中,n代表同乙份資料的replica的份數,w是更新乙個資料物件時需要確保成功更新的份數;r代表讀取乙個資料需要讀取的replica的份數。 公式w+r>n,保證某個資料不被兩個不同的事務同時讀和寫;公式w>n/2保證兩個事務不能併發寫某乙個資料。 在分布式系統中,資料的單點是不允許存在的。即線上正常存在的replica數量為1的情況是非常危險的,因為一旦這個replica再次出錯,就可能發生資料的永久性錯誤。假如我們把n設定成為2,那麼只要有乙個儲存節點發生損壞,就會有單點的存在,所以n必須大於2。n越高,系統的維護成本和整體成本就越高。工業界通常把n設定為3。例如,對於mysql主從結構,其nwr數值分別是n= 2, w = 1, r = 1,沒有滿足nwr策略。而swift的n=3, w=2, r=2,完全符合nwr策略,因此swift系統是可靠的,沒有單點故障。

zone

如果所有的node都在乙個機架或乙個機房中,那麼一旦發生斷電、網路故障等,都將造成使用者無法訪問。因此需要一種機制對機器的物理位置進行隔離,以滿足分割槽容忍性(cap理論中的p)。因此,ring中引入了zone的概念,把集群的node分配到每個zone中。其中同乙個partition的replica不能同時放在同乙個node上或同乙個zone內。注意,zone的大小可以根據業務需求和硬體條件自定義,可以是一塊磁碟、一台儲存伺服器,也可以是乙個機架甚至乙個idc。

weight

ring引入weight的目的是解決未來新增儲存能力更大的node時,分配到更多的partition。例如,2tb容量的node的partition數為1tb的兩倍,那麼就可以設定2tb的weight為200,而1tb的為100。

圖4 一種swift部署集群

例項分析 小結

swift簡單、冗餘、可擴充套件的架構設計保證了它能夠用於iaas的基礎服務。在rackspace cloud files服務兩年的執行積累使得swift**變得越來越成熟,目前已部署在全球各地的公有雲、私有雲服務中。隨著openstack的不斷完善和發展,swift將得到更廣泛的應用。

雲計算介紹和openstack 雲計算管理平台

什麼是雲計算?雲計算是一種基於網際網路的按需付費的服務,這種模式提供可用的 便捷的 按需的網路訪問,通常涉及通過網際網路來提供動態易擴充套件且經常是虛擬化的資源.雲平台的分類 一 iaas 基礎設施即服務 提供給消費者的服務是對所有計算基礎設施的利用,包括處理cpu 記憶體 儲存 網路和其它基本的計...

雲計算筆記二 雲計算系統OpenStack

1.目標 實現乙個可以靈活定製的公有雲iaas軟體 2.底層的虛擬機器可支援 kvm,xen,virtualbox,qemu,lxc 和vmware.3.版本 a nova glance b swift 安裝部署困難 c 真正具備可用性,到此一直使用amazon api介面 d 自由發展 e 網路管...

OpenStack開源雲平台

教程 安裝openvswitch時遇到了點問題,模組編譯通不過,後來發現ubuntu核心版本為3.8,應該是openvswitch還不支援,改用3.2版核心後成功安裝。虛擬機器預設cpu是qemu的虛擬cpu,效能極差,修改 etc nova nova.conf,增加 libvirt cpu mod...