分布式块存储介绍_第1页
分布式块存储介绍_第2页
分布式块存储介绍_第3页
分布式块存储介绍_第4页
分布式块存储介绍_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分布式块存储介绍2023/2/51分布式块存储概念:采用分布式技术:多存储节点;操作:块;2023/2/52概念1分布式分布式系统:硬件或软件组件分布在网络计算机上且通过消息传递进行通信和动作协调的协调。特征:并发性异构性可伸缩性透明性2023/2/53概念2块存储块设备:各类磁盘;块层:linux存储虚拟化RAIDQemu虚拟盘2023/2/54概念3网络存储NAS(NetworkAttachedStorage-网络附加存储)即将存储设备通过标准的网络拓扑结构(例如以太网),连接到一群计算机上。NAS是部件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。DAS(DirectAttachedStorage-直接附加存储)是指将存储设备通过SCSI接口或光纤通道直接连接到一台计算机上。DAS产品包括存储器件和集成在一起的简易服务器,可用于实现涉及文件存取及管理的所有功能。SAN(StorageAreaNetwork-存储局域网络)通过光纤通道连接到一群计算机上。在该网络中提供了多主机连接,但并非通过标准的网络拓扑。SAN专注于企业级存储的特有问题,主要用于存储量大的工作环境。2023/2/552023/2/562023/2/57实例分析

——开源分布式块存储sheepdog开源的分布式块存储:2009年由日本NTT实验室MORITAKAZUTAKA创建的专为虚拟机(QEMU/KVM虚拟机)提供块存储,但并不完全拘泥于虚拟机,可提供一个虚拟的块设备无单节点失效:如果一个节点失败,其数据可由其他节点得到。低运维开销:零配置;对内核文件系统无特性假设;节点变化无须人工参与即可恢复;数据动态均衡负载;支持虚拟机的热迁移、镜像快照、模版&克隆、集群快照;计算节点和数据节点混合模式线性扩展,支持上千级别节点2023/2/58Sheepdogcluster2023/2/59整体架构2023/2/5102023/2/511整体架构Sheepdog是一个分布式存储系统,它为sheepdog客户端(QEMU块设备驱动)提供一个objectstorage(对象存储),(类似于简单的key-value接口)。objectstorage:sheepdog并不是一般通用的文件系统。Sheepdog守护线程(sheep)为QEMU创建一个分布式的对象存储系统。对象可以存放在存储系统中。对象是大小可伸缩的,并且有一个全局唯一标识。我们通过指定对象标识来进行读写删除等操作。对象存储包括gateway和对象管理。Gateway:gateway接受QEMU发送来的I/O请求(objectid,offset,length,operationtype),并根据一致性哈希算法来计算目标节点,然后将请求发送至目标节点。Objectmanager:objectmanager接受到gateway发送来的I/O请求,并对它的磁盘上进行读写操作。Clustermanager:它管理nodemembership(节点之间的关系)例如,检测失败或添加的节点和通知节点的变化,并且管理一些保持节点一致性的操作,例如vdi创建以及快照等。目前我们采用corosyncclusterengine作为clustermanager。QEMUblockdriver:它将一个VM镜像分成固定大小的object(4MB)并通过gateway将它们存放在objectstorage。2023/2/512节点内部2023/2/513ObjectStorage每个对象都有一个全局唯一的64位标识,对象可以存在多个节点上。QEMUblockdriver并不关心对象的存储位置。对象存储系统负责管理对象的存储位置。Object类型:dataobject、vdiobject(虚拟盘镜像)、vmstateobject(运行的虚拟机的虚拟机状态镜像,用来做快照)、vdiattrobject(每个虚拟盘的属性,属性为key-value风格,类似于常用文件系统的扩展属性)ObjectID规范: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系统的实现。2023/2/516GatewayWheretostoreobjects

consistenthashing:增删节点不会对对象映射产生改变;I/O负载平衡Replication写冲突WriteI/Oflow

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

对象一致性:节点失效造成副本不一致。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操作(克隆、创建VDI)必须唯一的执行,因为这些操作更新全局信息。Corosyncclusterengine2023/2/519QEMUBlockDriverSheepdog卷被分成4MB的dataobjects。只有被写过的才分配。Open:QEMU块设备驱动通过gateway读一个vdi对象bdrv_open()Read/wrte:根据请求扇区的偏移和大小计算dataobjectid,然后将请求发送到gateway。如果块设备驱动发送写请求至某个不属于当前VDI的数据对象,则块设备驱动发送Cow请求来分配一个新的数据对象写快照vdi:对QEMU附加一个快照VDI,当块设备驱动第一次将写请求发送到块设备vdi时,则块设备驱动创建一个写的writeableVDI作为快照的孩子,然后发送请求到这个新的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的节点信息表(IPaddress,portnumber,thenumberofvirtualnodes)Recoveryprocess1.ReceiveallstoredobjectIDsfromallnodes2.Calculatewhichobjectstohave3.CreatetheobjectIDslistfile"/store_dir/obj/[thecurrentepoch]/list"4.SendareadrequeststogetobjectswhoseIDisinthelistfile.Therequestsaresenttothenodewhichhadtheobjectatthepreviousepoch.5.Storetheobjecttothecurrentepochdirectory2023/2/522ProtocolSheepdog请求头包含固定大小的header(48位)和可变的数据段。Header包括协议版本,操作代码,epoch号,数据长度等。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线程模型两种上下文主线程上下文

接收请求,唤醒处理函数

group_handler(),处理节点变化和广播消息

client_handler(),处理IO和数据恢复、迁移等请求

工作线程上下文

12个,其中4个专门处理IO请求,4个专门处理gateway请求2023/2/527逻辑处理模型两种上下文,主线程同工作线程无竞争的全局变量将请求处理逻辑中需要串行化的逻辑放到主线程中,可以并行的逻辑放到工作线程中

多线程、无锁的节点变化处理逻辑、数据恢复、迁移逻辑

复杂的分布式算法简单化,根除死锁的可能性

容易检验算法的正确性2023/2/528节点管理Sheepdog只提供节点变化后的处理机制

节点变化的检测依赖外部实现

消息机制依赖外部实现

节点变化消息

节点广播消息支持两种模型

全对称(依赖corosync,运行于sheepdog的地址空间)

缺点:规模小<100

优点:无需配置

单独的控制集群(依赖Accord*或者Zookeeper,运行于独立的地址空间)

缺点:需要配置控制集群

优点:规模大>10002023/2/529节点变化的处理节点加入时,内部逻辑需要一个特殊的master节点来处理新节点是否可以加入

集群主动或被动关闭后,重新启动集群,也是节点变化的处理过程每个节点都有一致的成员视图目前可以处理多个节点同时离开或者加入的事件(比如同时有A,B加入,C离开)2023/2/530节点加入节点加入

分成两个阶段

1.新加入的节点发送加入请求

2.master节点检查系统状态,核查能否加入,如果能,则广播一个新的视图,各个节点更新视图和状态3.新节点加入时,在节点1和2之间master节点离开,mastership自动转移,不会影响系统运行

新的master节点继续检查状态以及广播视图2023/2/531节点离开节点离开

外部的节点检测机制发送成员变化视图

各个节点更新视图和状态当多个节点变化事件发生时,外部检测机制确保离开和加入的消息的顺序一致

剩下的节点和新加入的节点看见一致的视图

比如集群有(A,B,C,D)四个节点,E在加入的同时D因事故离开,则(A,B,C,E)四个节点都将看到最终如下的视图

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

产生一个还是多个视图变化消息跟外部检测机制相关2023/2/532虚拟节点与一致性哈希Sheepdog采用虚拟节点和一致性哈希存储块对象

节点和数据都放到哈希环上

一个物理节点分散成多个节点均匀到环上2023/2/533节点变化的影响节点加入,数据需要重新均衡

-虚拟节点和一致性哈希算法保证

数据均匀分布在各个物理节点

很大程度上减少数据迁移节点离开,数据拷贝需要恢复,保证数据冗余度

-通过节点变化的历史信息恢复数据2023/2/534数据管理虚拟机镜像被切分为4M大小的对象对象稀疏存储每个对象由唯一的64位数字索引每个对象有多个拷贝负值到节点上2023/2/535数据的读写由于一个镜像只有一个虚拟机操作,所以更新拷贝时可以并行执行写操作读一个对象,可以从任何一个拷贝中返回2023/2/536拷贝修复分布式系统中,拷贝的修复通常有两种

急修复:收到节点离开消息,立即进行修复

优点:简单

缺点:当离开的节点回来之后,造成带宽的浪费

懒修复:

优点:能区分节点的临时错误和永久错误,减少带宽的浪费

缺点:增加算法逻辑复杂度

-如何处理关于临时离开节点的数据请求2023/2/537拷贝修复逻辑对象的时间轨迹

-用epoch来记录每个发生节点变化的新视图

-通过epoch来区分不同时间的数据对象

-每个对象都有一个以epoch为点的时间轨迹

init:(A,B,C),3个拷贝

2023/2/538Sheepdog面临的主要问题多个节点变化:

节点加入时,有其他节点当掉

扩容,缩容等数据平衡,节点存储权重:

虚拟节点和一致性哈希减少恢复时间和数据迁移节点变化时对虚拟机IO的影响

本地缓存模式,几乎无影响

无本地缓存,需要等待对象恢复大规模节点的扩展性

目标是上几千节点的规模内部算法的扩展性专门的节点控制集群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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论