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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

——開源分布式塊存儲(chǔ)sheepdog開源的分布式塊存儲(chǔ):2009年由日本NTT實(shí)驗(yàn)室MORITAKAZUTAKA創(chuàng)建的專為虛擬機(jī)(QEMU/KVM虛擬機(jī))提供塊存儲(chǔ),但并不完全拘泥于虛擬機(jī),可提供一個(gè)虛擬的塊設(shè)備無單節(jié)點(diǎn)失效:如果一個(gè)節(jié)點(diǎn)失敗,其數(shù)據(jù)可由其他節(jié)點(diǎn)得到。低運(yùn)維開銷:零配置;對內(nèi)核文件系統(tǒng)無特性假設(shè);節(jié)點(diǎn)變化無須人工參與即可恢復(fù);數(shù)據(jù)動(dòng)態(tài)均衡負(fù)載;支持虛擬機(jī)的熱遷移、鏡像快照、模版&克隆、集群快照;計(jì)算節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)混合模式線性擴(kuò)展,支持上千級別節(jié)點(diǎn)2023/2/58Sheepdogcluster2023/2/59整體架構(gòu)2023/2/5102023/2/511整體架構(gòu)Sheepdog是一個(gè)分布式存儲(chǔ)系統(tǒng),它為sheepdog客戶端(QEMU塊設(shè)備驅(qū)動(dòng))提供一個(gè)objectstorage(對象存儲(chǔ)),(類似于簡單的key-value接口)。objectstorage:sheepdog并不是一般通用的文件系統(tǒng)。Sheepdog守護(hù)線程(sheep)為QEMU創(chuàng)建一個(gè)分布式的對象存儲(chǔ)系統(tǒng)。對象可以存放在存儲(chǔ)系統(tǒng)中。對象是大小可伸縮的,并且有一個(gè)全局唯一標(biāo)識。我們通過指定對象標(biāo)識來進(jìn)行讀寫刪除等操作。對象存儲(chǔ)包括gateway和對象管理。Gateway:gateway接受QEMU發(fā)送來的I/O請求(objectid,offset,length,operationtype),并根據(jù)一致性哈希算法來計(jì)算目標(biāo)節(jié)點(diǎn),然后將請求發(fā)送至目標(biāo)節(jié)點(diǎn)。Objectmanager:objectmanager接受到gateway發(fā)送來的I/O請求,并對它的磁盤上進(jìn)行讀寫操作。Clustermanager:它管理nodemembership(節(jié)點(diǎn)之間的關(guān)系)例如,檢測失敗或添加的節(jié)點(diǎn)和通知節(jié)點(diǎn)的變化,并且管理一些保持節(jié)點(diǎn)一致性的操作,例如vdi創(chuàng)建以及快照等。目前我們采用corosyncclusterengine作為clustermanager。QEMUblockdriver:它將一個(gè)VM鏡像分成固定大小的object(4MB)并通過gateway將它們存放在objectstorage。2023/2/512節(jié)點(diǎn)內(nèi)部2023/2/513ObjectStorage每個(gè)對象都有一個(gè)全局唯一的64位標(biāo)識,對象可以存在多個(gè)節(jié)點(diǎn)上。QEMUblockdriver并不關(guān)心對象的存儲(chǔ)位置。對象存儲(chǔ)系統(tǒng)負(fù)責(zé)管理對象的存儲(chǔ)位置。Object類型:dataobject、vdiobject(虛擬盤鏡像)、vmstateobject(運(yùn)行的虛擬機(jī)的虛擬機(jī)狀態(tài)鏡像,用來做快照)、vdiattrobject(每個(gè)虛擬盤的屬性,屬性為key-value風(fēng)格,類似于常用文件系統(tǒng)的擴(kuò)展屬性)ObjectID規(guī)范:0-31(32bits):objecttypespecificspace32-55(24bits):vdiid對VDI名計(jì)算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:只允許一個(gè)VM讀寫此對象而其他VMs不能訪問;Read-onlyobjects:可讀但不能寫這是指虛擬機(jī)不能同一時(shí)間共享同一卷(volume)。這避免了寫寫沖突,簡化了sheepdog系統(tǒng)的實(shí)現(xiàn)。2023/2/516GatewayWheretostoreobjects

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

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

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

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

如果sheep守護(hù)線程在寫操作的時(shí)候失敗,則只有部分對象會(huì)更新。1.createajournalfile"/store_dir/journal/[epoch]/[vdiobjectid]"2.writeadatatothejournalfilefirst3.writeadatatothevdiobject4.removethejournalfile2023/2/518Clustermanager一般sheepdog客戶端獨(dú)立訪問他們的鏡像。而且一些VDI操作(克隆、創(chuàng)建VDI)必須唯一的執(zhí)行,因?yàn)檫@些操作更新全局信息。Corosyncclusterengine2023/2/519QEMUBlockDriverSheepdog卷被分成4MB的dataobjects。只有被寫過的才分配。Open:QEMU塊設(shè)備驅(qū)動(dòng)通過gateway讀一個(gè)vdi對象bdrv_open()Read/wrte:根據(jù)請求扇區(qū)的偏移和大小計(jì)算dataobjectid,然后將請求發(fā)送到gateway。如果塊設(shè)備驅(qū)動(dòng)發(fā)送寫請求至某個(gè)不屬于當(dāng)前VDI的數(shù)據(jù)對象,則塊設(shè)備驅(qū)動(dòng)發(fā)送Cow請求來分配一個(gè)新的數(shù)據(jù)對象寫快照vdi:對QEMU附加一個(gè)快照VDI,當(dāng)塊設(shè)備驅(qū)動(dòng)第一次將寫請求發(fā)送到塊設(shè)備vdi時(shí),則塊設(shè)備驅(qū)動(dòng)創(chuàng)建一個(gè)寫的writeableVDI作為快照的孩子,然后發(fā)送請求到這個(gè)新的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]每個(gè)文件包含此epoch的節(jié)點(diǎn)信息表(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é)點(diǎn)變化和廣播消息

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

工作線程上下文

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

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

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

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

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

消息機(jī)制依賴外部實(shí)現(xiàn)

節(jié)點(diǎn)變化消息

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

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

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

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

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

缺點(diǎn):需要配置控制集群

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

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

分成兩個(gè)階段

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

急修復(fù):收到節(jié)點(diǎn)離開消息,立即進(jìn)行修復(fù)

優(yōu)點(diǎn):簡單

缺點(diǎn):當(dāng)離開的節(jié)點(diǎn)回來之后,造成帶寬的浪費(fèi)

懶修復(fù):

優(yōu)點(diǎn):能區(qū)分節(jié)點(diǎn)的臨時(shí)錯(cuò)誤和永久錯(cuò)誤,減少帶寬的浪費(fèi)

缺點(diǎn):增加算法邏輯復(fù)雜度

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

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

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

-每個(gè)對象都有一個(gè)以epoch為點(diǎn)的時(shí)間軌跡

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

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

節(jié)點(diǎn)加入時(shí),有其他節(jié)點(diǎn)當(dāng)?shù)?/p>

擴(kuò)容,縮容等數(shù)據(jù)平衡,節(jié)點(diǎn)存儲(chǔ)權(quán)重:

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

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

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

目標(biāo)是上幾千節(jié)點(diǎn)的規(guī)模內(nèi)部算法的擴(kuò)展性專門的節(jié)點(diǎn)控制集群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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論