您好,欢迎访问三七文档
分布式块存储介绍2020/3/101分布式块存储•概念:•采用分布式技术:多存储节点;•操作:块;2020/3/102概念1分布式•分布式系统:硬件或软件组件分布在网络计算机上且通过消息传递进行通信和动作协调的协调。•特征:•并发性•异构性•可伸缩性•透明性2020/3/103概念2块存储•块设备:各类磁盘;•块层:linux•存储虚拟化•RAID•Qemu虚拟盘2020/3/104概念3网络存储•NAS(NetworkAttachedStorage-网络附加存储)•即将存储设备通过标准的网络拓扑结构(例如以太网),连接到一群计算机上。NAS是部件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。•DAS(DirectAttachedStorage-直接附加存储)•是指将存储设备通过SCSI接口或光纤通道直接连接到一台计算机上。DAS产品包括存储器件和集成在一起的简易服务器,可用于实现涉及文件存取及管理的所有功能。•SAN(StorageAreaNetwork-存储局域网络)•通过光纤通道连接到一群计算机上。在该网络中提供了多主机连接,但并非通过标准的网络拓扑。SAN专注于企业级存储的特有问题,主要用于存储量大的工作环境。2020/3/1052020/3/1062020/3/107实例分析——开源分布式块存储sheepdog•开源的分布式块存储:2009年由日本NTT实验室MORITAKAZUTAKA创建的•专为虚拟机(QEMU/KVM虚拟机)提供块存储,但并不完全拘泥于虚拟机,可提供一个虚拟的块设备•无单节点失效:如果一个节点失败,其数据可由其他节点得到。•低运维开销:零配置;对内核文件系统无特性假设;节点变化无须人工参与即可恢复;数据动态均衡负载;支持虚拟机的热迁移、镜像快照、模版&克隆、集群快照;•计算节点和数据节点混合模式•线性扩展,支持上千级别节点2020/3/108Sheepdogcluster2020/3/109整体架构2020/3/10102020/3/1011整体架构•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。2020/3/1012节点内部2020/3/1013ObjectStorage•每个对象都有一个全局唯一的64位标识,对象可以存在多个节点上。QEMUblockdriver并不关心对象的存储位置。对象存储系统负责管理对象的存储位置。•Object类型:dataobject、vdiobject(虚拟盘镜像)、vmstateobject(运行的虚拟机的虚拟机状态镜像,用来做快照)、vdiattrobject(每个虚拟盘的属性,属性为key-value风格,类似于常用文件系统的扩展属性)•ObjectID规范:•0-31(32bits):objecttypespecificspace•32-55(24bits):vdiid对VDI名计算hash值得到•56-59(4bits):reserved•60-63(4bits):objecttypeidentifierobjecttypetheusageoflower32bitsdataobjecttheindexnumberinthevirtualdiskimagevdiobjectnotused(filledwithzero)vmstateobjecttheindexnumberinthevmstateimagevdiattrobjectsthehashvalueofthekeyname2020/3/1014•Object格式:•Dataobject:虚拟盘镜像的chunk•Vdiobject:•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:chunk•Vdiattrobject:ThefirstSD_MAX_VDI_ATTR_KEY_LENbytes(256bytes)isthekeynameofthisattribute.Therestoftheobjectisthevalueofthisattribute.2020/3/1015•Read-only/writableobjects•Writable:只允许一个VM读写此对象而其他VMs不能访问;•Read-onlyobjects:可读但不能写•这是指虚拟机不能同一时间共享同一卷(volume)。这避免了写写冲突,简化了sheepdog系统的实现。2020/3/1016Gateway•Wheretostoreobjects•consistenthashing:增删节点不会对对象映射产生改变;I/O负载平衡•Replication•写冲突•WriteI/Oflow•所有副本必须成功更新•ReadI/Oflow•对象一致性:节点失效造成副本不一致。•RetryingI/Orequests•epoch:历史版本号2020/3/1017Objectmanager•Pathnamerule:•存放路径•/store_dir/obj/[epochnumber]/[objectID]•Writejournaling写日志•如果sheep守护线程在写操作的时候失败,则只有部分对象会更新。•1.createajournalfile/store_dir/journal/[epoch]/[vdiobjectid]•2.writeadatatothejournalfilefirst•3.writeadatatothevdiobject•4.removethejournalfile2020/3/1018Clustermanager•一般sheepdog客户端独立访问他们的镜像。而且一些VDI操作(克隆、创建VDI)必须唯一的执行,因为这些操作更新全局信息。•Corosyncclusterengine2020/3/1019QEMUBlockDriver•Sheepdog卷被分成4MB的dataobjects。只有被写过的才分配。•Open:QEMU块设备驱动通过gateway读一个vdi对象bdrv_open()•Read/wrte:根据请求扇区的偏移和大小计算dataobjectid,然后将请求发送到gateway。如果块设备驱动发送写请求至某个不属于当前VDI的数据对象,则块设备驱动发送Cow请求来分配一个新的数据对象•写快照vdi:对QEMU附加一个快照VDI,当块设备驱动第一次将写请求发送到块设备vdi时,则块设备驱动创建一个写的writeableVDI作为快照的孩子,然后发送请求到这个新的VDI。2020/3/1020VDI操作•Lookup•calculateavdiidfromthehashvalueofthevdiname•calculateavdiobjectidfromthevdiid•sendareadrequesttothevdiobject•ifthevdiisnottherequestedone,incrementthevdiidandretrytosendareadrequest•快照和克隆•1.readatargetVDI•2.createanewVDIwhichhasthesamecontentasthetargetobjectVDI•3.setthe''parent_vdi_id''ofthenewVDItothetargetVDIid•4.setthe''child_vdi_id''ofthetargetVDItothenewVDIid•5.setthe''snap_ctime''ofthetargetVDItothecurrenttimethen,thenewvdibecomesthecurrentvdiobject.•Delete•reclaimingofunuseddataobjectsisnotinvokeduntilallrelevantVDIobjects(allrelativesnapshotVDIsandclonedVDIs)aredeleted。•AfterallrelevantVDIsaredeleted,SheepdogdeletesalldataobjectsoftheVDIs,andsetthenullstringtothenameofthevdiobjects.2020/3/1021Objectrecovery•Epoch:nodemembership的历史信息,路径为•/store_dir/epoch/[epochnumber]•每个文件包含此epoch的节点信息表(IPaddress,portnumber,thenumberofvirtualnodes)•Recoveryprocess•1.ReceiveallstoredobjectIDsfromallnodes•2.Calculatewhichob
本文标题:分布式块存储介绍
链接地址:https://www.777doc.com/doc-4290653 .html