版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、分布式塊存儲介紹2022/8/21分布式塊存儲概念:采用分布式技術:多存儲節(jié)點;操作: 塊;2022/8/22概念1 分布式分布式系統(tǒng):硬件或軟件組件分布在網絡計算機上且通過消息傳遞進行通信和動作協調的協調。特征:并發(fā)性異構性可伸縮性透明性2022/8/23概念2 塊存儲塊設備:各類磁盤;塊層:linux存儲虛擬化RAIDQemu 虛擬盤2022/8/24概念3 網絡存儲NAS(Network Attached Storage-網絡附加存儲)即將存儲設備通過標準的網絡拓撲結構(例如以太網),連接到一群計算機上。NAS 是部件級的存儲方法,它的重點在于幫助工作組和部門級機構解決迅速增加存儲容量的
2、需求。DAS(Direct Attached Storage-直接附加存儲)是指將存儲設備通過SCSI 接口或光纖通道直接連接到一臺計算機上。DAS 產品包括存儲器件和集成在一起的簡易服務器,可用于實現涉及文件存取及管理的所有功能。SAN(Storage Area Network-存儲局域網絡)通過光纖通道連接到一群計算機上。在該網絡中提供了多主機連接,但并非通過標準的網絡拓撲。SAN 專注于企業(yè)級存儲的特有問題,主要用于存儲量大的工作環(huán)境。2022/8/252022/8/262022/8/27實例分析開源分布式塊存儲sheepdog開源的分布式塊存儲:2009年由日本NTT實驗室MORITA
3、 KAZUTAKA 創(chuàng)建的專為虛擬機(QEMU/KVM虛擬機)提供塊存儲,但并不完全拘泥于虛擬機,可提供一個虛擬的塊設備無單節(jié)點失效:如果一個節(jié)點失敗,其數據可由其他節(jié)點得到。低運維開銷:零配置;對內核文件系統(tǒng)無特性假設;節(jié)點變化無須人工參與即可恢復;數據動態(tài)均衡負載;支持虛擬機的熱遷移、鏡像快照、模版&克隆、集群快照;計算節(jié)點和數據節(jié)點混合模式線性擴展,支持上千級別節(jié)點2022/8/28Sheepdog cluster2022/8/29整體架構2022/8/2102022/8/211整體架構Sheepdog是一個分布式存儲系統(tǒng),它為sheepdog客戶端(QEMU塊設備驅動)提供一個obje
4、ct storage(對象存儲),(類似于簡單的key-value接口)。object storage :sheepdog并不是一般通用的文件系統(tǒng)。Sheepdog守護線程(sheep)為QEMU創(chuàng)建一個分布式的對象存儲系統(tǒng)。對象可以存放在存儲系統(tǒng)中。對象是大小可伸縮的,并且有一個全局唯一標識。我們通過指定對象標識來進行讀寫刪除等操作。對象存儲包括gateway和對象管理。Gateway:gateway接受QEMU發(fā)送來的I/O請求(object id, offset, length, operation type),并根據一致性哈希算法來計算目標節(jié)點,然后將請求發(fā)送至目標節(jié)點。Object
5、manager:object manager 接受到gateway發(fā)送來的I/O請求,并對它的磁盤上進行讀寫操作。Cluster manager:它管理node membership(節(jié)點之間的關系)例如,檢測失敗或添加的節(jié)點和通知節(jié)點的變化,并且管理一些保持節(jié)點一致性的操作,例如vdi創(chuàng)建以及快照等。目前我們采用corosync cluster engine作為cluster manager。QEMU block driver:它將一個VM鏡像分成固定大小的object(4MB)并通過gateway將它們存放在object storage。2022/8/212節(jié)點內部2022/8/213Ob
6、ject Storage每個對象都有一個全局唯一的64位標識,對象可以存在多個節(jié)點上。QEMU block driver并不關心對象的存儲位置。對象存儲系統(tǒng)負責管理對象的存儲位置。Object 類型:data object、vdi object(虛擬盤鏡像)、vmstate object(運行的虛擬機的虛擬機狀態(tài)鏡像,用來做快照)、vdi attr object(每個虛擬盤的屬性,屬性為key-value風格,類似于常用文件系統(tǒng)的擴展屬性)Object ID 規(guī)范:0 - 31 (32 bits): object type specific space32 - 55 (24 bits): vd
7、i id 對VDI名計算hash值得到56 - 59 ( 4 bits): reserved60 - 63 ( 4 bits): object type identifierobject typethe usage of lower 32 bitsdata objectthe index number in the virtual disk imagevdi objectnot used (filled with zero)vmstate objectthe index number in the vm state imagevdi attr objectsthe hash value of
8、the key name2022/8/214Object 格式:Data object:虛擬盤鏡像的chunkVdi object:struct sheepdog_inode char nameSD_MAX_VDI_LEN; /* the name of this VDI*/ char tagSD_MAX_VDI_TAG_LEN; /* the snapshot tag name */ uint64_t ctime; /* creation time of this VDI */ uint64_t snap_ctime; /* the time snapshot is taken */ uin
9、t64_t vm_clock_nsec; /* vm clock (used for live snapshot) */ uint64_t vdi_size; /* the size of VDI */ uint64_t vm_state_size; /* the size of vm state (used for live snapshot) */ uint16_t copy_policy; /* reserved */ uint8_t nr_copies; /* the number of object redundancy */ uint8_t block_size_shift; /*
10、 info about the size of the data object */ uint32_t snap_id; /* the snapshot id */ uint32_t vdi_id; /* the vdi id */ uint32_t parent_vdi_id; /* the parent snapshot vdi id of this VDI */ uint32_t child_vdi_idMAX_CHILDREN; /* the children VDIs of this VDI */ uint32_t data_vdi_idMAX_DATA_OBJS; /* the d
11、ata object IDs this VDI contains*/ ;Vmstate object:chunkVdi attr object: The first SD_MAX_VDI_ATTR_KEY_LEN bytes (256 bytes) is the key name of this attribute. The rest of the object is the value of this attribute.2022/8/215Read-only/writable objectsWritable:只允許一個VM讀寫此對象而其他VMs不能訪問;Read-only objects:
12、可讀但不能寫這是指虛擬機不能同一時間共享同一卷(volume)。這避免了寫寫沖突,簡化了sheepdog系統(tǒng)的實現。2022/8/216Gateway Where to store objects consistent hashing:增刪節(jié)點不會對對象映射產生改變;I/O 負載平衡Replication 寫沖突Write I/O flow 所有副本必須成功更新Read I/O flow 對象一致性:節(jié)點失效造成副本不一致。Retrying I/O requests epoch:歷史版本號2022/8/217Object managerPath name rule:存放路徑/store_dir
13、/obj/epoch number/object IDWrite journaling 寫日志 如果sheep 守護線程在寫操作的時候失敗,則只有部分對象會更新。1. create a journal file /store_dir/journal/epoch/vdi object id2. write a data to the journal file first3. write a data to the vdi object4. remove the journal file2022/8/218Cluster manager一般sheepdog客戶端獨立訪問他們的鏡像。而且一些VDI操
14、作(克隆、創(chuàng)建VDI)必須唯一的執(zhí)行,因為這些操作更新全局信息。Corosync cluster engine2022/8/219QEMU Block DriverSheepdog卷被分成4MB的data objects。只有被寫過的才分配。Open:QEMU塊設備驅動通過gateway讀一個vdi對象bdrv_open()Read/wrte:根據請求扇區(qū)的偏移和大小計算data object id,然后將請求發(fā)送到gateway。如果塊設備驅動發(fā)送寫請求至某個不屬于當前VDI的數據對象,則塊設備驅動發(fā)送Cow請求來分配一個新的數據對象寫快照vdi:對QEMU附加一個快照VDI,當塊設備驅動第
15、一次將寫請求發(fā)送到塊設備vdi時,則塊設備驅動創(chuàng)建一個寫的writeable VDI作為快照的孩子,然后發(fā)送請求到這個新的VDI。2022/8/220VDI 操作Lookupcalculate a vdi id from the hash value of the vdi namecalculate a vdi object id from the vdi idsend a read request to the vdi objectif the vdi is not the requested one, increment the vdi id and retry to send a rea
16、d request快照和克隆1. read a target VDI2. create a new VDI which has the same content as the target object VDI 3. set the parent_vdi_id of the new VDI to the target VDI id 4. set the child_vdi_id of the target VDI to the new VDI id 5. set the snap_ctime of the target VDI to the current time then, the new
17、 vdi becomes the current vdi object.Deletereclaiming of unused data objects is not invoked until all relevant VDI objects (all relative snapshot VDIs and cloned VDIs) are deleted。After all relevant VDIs are deleted, Sheepdog deletes all data objects of the VDIs, and set the null string to the name o
18、f the vdi objects.2022/8/221Object recoveryEpoch:node membership的歷史信息,路徑為/store_dir/epoch/epoch number每個文件包含此epoch的節(jié)點信息表(IP address, port number, the number of virtual nodes)Recovery process1. Receive all stored object IDs from all nodes2. Calculate which objects to have3. Create the object IDs list
19、 file /store_dir/obj/the current epoch/list4. Send a read requests to get objects whose ID is in the list file. The requests are sent to the node which had the object at the previous epoch.5. Store the object to the current epoch directory2022/8/222Protocol Sheepdog請求頭包含固定大小的header(48位)和可變的數據段。Heade
20、r包括協議版本,操作代碼,epoch號,數據長度等。2022/8/223Between sheep 和 qemu2022/8/224between sheep and collieoperation codedescriptionSD_OP_DEL_VDIDelete the requested VDI.SD_OP_GET_NODE_LISTGet the list of sheepdog nodes.SD_OP_GET_VM_LISTNot used now.SD_OP_MAKE_FSCreate a sheepdog cluster.SD_OP_SHUTDOWNStop a sheepdo
21、g cluster.SD_OP_STAT_SHEEPGet information about local disk usage.SD_OP_STAT_CLUSTERGet information about the sheepdog clusterSD_OP_KILL_NODEAbort the sheep daemon.SD_OP_GET_VDI_ATTRGet a vdi attr object id.2022/8/225between sheepsoperation codedescriptionSD_OP_REMOVE_OBJRemoves the object.SD_OP_GET_
22、OBJ_LISTGet the list of object IDs which are stored on the target node.2022/8/226Sheepdog線程模型兩種上下文 主線程上下文 接收請求,喚醒處理函數 group_handler(),處理節(jié)點變化和廣播消息 client_handler(),處理IO和數據恢復、遷移等請求 工作線程上下文 12個,其中4個專門處理IO請求,4個專門處理 gateway請求2022/8/227邏輯處理模型兩種上下文,主線程同工作線程無競爭的全局變量將請求處理邏輯中需要串行化的邏輯放到主線程中,可以并行的邏輯放到工作線程中 多線程、
23、無鎖的節(jié)點變化處理邏輯、數據恢復、遷移邏輯 復雜的分布式算法簡單化,根除死鎖的可能性 容易檢驗算法的正確性2022/8/228節(jié)點管理Sheepdog只提供節(jié)點變化后的處理機制 節(jié)點變化的檢測依賴外部實現 消息機制依賴外部實現 節(jié)點變化消息 節(jié)點廣播消息支持兩種模型 全對稱(依賴corosync,運行于sheepdog的地址空間) 缺點:規(guī)模小10002022/8/229節(jié)點變化的處理節(jié)點加入時,內部邏輯需要一個特殊的master節(jié)點來處理新節(jié)點是否可以加入 集群主動或被動關閉后,重新啟動集群,也是節(jié)點變化的處理過程每個節(jié)點都有一致的成員視圖目前可以處理多個節(jié)點同時離開或者加入的事件(比如同時
24、有A,B加入,C離開)2022/8/230節(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)以及廣播視圖2022/8/231節(jié)點離開節(jié)點離開 外部的節(jié)點檢測機制發(fā)送成員變化視圖 各個節(jié)點更新視圖和狀態(tài)當多個節(jié)點變化事件發(fā)生時,外部檢測機制確保離開和加入的消息的順序一致 剩下的節(jié)點和新加入的節(jié)點看見一致的視圖 比如集群有(A, B, C, D)四個節(jié)
25、點,E在加入的同時D因事故離開,則(A, B, C, E)四個節(jié)點都將看到最終如下的視圖 -member(A, B, C, E), join(E), left(D) 產生一個還是多個視圖變化消息跟外部檢測機制相關2022/8/232虛擬節(jié)點與一致性哈希Sheepdog采用虛擬節(jié)點和一致性哈希存儲塊對象 節(jié)點和數據都放到哈希環(huán)上 一個物理節(jié)點分散成多個節(jié)點均勻到環(huán)上2022/8/233節(jié)點變化的影響節(jié)點加入,數據需要重新均衡 -虛擬節(jié)點和一致性哈希算法保證 數據均勻分布在各個物理節(jié)點 很大程度上減少數據遷移節(jié)點離開,數據拷貝需要恢復,保證數據冗余度 -通過節(jié)點變化的歷史信息恢復數據2022/8/
26、234數據管理虛擬機鏡像被切分為4M大小的對象對象稀疏存儲每個對象由唯一的64位數字索引每個對象有多個拷貝負值到節(jié)點上2022/8/235數據的讀寫由于一個鏡像只有一個虛擬機操作,所以更新拷貝時可以并行執(zhí)行寫操作讀一個對象,可以從任何一個拷貝中返回2022/8/236拷貝修復分布式系統(tǒng)中,拷貝的修復通常有兩種 急修復:收到節(jié)點離開消息,立即進行修復 優(yōu)點:簡單 缺點:當離開的節(jié)點回來之后,造成帶寬的浪費 懶修復: 優(yōu)點:能區(qū)分節(jié)點的臨時錯誤和永久錯誤,減少帶寬的浪費 缺點:增加算法邏輯復雜度 -如何處理關于臨時離開節(jié)點的數據請求2022/8/237拷貝修復邏輯對象的時間軌跡 -用epoch來記
27、錄每個發(fā)生節(jié)點變化的新視圖 -通過epoch來區(qū)分不同時間的數據對象 -每個對象都有一個以epoch為點的時間軌跡 init: (A, B, C), 3個拷貝 2022/8/238Sheepdog面臨的主要問題多個節(jié)點變化: 節(jié)點加入時,有其他節(jié)點當掉 擴容,縮容等數據平衡,節(jié)點存儲權重: 虛擬節(jié)點和一致性哈希減少恢復時間和數據遷移節(jié)點變化時對虛擬機IO的影響 本地緩存模式,幾乎無影響 無本地緩存,需要等待對象恢復大規(guī)模節(jié)點的擴展性 目標是上幾千節(jié)點的規(guī)模 內部算法的擴展性 專門的節(jié)點控制集群2022/8/239安裝sheepdog /collie/sheepdog/wiki/Getting-
28、StartedRequirementsOne or more x86-64 machines.Linux kernel 2.6.27 or laterglibc 2.9 or laterThe corosync and corosync lib package.QEMU 0.13 or laterCompile-time dependenciesGNU Autotoolspkg-configcorosync devel packagegit (when compiling from source repo)liburcuoptional:fuse-devel (for sheepfs)2022
29、/8/240InstallCompile or install the Corosync packagesFor debian package based systems:$ sudo aptitude install corosync libcorosync-dev For RPM package based systems:$ sudo yum install corosynclib-develDownload, build and install QEMU with Sheepdog support$ git clone git:/qemu.git $ cd qemu $ ./confi
30、gure $ sudo make install $ cd .2022/8/241Download, build and install the Sheepdog server and command line tools$ git clone git:/collie/sheepdog.git $ cd sheepdog $ ./autogen.sh $ ./configure $ sudo make install $ cd .2022/8/242Usage Setup Sheepdog$ sudo /etc/init.d/sheepdog start Or;$ sudo sheep /var/lib/sheepdog1. F
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年軍體拳第一套動作要領試題含答案
- 2026年劇本殺運營公司劇本采購管理制度
- 機場驅鳥槍培訓課件
- 循環(huán)系統(tǒng)疾病康復護理初步
- 2025年納米技術在食品保鮮應用報告
- 2026年智能農業(yè)技術創(chuàng)新報告及未來行業(yè)發(fā)展趨勢分析報告
- 云南財稅知識培訓課件
- 2025年城市共享單車用戶行為與運維效率報告
- 2025年陶瓷地磚大尺寸產品美學設計報告
- 作風督查制度
- 錫圓電子科技有限公司高端半導體封測項目環(huán)評資料環(huán)境影響
- GB/T 45356-2025無壓埋地排污、排水用聚丙烯(PP)管道系統(tǒng)
- 2025既有建筑改造利用消防設計審查指南
- 籃球場工程施工設計方案
- (市質檢二檢)福州市2024-2025學年高三年級第二次質量檢測 歷史試卷(含答案)
- 《外科手術學基礎》課件
- 化學-湖南省永州市2024-2025學年高二上學期1月期末試題和答案
- 2025年貴安發(fā)展集團有限公司招聘筆試參考題庫含答案解析
- DB33T 1214-2020 建筑裝飾裝修工程施工質量驗收檢查用表標準
- 高考語文復習【知識精研】鑒賞古代詩歌抒情方式 課件
- 春運志愿者培訓
評論
0/150
提交評論