本发明实施例涉及云存储
技术领域:
,尤其涉及基于云存储的多节点混合块缓存数据读写方法及系统。
背景技术:
:云计算是一种利用虚拟化技术,通过互联网向用户提供可动态扩展共享软硬件资源的服务。云计算的动态、弹性等特性使得用户能够按需使用并按使用资源数量付费,用户可以依据当前服务的负载情况,动态调整资源使用量,以减少资源浪费。云存储系统是云计算系统的一个重要组成部分。从技术的角度说,云存储系统实际上就是一个大型的分布式的网络存储系统,它是一种特殊的共享存储。实际使用的云存储系统主要可以分为对象存储和块存储两类。其中块存储(Cinder)主要用于向虚拟机实例提供扩展的磁盘存储空间,并具有持久化的数据存储特性,其后端可通过drivers支持多种存储,如Ceph、NetApp、OceanStor、Nexenta、SolidFire以及Zadara等。现今的云计算系统往往拥有多个大型数据中心,均有各自的块级别云存储子系统,并分布于多地。由于两个数据中心之间的网络带宽限制,当虚拟机实例与云存储子系统处在不同数据中心时,将严重影响存储系统的I/O性能,影响虚拟机实例的稳定运行,最终影响虚拟机实例的稳定高效运行。技术实现要素:本发明实施例提供基于云存储的多节点混合块缓存数据读写方法及系统,以提高缓存数据读写的效率。一方面,本发明实施例提供了一种基于云存储的多节点混合块缓存数据读写方法,包括:任一缓存客户端接收虚拟磁盘设备发出的通用块层读写请求,其中虚拟磁盘设备由该缓存客户端的本地缓存磁盘、与该缓存客户端位于同一局域网内的其它缓存客户端和元数据服务器端的源存储磁盘映射得到,所述通用层读写请求中包含读写磁盘起始扇区位置;该缓存客户端采用预定义的缓存策略将所述通用块层读写请求转发到相应物理磁盘设备进行处理。另一方面,本发明实施例还提供了基于云存储的多节点混合块缓存数据读写系统,包括元数据服务器端和多个位于同一局域网内的缓存客户端;缓存客户端用于接收虚拟磁盘设备发出的通用块层读写请求,并采用预定义的缓存策略将所述通用块层读写请求转发到相应物理磁盘设备进行处理,所述通用层读写请求中包含读写磁盘起始扇区位置;其中虚拟磁盘设备由该缓存客户端的本地缓存磁盘、与该缓存客户端位于同一局域网内的其它缓存客户端和元数据服务器端的源存储磁盘映射得到,所述通用层读写请求中包含读写磁盘起始扇区位置。本发明实施例提供的技术方案,针对网络带宽对分布式云存储产生的数据读写这一瓶颈问题,提出在局域网模式上,采用多节点混合块缓冲数据读写的方法,实现对块级别云存储的读写性能的改进,最终实现云存储I/O性能的总体提升,保证整个云存储系统的稳定、安全运行。附图说明图1为本发明实施例一中提供的一种基于云存储的多节点混合块缓存数据读写方法的流程图;图2为本发明实施例中提供的基于云存储的多节点混合块缓存数据读写系统的框架图;图3为本发明实施例中提供的元数据服务器端的结构图;图4为本发明实施例中提供的缓存客户端的结构图;图5为本发明实施例中提供的缓存写入策略示意图;图6为本发明实施例中提供的测试环境拓扑图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。图1为本发明实施例中提供的一种基于云存储的多节点混合块缓存数据读写方法的流程图。本实施例的方法可以由基于云存储的多节点混合块缓存数据读写系统执行。参考图1,该基于云存储的多节点混合块缓存数据读写方法具体可以包括如下:步骤11、任一缓存客户端接收虚拟磁盘设备发出的通用块层读写请求。其中,虚拟磁盘设备由该缓存客户端的本地缓存磁盘、与该缓存客户端位于同一局域网内的其它缓存客户端和元数据服务器端的源存储磁盘映射得到,所述通用层读写请求中包含读写磁盘起始扇区位置。参考图2,该缓存系统可以包括一个元数据服务器端以及多个位于同一局域网内的缓存客户端。元数据服务器端内的源存储磁盘由外部网络通过iSCSI(InternetSmallComputerSystemInterface,小型计算机系统接口)协议连接到局域网内所有缓存客户端,供所有缓存客户端共享使用。各缓存客户端的本地缓存磁盘同样通过iSCSI协议连接到其它缓存客户端,供其它缓存客户端对远端缓存数据进行读写。并且,各缓存客户端使用缓存客户端程序将本地缓存磁盘、多个远端缓存磁盘(即局域网中的其它缓存客户端节点,可以是一个服务器或多个磁盘阵列)以及源存储磁盘映射成为一个带有缓存功能的虚拟磁盘设备。此虚拟磁盘设备与源存储磁盘拥有相同容量,用户使用虚拟磁盘设备替代源存储磁盘。缓存客户端程序将该虚拟磁盘设备的块I/O转发,由相应缓存磁盘或源存储磁盘进行处理,实现缓存功能。参考图3,元数据服务器端主要为各缓存客户端提供所有缓存客户端节点的缓存命中情况查询功能,通过同步请求实现与各缓存客户端的元数据同步。而缓存客户端则负责实现实际的缓存功能通过预定义的缓存策略及与元数据服务器端通信实现缓存功能。元数据服务器端负责集中处理各缓存客户端的元数据并提供缓存命中查询服务。元数据服务器端的实现主要包括三个步骤:第一、初始化配置。元数据服务器端在初始化时记录各缓存客户端的缓存块大小、缓存块数量、缓存写入策略等缓存参数,以及各缓存客户端节点编号、IP地址等配置信息。第二、元数据同步。存储各缓存客户端节点中与缓存命中查询相关的部分元数据(包括各缓存块的状态信息、缓存块对应的源存储磁盘起始扇区信息等),元数据服务器端通过接收各缓存客户端的元数据同步请求,进行服务器端的元数据更新操作。第三,缓存命中查询。元数据服务器向各缓存客户端提供缓存命中查询服务,接收缓存客户端的查询请求(包括缓存块的起始扇区信息等)并返回查询结果(缓存块所在的客户端编号、状态信息等)。缓存的元数据服务器端与客户端的元数据同步以及缓存命中查询均通过UDP(UserDatagramProtocol,用户数据报协议)通信协议实现。参考图4,缓存客户端负责实际缓存功能,根据预设的缓存策略进行缓存操作。缓存客户端的实现主要包括三部分:第一,初始化配置。与元数据服务器相同,缓存客户端首先在初始化时记录缓存块大小、缓存块数量、缓存写入策略等缓存参数,以及各缓存客户端节点编号和对应远端缓存磁盘设备信息。第二,元数据同步。各缓存客户端将各自的本地缓存元数据信息放入内核内存中,并将缓存命中查询相关的部分元数据同步至元数据服务器端。缓存客户端在本地缓存元数据发生变更后,立即向元数据服务器端发送元数据同步信息。各缓存客户端同时接收并处理元数据服务器端对本地缓存元数据的修改请求。第三,缓存实现。为实现缓存功能,各缓存客户端利用LinuxDeviceMapper机制,将本地缓存磁盘、多个远端缓存磁盘及源存储磁盘映射为一个带缓存功能的虚拟磁盘设备。对于此虚拟磁盘设备的块I/O,缓存客户端查询本地及远端缓存元数据,并根据预定义的缓存策略,将虚拟磁盘设备发出的通用块层bio(块设备的io请求)转发到相应物理磁盘设备进行处理。针对缓存功能的实现还包括以下五个要点:(1)实际缓存数据存放于各缓存客户端节点的缓存磁盘中,缓存数据按照初始化配置的缓存块大小组织成块,且各缓存数据块在所有缓存客户端节点中只保存一份。(2)对于缓存块与数据块间的映射,采用组相联方式,通过hash方法实现源存储磁盘的数据块与缓存磁盘的缓存块的映射。(3)在缓存块的替换策略方面,使用LRU策略。(4)由于缓存磁盘分布于局域网内的多个缓存客户端节点,因此各节点的本地缓存磁盘与远端缓存磁盘存在性能差异。根据缓存映射规则,缓存客户端会优先使用性能较好的本地缓存磁盘。(5)缓存客户端通过内核模块形式实现,因此用户可根据需求动态的将缓存模块插入Linux内核或从内核移除。客户与服务端通信实现如下:元数据服务器端与各缓存客户端的数据通信包括两部分:元数据同步及缓存命中查询。元数据同步部分包括元数据服务器端的元数据更新以及缓存客户端的元数据更新。其中,元数据服务器端的元数据更新请求由缓存客户端发起。当缓存客户端的缓存元数据变更时触发,将元数据变更缓存块的对应源存储磁盘起始扇区、缓存块编号、缓存块状态信息以及发送更新请求的缓存客户端节点编号信息发送至元数据服务器端进行元数据更新。而缓存客户端的元数据更新请求由元数据服务器端发起,且仅在进行写入操作时产生。当缓存命中查询导致缓存元数据变更时,触发此更新请求,将元数据变更缓存块编号及缓存块状态信息发送至对应缓存客户端进行元数据更新。缓存客户端同样回应更新请求编号确认。缓存命中查询部分则包括缓存块查询请求及其回应。缓存块查询请求由缓存客户端发起。当缓存本地未命中时触发此请求,发送缓存块对应的源存储磁盘起始扇区及I/O读写方向至元数据服务器端,并等待查询请求回应。具体的,任一缓存客户端接收虚拟磁盘设备发出的通用块层读写请求(bio请求),该bio结构中包含读写磁盘起始扇区位置。步骤12、该缓存客户端采用预定义的缓存策略将所述通用块层读写请求转发到相应物理磁盘设备进行处理。其中,预定义的缓存策略主要可以包括缓存块映射策略、缓存写入策略以及缓存块替换策略。其中,缓存写入策略以及缓存块映射策略的相联度(assoc)均可在缓存系统初始化时由用户自定义,此外用户还可以对缓存系统的缓存块大小、缓存块数量以及缓存客户端IP等参数进行设定。具体的,该缓存客户端采用缓存块映射策略,依据读写磁盘起始扇区位置确定通用块层读写请求的相应物理磁盘设备,且相应物理磁盘设备采用缓存写入策略进行读写处理。针对写入操作,主要提供写直达以及写回两种写入策略,写直达策略偏向于数据安全,而写回策略则更偏向于写入性能,用户可以根据需求来设置缓存的写入策略。参考图5,当使用写直达策略时,所有块I/O数据均直接写入远端的源存储磁盘,并不缓存到缓存磁盘。若写入的数据已在本地或远端缓存磁盘缓存,则需将对应缓存块状态设置为无效。此写入策略能够保证缓存磁盘与源存储磁盘之间的数据一致性,在缓存客户端节点出现问题而导致缓存数据丢失的情况下,仍能够保证数据的安全性。参考图5,使用写回策略时,所有块I/O数据均直接写入本地缓存磁盘或远端缓存磁盘,所有缓存数据将被延迟写回源存储磁盘。那些延迟写回操作将在缓存块发生替换时发生,或在缓存磁盘使用完毕进行卸载时,由缓存客户端程序进行冲洗操作,统一将所有脏缓存块中的数据写回远端的源存储磁盘。当然,缓存冲洗操作会对相应缓存客户端节点的性能产生一定影响。使用写回策略在理论上能够提升数据写入速度,并降低远端网络存储系统的负载压力。但使用写回策略同时也存在风险,当缓存客户端节点出现故障时,将出现缓存数据丢失的情况。对于缓存块与数据块间的映射,系统采用组相联的方式。根据预定义的缓存相联度,将每缓存相联度个缓存块组合成为一个缓存组,通过hash(哈希)方法实现源存储磁盘的数据块与缓存磁盘的缓存块的映射。示例性的,步骤12可以包括:A、该缓存客户端依据读写磁盘起始扇区位置、预设的缓存块掩码以及缓存相联度,确定目标缓存块。进一步的,步骤A具体可以包括:A1、该缓存客户端依据读写磁盘起始扇区位置和预设的缓存块掩码,得到读写请求数据对应数据块在源存储磁盘中的起始扇区位置。具体的,该缓存客户端针对来自上层文件系统或VFS(virtualFileSystem,虚拟文件系统)层的通用块层bio请求,根据bio结构中的读写磁盘起始扇区位置bi_sector,首先与预设的缓存块掩码block_mask进行按位与操作得出读写磁盘起始扇区位置bi_sector在对应数据块内的偏移量offset,然后将bi_sector减去偏移量offset得出数据块在源存储磁盘设备中起始扇区request_block。A2、该缓存客户端依据所述数据块在源存储磁盘中的起始扇区位置,计算所述数据块对应缓存组号。具体的,该缓存客户端依据起始扇区位置request_block,利用hash_block函数首先计算数据库编号,然后与缓存相联度assoc相除得出缓存组号set_number。A3、该缓存客户端依据所述数据块对应缓存组号以及缓存相联度,确定所述缓存组的起始缓存块编号。具体的,该缓存客户端将数据块对应缓存组号set_number与缓存相联度assoc相乘得出该缓存组的起始缓存块编号index。A4、该缓存客户端依据所述起始缓存块编号和所述缓存相联度确定目标缓存块。具体的,该缓存客户端将起始缓存块编号index至index+assoc的缓存块确定为目标缓存块。B、该缓存客户端通过本地缓存磁盘的元数据或元数据服务器端对目标缓存块进行缓存命中查询,确定所述通用块层读写请求的相应物理磁盘。具体的,缓存客户端通过本地缓存磁盘的元数据对目标缓存块进行命中查询,以确定通用块层读写请求的相应物理磁盘是否为本地缓存磁盘;缓存客户端通过元数据服务器端对目标缓存块进行缓存命中查询,以确定通用块层读写请求的相应物理磁盘是否为其他缓存客户端或源存储磁盘。使用缓存块元数据structcacheblock进行查找,搜索缓存块编号index至index+assoc的元数据cacheblock项。查找所有cacheblock中,缓存块状态为VALID、DIRTY、RESERVED或WRITEBACK(状态为保留或写回则说明此缓存块正在进行缓存写入或缓存写回操作,当前的bio请求将被放入cacheblock的bios列表中延迟处理)且缓存块对应数据块的扇区起始位置block与request_block相等。若找到cacheblock项,则缓存命中;若未找到,则缓存未命中。C、将所述通用块层读写请求转发到相应物理磁盘设备进行处理。示例性的,该缓存客户端通过元数据服务器端对目标缓存块进行缓存命中查询,确定所述通用块层读写请求的相应物理磁盘,包括:该缓存客户端向元数据服务器端发送包含目标缓存块的缓存命中查询请求;元数据服务器端确定并向该缓存客户端返回目标缓存块所在缓存客户端编号和目标缓存块的状态信息;该缓存块客户端依据元数据服务器端返回的目标缓存块所在的缓存客户端编号和目标缓存块的状态信息,确定所述通用块层读写请求的相应物理磁盘。示例性的,元数据服务器端确定并向该缓存客户端返回目标缓存块所在的缓存客户端编号和目标缓存块的状态信息,包括:元数据服务器端依据预先同步的元数据确定目标缓存块的状态信息;元数据服务器端依据初始化配置信息确定目标缓存块所在的缓存客户端编号;元数据服务器端将目标缓存块的状态信息和目标缓存块所在的缓存客户端编号返回给该缓存客户端。示例性的,上述方法还可以包括:在任一缓存客户端的本地缓存元数据更新时,向元数据服务端发送元数据同步请求,以将更新内容同步到元数据服务端中。具体的,各缓存客户端将各自的本地缓存元数据信息放入内核内存中,并将缓存命中查询相关的部分元数据同步至元数据服务器端。缓存客户端在本地缓存元数据发生变更后,立即向元数据服务器端发送元数据同步信息。示例性的,上述方法还可以包括:在任一缓存客户端检测到缓存块替换指令,且没有处于无效状态的缓存块时,则采用LRU(LeastRecentlyUsed,近期最少使用)算法策略选择待替换的缓存块。具体的,在缓存块的替换策略方面,使用LRU策略。保存每个缓存块的访问时间戳,以及整个本地缓存最新时间戳。其中各缓存块的访问时间戳存放于对应元数据structcacheblock结构中的counter项,而整个本地缓存最新时间戳存放于缓存信息structcache_c结构中的counter项。当缓存块被访问时,将整个本地缓存最新时间戳值加1并赋值于缓存块的访问时间戳,当整个本地缓存最新时间戳超过counter变量最大限制时将所有counter置0。缓存块发生替换时,优先选择状态为无效的缓存块,若缓存已满则通过比较各缓存块的访问时间戳选择最久未使用的缓存块进行替换。本发明实施例针对网络带宽对分布式云存储产生的数据读写这一瓶颈问题,提出在局域网模式上,采用多节点混合块缓冲数据读写的方法,实现对块级别云存储的读写性能的改进,最终实现云存储I/O性能的总体提升,保证整个云存储系统的稳定、安全运行。具体的,针对企事业园区中的云计算系统中多虚拟机实例共享使用同一块级别网络存储卷,且虚拟机实例与块级别云存储子系统处于不同数据中心而导致网络存储卷I/O性能较差的情况,设计一种基于LinuxDeviceMapper机进行物理磁盘设备映射的多节点的块级别网络缓存系统,利用本地局域网相对于外部网络的带宽优势,通过局域网内的缓存数据共享实现外部网络存储的性能提升。本发明实施例还提供了一种基于云存储的多节点混合块缓存数据读写系统。该系统包括元数据服务器端和多个位于同一局域网内的缓存客户端;缓存客户端用于接收虚拟磁盘设备发出的通用块层读写请求,并采用预定义的缓存策略将所述通用块层读写请求转发到相应物理磁盘设备进行处理,所述通用层读写请求中包含读写磁盘起始扇区位置;其中虚拟磁盘设备由该缓存客户端的本地缓存磁盘、与该缓存客户端位于同一局域网内的其它缓存客户端和元数据服务器端的源存储磁盘映射得到,所述通用层读写请求中包含读写磁盘起始扇区位置。示例性的,缓存客户端具体用于:依据读写磁盘起始扇区位置bi_sector、预设的缓存块掩码block_mask以及缓存相联度accoc,确定目标缓存块;通过本地缓存磁盘的元数据或元数据服务器端对目标缓存块进行缓存命中查询,确定所述通用块层读写请求的相应物理磁盘;将所述通用块层读写请求转发到相应物理磁盘设备进行处理。示例性的,缓存客户端具体用于:依据读写磁盘起始扇区位置bi_sector和预设的缓存块掩码block_mask,得到读写请求数据对应数据块在源存储磁盘中的起始扇区位置request_block;依据所述数据块在源存储磁盘中的起始扇区位置request_block,计算所述数据块对应缓存组号set_number;依据所述数据块对应缓存组号set_number以及缓存相联度accoc,确定所述缓存组的起始缓存块编号index;依据所述起始缓存块编号index和所述缓存相联度accoc确定目标缓存块。示例性的,缓存客户端用于向元数据服务器端发送包含目标缓存块的缓存命中查询请求;元数据服务器端用于确定并向该缓存客户端返回目标缓存块所在缓存客户端编号和目标缓存块的状态信息;该缓存块客户端用于依据元数据服务器端返回的目标缓存块所在的缓存客户端编号和目标缓存块的状态信息,确定所述通用块层读写请求的相应物理磁盘。示例性的,元数据服务器端具体用于:依据预先同步的元数据确定目标缓存块的状态信息;依据初始化配置信息确定目标缓存块所在的缓存客户端编号;将目标缓存块的状态信息和目标缓存块所在的缓存客户端编号返回给该缓存客户端。示例性的,所述缓存客户端还用于:在本地缓存元数据更新时,向元数据服务端发送元数据同步请求,以将更新内容同步到元数据服务端中。示例性的,所述缓存客户端还用于:在检测到缓存块替换指令,且没有处于无效状态的缓存块时,则采用LRU策略选择待替换的缓存块。为了验证本专利所提出的特征模型,我们做了大量的实验,这些实验主要是在局域网模式下云存储服务器上进行了较长时间的网络数据操作与传输。通过对实验结果分析,证明了该模型的有效性及稳定性。实验相关信息如下:1)硬件环境本发明云存储测试平台如下:普通存储服务器测试平台如下:2)软件环境名称操作系统软件功能存储服务器CentOS6.2X86_64存储服务器模块数据存储数据服务器CentOS6.2X86_64元数据模块数据管理应用服务器Windows7应用服务器模块测试方法:图6为本发明实施例中提供的测试环境拓扑图。参考图6,在所有应用服务器上运行预置的iozone脚本,iozone测试命令行参数举例(脚本为:iozone1.bat):iozone.exe-s30g-t12-Ff:\f1f:\f2f:\f3f:\f4f:\f5f:\f6f:\f7f:\f8f:\f9f:\f10-c-C-w-e-r1m-+n-+k-i0-i1>>iozone_1_64k.log测试分为2个过程:1)采用普通存储服务器进行数据读写,通过IOZONE进行持续数据写入,写入节点为10个客户端,每个客户端同时写入10个文件,每个文件10G(每个客户端写入100G文件),查看写入数据花费的时间。2)采用本发明数据云存储架构进行数据读写,通过IOZONE进行持续数据写入,写入节点为10个客户端,每个客户端同时写入10个文件,每个文件10G(每个客户端写入100G文件),查看写入数据花费的时间。经测试发现,采用普通存储服务器进行数据读写时,10个客户端的网络带宽分别是17379KB/s、19190KB/s、17270KB/s、21826KB/s、17028KB/s、25977KB/s、22274KB/s、16661KB/s、16818KB/s和16818KB/s。普通缓存系统中每一个客户端存储数据的平均网络传输速度为1974KB/S。采用本发明缓存系统进行数据读写时,10个客户端的网络带宽分别是74729KB/s、75146KB/s、74663KB/s、74286KB/s、74364KB/s、74637KB/s、74947KB/s、74558KB/s、75325KB/s和75325KB/s。因此,本发明缓存系统内每一个客户端到云存储的平均网络传输速度为7671KB/S,4个节点云存储最大可提供767MB/s的网络聚合带宽。因此,该方法在局域网内对云存储的数据读写确实有较大的改进,达到了预期的目的。注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页1 2 3