分布式塊存儲介紹_第1頁
分布式塊存儲介紹_第2頁
分布式塊存儲介紹_第3頁
分布式塊存儲介紹_第4頁
分布式塊存儲介紹_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

分布式塊存儲介紹2023/2/51分布式塊存儲概念:采用分布式技術:多存儲節(jié)點;操作:塊;2023/2/52概念1分布式分布式系統(tǒng):硬件或軟件組件分布在網絡計算機上且通過消息傳遞進行通信和動作協(xié)調的協(xié)調。特征:并發(fā)性異構性可伸縮性透明性2023/2/53概念2塊存儲塊設備:各類磁盤;塊層:linux存儲虛擬化RAIDQemu虛擬盤2023/2/54概念3網絡存儲NAS(NetworkAttachedStorage-網絡附加存儲)即將存儲設備通過標準的網絡拓撲結構(例如以太網),連接到一群計算機上。NAS是部件級的存儲方法,它的重點在于幫助工作組和部門級機構解決迅速增加存儲容量的需求。DAS(DirectAttachedStorage-直接附加存儲)是指將存儲設備通過SCSI接口或光纖通道直接連接到一臺計算機上。DAS產品包括存儲器件和集成在一起的簡易服務器,可用于實現(xiàn)涉及文件存取及管理的所有功能。SAN(StorageAreaNetwork-存儲局域網絡)通過光纖通道連接到一群計算機上。在該網絡中提供了多主機連接,但并非通過標準的網絡拓撲。SAN專注于企業(yè)級存儲的特有問題,主要用于存儲量大的工作環(huán)境。2023/2/552023/2/562023/2/57實例分析

——開源分布式塊存儲sheepdog開源的分布式塊存儲:2009年由日本NTT實驗室MORITAKAZUTAKA創(chuàng)建的專為虛擬機(QEMU/KVM虛擬機)提供塊存儲,但并不完全拘泥于虛擬機,可提供一個虛擬的塊設備無單節(jié)點失效:如果一個節(jié)點失敗,其數(shù)據(jù)可由其他節(jié)點得到。低運維開銷:零配置;對內核文件系統(tǒng)無特性假設;節(jié)點變化無須人工參與即可恢復;數(shù)據(jù)動態(tài)均衡負載;支持虛擬機的熱遷移、鏡像快照、模版&克隆、集群快照;計算節(jié)點和數(shù)據(jù)節(jié)點混合模式線性擴展,支持上千級別節(jié)點2023/2/58Sheepdogcluster2023/2/59整體架構2023/2/5102023/2/511整體架構Sheepdog是一個分布式存儲系統(tǒng),它為sheepdog客戶端(QEMU塊設備驅動)提供一個objectstorage(對象存儲),(類似于簡單的key-value接口)。objectstorage:sheepdog并不是一般通用的文件系統(tǒng)。Sheepdog守護線程(sheep)為QEMU創(chuàng)建一個分布式的對象存儲系統(tǒng)。對象可以存放在存儲系統(tǒng)中。對象是大小可伸縮的,并且有一個全局唯一標識。我們通過指定對象標識來進行讀寫刪除等操作。對象存儲包括gateway和對象管理。Gateway:gateway接受QEMU發(fā)送來的I/O請求(objectid,offset,length,operationtype),并根據(jù)一致性哈希算法來計算目標節(jié)點,然后將請求發(fā)送至目標節(jié)點。Objectmanager:objectmanager接受到gateway發(fā)送來的I/O請求,并對它的磁盤上進行讀寫操作。Clustermanager:它管理nodemembership(節(jié)點之間的關系)例如,檢測失敗或添加的節(jié)點和通知節(jié)點的變化,并且管理一些保持節(jié)點一致性的操作,例如vdi創(chuàng)建以及快照等。目前我們采用corosyncclusterengine作為clustermanager。QEMUblockdriver:它將一個VM鏡像分成固定大小的object(4MB)并通過gateway將它們存放在objectstorage。2023/2/512節(jié)點內部2023/2/513ObjectStorage每個對象都有一個全局唯一的64位標識,對象可以存在多個節(jié)點上。QEMUblockdriver并不關心對象的存儲位置。對象存儲系統(tǒng)負責管理對象的存儲位置。Object類型:dataobject、vdiobject(虛擬盤鏡像)、vmstateobject(運行的虛擬機的虛擬機狀態(tài)鏡像,用來做快照)、vdiattrobject(每個虛擬盤的屬性,屬性為key-value風格,類似于常用文件系統(tǒng)的擴展屬性)ObjectID規(guī)范:0-31(32bits):objecttypespecificspace32-55(24bits):vdiid對VDI名計算hash值得到56-59(4bits):reserved60-63(4bits):objecttypeidentifierobjecttypetheusageoflower32bitsdataobjecttheindexnumberinthevirtualdiskimagevdiobjectnotused(filledwithzero)vmstateobjecttheindexnumberinthevmstateimagevdiattrobjectsthehashvalueofthekeyname2023/2/514Object格式:Dataobject:虛擬盤鏡像的chunkVdiobject:structsheepdog_inode{charname[SD_MAX_VDI_LEN];/*thenameofthisVDI*/chartag[SD_MAX_VDI_TAG_LEN];/*thesnapshottagname*/uint64_tctime;/*creationtimeofthisVDI*/uint64_tsnap_ctime;/*thetimesnapshotistaken*/uint64_tvm_clock_nsec;/*vmclock(usedforlivesnapshot)*/uint64_tvdi_size;/*thesizeofVDI*/uint64_tvm_state_size;/*thesizeofvmstate(usedforlivesnapshot)*/uint16_tcopy_policy;/*reserved*/uint8_tnr_copies;/*thenumberofobjectredundancy*/uint8_tblock_size_shift;/*infoaboutthesizeofthedataobject*/uint32_tsnap_id;/*thesnapshotid*/uint32_tvdi_id;/*thevdiid*/uint32_tparent_vdi_id;/*theparentsnapshotvdiidofthisVDI*/uint32_tchild_vdi_id[MAX_CHILDREN];/*thechildrenVDIsofthisVDI*/uint32_tdata_vdi_id[MAX_DATA_OBJS];/*thedataobjectIDsthisVDIcontains*/

};Vmstateobject:chunkVdiattrobject:ThefirstSD_MAX_VDI_ATTR_KEY_LENbytes(256bytes)isthekeynameofthisattribute.Therestoftheobjectisthevalueofthisattribute.2023/2/515Read-only/writableobjectsWritable:只允許一個VM讀寫此對象而其他VMs不能訪問;Read-onlyobjects:可讀但不能寫這是指虛擬機不能同一時間共享同一卷(volume)。這避免了寫寫沖突,簡化了sheepdog系統(tǒng)的實現(xiàn)。2023/2/516GatewayWheretostoreobjects

consistenthashing:增刪節(jié)點不會對對象映射產生改變;I/O負載平衡Replication寫沖突WriteI/Oflow

所有副本必須成功更新ReadI/Oflow

對象一致性:節(jié)點失效造成副本不一致。RetryingI/Orequests

epoch:歷史版本號2023/2/517ObjectmanagerPathnamerule:存放路徑/store_dir/obj/[epochnumber]/[objectID]Writejournaling寫日志

如果sheep守護線程在寫操作的時候失敗,則只有部分對象會更新。1.createajournalfile"/store_dir/journal/[epoch]/[vdiobjectid]"2.writeadatatothejournalfilefirst3.writeadatatothevdiobject4.removethejournalfile2023/2/518Clustermanager一般sheepdog客戶端獨立訪問他們的鏡像。而且一些VDI操作(克隆、創(chuàng)建VDI)必須唯一的執(zhí)行,因為這些操作更新全局信息。Corosyncclusterengine2023/2/519QEMUBlockDriverSheepdog卷被分成4MB的dataobjects。只有被寫過的才分配。Open:QEMU塊設備驅動通過gateway讀一個vdi對象bdrv_open()Read/wrte:根據(jù)請求扇區(qū)的偏移和大小計算dataobjectid,然后將請求發(fā)送到gateway。如果塊設備驅動發(fā)送寫請求至某個不屬于當前VDI的數(shù)據(jù)對象,則塊設備驅動發(fā)送Cow請求來分配一個新的數(shù)據(jù)對象寫快照vdi:對QEMU附加一個快照VDI,當塊設備驅動第一次將寫請求發(fā)送到塊設備vdi時,則塊設備驅動創(chuàng)建一個寫的writeableVDI作為快照的孩子,然后發(fā)送請求到這個新的VDI。2023/2/520VDI操作Lookupcalculateavdiidfromthehashvalueofthevdinamecalculateavdiobjectidfromthevdiidsendareadrequesttothevdiobjectifthevdiisnottherequestedone,incrementthevdiidandretrytosendareadrequest快照和克隆1.readatargetVDI2.createanewVDIwhichhasthesamecontentasthetargetobjectVDI3.setthe''parent_vdi_id''ofthenewVDItothetargetVDIid4.setthe''child_vdi_id''ofthetargetVDItothenewVDIid5.setthe''snap_ctime''ofthetargetVDItothecurrenttimethen,thenewvdibecomesthecurrentvdiobject.DeletereclaimingofunuseddataobjectsisnotinvokeduntilallrelevantVDIobjects(allrelativesnapshotVDIsandclonedVDIs)aredeleted。AfterallrelevantVDIsaredeleted,SheepdogdeletesalldataobjectsoftheVDIs,andsetthenullstringtothenameofthevdiobjects.2023/2/521ObjectrecoveryEpoch:nodemembership的歷史信息,路徑為/store_dir/epoch/[epochnumber]每個文件包含此epoch的節(jié)點信息表(IPaddress,portnumber,thenumberofvirtualnodes)Recoveryprocess1.ReceiveallstoredobjectIDsfromallnodes2.Calculatewhichobjectstohave3.CreatetheobjectIDslistfile"/store_dir/obj/[thecurrentepoch]/list"4.SendareadrequeststogetobjectswhoseIDisinthelistfile.Therequestsaresenttothenodewhichhadtheobjectatthepreviousepoch.5.Storetheobjecttothecurrentepochdirectory2023/2/522ProtocolSheepdog請求頭包含固定大小的header(48位)和可變的數(shù)據(jù)段。Header包括協(xié)議版本,操作代碼,epoch號,數(shù)據(jù)長度等。2023/2/523Betweensheep和qemu2023/2/524betweensheepandcollieoperationcodedescriptionSD_OP_DEL_VDIDeletetherequestedVDI.SD_OP_GET_NODE_LISTGetthelistofsheepdognodes.SD_OP_GET_VM_LISTNotusednow.SD_OP_MAKE_FSCreateasheepdogcluster.SD_OP_SHUTDOWNStopasheepdogcluster.SD_OP_STAT_SHEEPGetinformationaboutlocaldiskusage.SD_OP_STAT_CLUSTERGetinformationaboutthesheepdogclusterSD_OP_KILL_NODEAbortthesheepdaemon.SD_OP_GET_VDI_ATTRGetavdiattrobjectid.2023/2/525betweensheepsoperationcodedescriptionSD_OP_REMOVE_OBJRemovestheobject.SD_OP_GET_OBJ_LISTGetthelistofobjectIDswhicharestoredonthetargetnode.2023/2/526Sheepdog線程模型兩種上下文主線程上下文

接收請求,喚醒處理函數(shù)

group_handler(),處理節(jié)點變化和廣播消息

client_handler(),處理IO和數(shù)據(jù)恢復、遷移等請求

工作線程上下文

12個,其中4個專門處理IO請求,4個專門處理gateway請求2023/2/527邏輯處理模型兩種上下文,主線程同工作線程無競爭的全局變量將請求處理邏輯中需要串行化的邏輯放到主線程中,可以并行的邏輯放到工作線程中

多線程、無鎖的節(jié)點變化處理邏輯、數(shù)據(jù)恢復、遷移邏輯

復雜的分布式算法簡單化,根除死鎖的可能性

容易檢驗算法的正確性2023/2/528節(jié)點管理Sheepdog只提供節(jié)點變化后的處理機制

節(jié)點變化的檢測依賴外部實現(xiàn)

消息機制依賴外部實現(xiàn)

節(jié)點變化消息

節(jié)點廣播消息支持兩種模型

全對稱(依賴corosync,運行于sheepdog的地址空間)

缺點:規(guī)模小<100

優(yōu)點:無需配置

單獨的控制集群(依賴Accord*或者Zookeeper,運行于獨立的地址空間)

缺點:需要配置控制集群

優(yōu)點:規(guī)模大>10002023/2/529節(jié)點變化的處理節(jié)點加入時,內部邏輯需要一個特殊的master節(jié)點來處理新節(jié)點是否可以加入

集群主動或被動關閉后,重新啟動集群,也是節(jié)點變化的處理過程每個節(jié)點都有一致的成員視圖目前可以處理多個節(jié)點同時離開或者加入的事件(比如同時有A,B加入,C離開)2023/2/530節(jié)點加入節(jié)點加入

分成兩個階段

1.新加入的節(jié)點發(fā)送加入請求

2.master節(jié)點檢查系統(tǒng)狀態(tài),核查能否加入,如果能,則廣播一個新的視圖,各個節(jié)點更新視圖和狀態(tài)3.新節(jié)點加入時,在節(jié)點1和2之間master節(jié)點離開,mastership自動轉移,不會影響系統(tǒng)運行

新的master節(jié)點繼續(xù)檢查狀態(tài)以及廣播視圖2023/2/531節(jié)點離開節(jié)點離開

外部的節(jié)點檢測機制發(fā)送成員變化視圖

各個節(jié)點更新視圖和狀態(tài)當多個節(jié)點變化事件發(fā)生時,外部檢測機制確保離開和加入的消息的順序一致

剩下的節(jié)點和新加入的節(jié)點看見一致的視圖

比如集群有(A,B,C,D)四個節(jié)點,E在加入的同時D因事故離開,則(A,B,C,E)四個節(jié)點都將看到最終如下的視圖

-{member(A,B,C,E),join(E),left(D)}

產生一個還是多個視圖變化消息跟外部檢測機制相關2023/2/532虛擬節(jié)點與一致性哈希Sheepdog采用虛擬節(jié)點和一致性哈希存儲塊對象

節(jié)點和數(shù)據(jù)都放到哈希環(huán)上

一個物理節(jié)點分散成多個節(jié)點均勻到環(huán)上2023/2/533節(jié)點變化的影響節(jié)點加入,數(shù)據(jù)需要重新均衡

-虛擬節(jié)點和一致性哈希算法保證

數(shù)據(jù)均勻分布在各個物理節(jié)點

很大程度上減少數(shù)據(jù)遷移節(jié)點離開,數(shù)據(jù)拷貝需要恢復,保證數(shù)據(jù)冗余度

-通過節(jié)點變化的歷史信息恢復數(shù)據(jù)2023/2/534數(shù)據(jù)管理虛擬機鏡像被切分為4M大小的對象對象稀疏存儲每個對象由唯一的64位數(shù)字索引每個對象有多個拷貝負值到節(jié)點上2023/2/535數(shù)據(jù)的讀寫由于一個鏡像只有一個虛擬機操作,所以更新拷貝時可以并行執(zhí)行寫操作讀一個對象,可以從任何一個拷貝中返回2023/2/536拷貝修復分布式系統(tǒng)中,拷貝的修復通常有兩種

急修復:收到節(jié)點離開消息,立即進行修復

優(yōu)點:簡單

缺點:當離開的節(jié)點回來之后,造成帶寬的浪費

懶修復:

優(yōu)點:能區(qū)分節(jié)點的臨時錯誤和永久錯誤,減少帶寬的浪費

缺點:增加算法邏輯復雜度

-如何處理關于臨時離開節(jié)點的數(shù)據(jù)請求2023/2/537拷貝修復邏輯對象的時間軌跡

-用epoch來記錄每個發(fā)生節(jié)點變化的新視圖

-通過epoch來區(qū)分不同時間的數(shù)據(jù)對象

-每個對象都有一個以epoch為點的時間軌跡

init:(A,B,C),3個拷貝

2023/2/538Sheepdog面臨的主要問題多個節(jié)點變化:

節(jié)點加入時,有其他節(jié)點當?shù)?/p>

擴容,縮容等數(shù)據(jù)平衡,節(jié)點存儲權重:

虛擬節(jié)點和一致性哈希減少恢復時間和數(shù)據(jù)遷移節(jié)點變化時對虛擬機IO的影響

本地緩存模式,幾乎無影響

無本地緩存,需要等待對象恢復大規(guī)模節(jié)點的擴展性

目標是上幾千節(jié)點的規(guī)模內部算法的擴展性專門的節(jié)點控制集群2023/2/539安裝sheepdog/collie/sheepdog/wiki/Getting-StartedRequirementsOneormorex86-64machines.Linuxkernel2.6.27orlaterglibc2.9orlaterThecorosyncandcorosynclibpackage.QEMU0.13orlaterCompile-timedependenciesGNUAutotoolspkg-configcorosyncdevelpackagegit(whencompilingfromsourcerepo)liburcuoptional:fuse-devel(forsheepfs)2023/2/540Install

CompileorinstalltheCorosyncpackages

Fordebianpackagebasedsystems:$sudoaptitudeinstallcorosynclibcorosync-devForRPMpackagebasedsystems:$sudoyuminstallcorosynclib-develDownload,buildandinstallQEMUwithSheepdogsupport$gitclonegit:///qemu.git$cdqemu$./configure$sudomakeinstall$cd..2023/2/541Download,buildandinstalltheSheepdogserverandcommandlinetools

$gitclonegit:///collie/sheepdog.git$cdsheepdog$./autogen.sh$./configure$sudomakeinstall$cd..2023/2/542UsageSetupSheepdog$sudo/etc/init.d/sheepdogstartOr;$sudosheep/var/lib/sheepdog1.Formatsheepdogcluster$collieclusterformat--copies=32.Checkcluster

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論