数据存储方法、设备和系统的制作方法

文档序号:7566883阅读:103来源:国知局
专利名称:数据存储方法、设备和系统的制作方法
技术领域
本发明实施例涉及通信技术领域,尤其涉及一种数据存储方法、设备和系统。
背景技术
网络块设备(Network Block Device ;以下简称NBD),是通过传输控制协议 (Transmission Control Protocol ;以下简称TCP)/ 因特网协议(InternetProtocol ;以 下简称IP)网络把服务器上的文件或块设备抽象出来供客户端使用的技术。与之对应的 软件是一种基于Linux的网络存储软件,利用这一软件可以构建基于Linux的网络存储系 统。作为一套存储系统,尤其是用于商业解决方案,存储系统非常复杂,对性能和可靠性的 要求都很高。但是,现有的NBD只是完成普通的网络传输,缺少对网络异常和存储节点异常 的考虑。举例来说,在本地服务器A上布署NBD客户端(NBD Client),并虚拟一个NBD设 备nbdl,在远程服务器B上布署NBD服务器(NBD Server)。创建于nbdl上的虚拟机处于 运行状态,但是由于网络异常或者存储节点发生异常,无法从NBD服务器读取数据,造成虚 拟机停机。为解决上述可靠性问题,现有技术提出独立磁盘冗余阵列KRedimdantArray of Independent Disks 1 ;以下简称RAID1)方案,即由底层的单个存储节点上的多个硬盘组 成RAIDl,供NBD服务器使用。但是,发明人发现上述RAIDl方案至少存在以下缺点(I)RAIDl方案不能跨节点存储,只能降低单节点发生故障的概率,如果RAID卡出 现故障,则上层业务程序不可用;(2)无法解决网络异常引起的业务不可用问题;(3)对于存储节点来说,经过RAID卡之后数据量增倍,大大增加了存储节点的负 荷。为解决上述可靠性问题,现有技术还提供另外一种方案,即主卷和备份卷方案,具 体地,上层业务程序写输入(Input ;以下简称1)/输出(Output ;以下简称0)时,先向主 卷写数据,然后由主卷将数据传到备份卷,备份卷写完后再向主卷报告写1/0结果,最后由 主卷向上层业务程序报告写1/0结果。主卷和备份卷方案在物理上将主备分开了,与RAIDl方案相比,单节点故障时数 据不会损坏,进一步提高了可靠性。但发明人发现主卷和备份卷方案仍然存在以下缺点(1)备份卷只是用来备份数据,在系统运行过程中,所有的负荷都在主卷,也就是 说主卷所在的节点会成为1/0瓶颈;(2) 一次1/0要交互4条消息,消息流量较大。

发明内容
本发明实施例提供一种数据存储方法、设备和系统,以提高存储可靠性,降低消息流量。本发明实施例提供一种数据存储方法,包括通过主卷与虚拟块存储客户端之间的套接字连接接收待写入数据;将所述待写入数据写入所述主卷的卷文件,并将所述待写入数据通过所述主卷与 备份卷之间的套接字连接发送给所述备份卷,以便所述备份卷在将所述待写入数据写入所 述备份卷的卷文件之后,向所述虚拟块存储客户端的内核上报写入操作的结果。本发明实施例还提供一种主卷节点设备,包括接收模块,用于通过所述主卷节点设备与虚拟块存储客户端之间的套接字连接接 收待写入数据;写入模块,用于将所述接收模块接收的待写入数据写入所述主卷节点设备的卷文 件,并将所述待写入数据通过所述主卷节点设备与备份卷节点设备之间的套接字连接发送 给所述备份卷节点设备,以便所述备份卷节点设备在将所述待写入数据写入所述备份卷节 点设备的卷文件之后,向所述虚拟块存储客户端的内核上报写入操作的结果。本发明实施例还提供一种虚拟块存储客户端设备,包括连接建立模块,用于根据预先指定的备份卷的监听端口与所述预先指定的备份卷 建立套接字连接,以及根据预先指定的主卷的监听端口与所述预先指定的主卷建立套接字 连接;获得模块,用于获得所述预先指定的备份卷的卷大小、检测点和单节点位图,以及 获得所述预先指定的主卷的卷大小、检测点和单节点位图;比较模块,用于比较所述预先指定的主卷和所述预先指定的备份卷的检测点;确定模块,用于根据所述比较模块的比较结果确定最新检测点对应的卷为真正的 主卷,次新检测点对应的卷为真正的备份卷;注册模块,用于向所述虚拟块存储客户端设备的内核注册所述真正的主卷和所述 真正的备份卷的角色,以及当所述真正的主卷与所述真正的备份卷之间的链路正常时,将 所述连接建立模块与所述预先指定的备份卷建立的套接字连接的描述符,以及所述连接建 立模块与所述预先指定的主卷建立的套接字连接的描述符注册到所述虚拟块存储客户端 设备的内核;调用模块,用于调用系统函数进入内核态线程,在所述内核态线程中处理上层业 务程序发送的写操作请求。本发明实施例还提供一种备份卷节点设备,包括数据接收模块,用于接收主卷节点设备通过所述主卷节点设备与备份卷节点设备 之间的套接字连接发送的待写入数据;数据写入模块,用于将所述数据接收模块接收的待写入数据写入所述备份卷节点 设备的卷文件;结果上报模块,用于向虚拟块存储客户端设备的内核上报写入操作的结果。本发明实施例还提供一种存储系统,包括上述主卷节点设备、上述虚拟块存储客 户端设备和上述备份卷节点设备。通过本发明实施例,主卷通过该主卷与虚拟块存储客户端之间的套接字连接接收 到待写入数据之后,将上述待写入数据写入主卷的卷文件,并将上述待写入数据通过主卷与备份卷之间的套接字连接发送给备份卷,以便备份卷将待写入数据写入该备份卷的卷文 件,从而可以提高存储可靠性;在备份卷将待写入数据写入该备份卷的卷文件之后,由备份 卷向虚拟块存储客户端的内核上报写入操作的结果;从而可以降低消息流量,并且可以分 担主卷的部分负荷,达到动态负载均衡的目的。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根 据这些附图获得其他的附图。图1为本发明数据存储方法一个实施例的流程图;图2为本发明网络架构一个实施例的示意图;图3为本发明建立三角模型一个实施例的流程图;图4为本发明数据存储方法另一个实施例的流程图;图5为本发明网络架构另一个实施例的示意图;图6为本发明数据存储方法又一个实施例的流程图;图7为本发明网络架构又一个实施例的示意图;图8为本发明数据存储方法再一个实施例的流程图;图9为本发明网络架构再一个实施例的示意图;图10为本发明主卷节点设备一个实施例的结构示意图;图11为本发明主卷节点设备另一个实施例的结构示意图;图12为本发明虚拟块存储客户端设备一个实施例的结构示意图;图13为本发明虚拟块存储客户端设备另一个实施例的结构示意图;;图14为本发明备份卷节点设备一个实施例的结构示意图;图15为本发明备份卷节点设备另一个实施例的结构示意图;图16为本发明存储系统一个实施例的结构示意图;图17为本发明云存储系统一个实施例的示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明数据存储方法一个实施例的流程图,如图1所示,该数据存储方法可 以包括步骤101,通过主卷与虚拟块存储客户端之间的套接字连接接收待写入数据。步骤102,将上述待写入数据写入该主卷的卷文件,并将上述待写入数据通过主卷 与备份卷之间的套接字连接发送给备份卷,以便备份卷在将待写入数据写入该备份卷的卷 文件之后,向虚拟块存储客户端的内核上报写入操作的结果。
本实施例中,在通过主卷与虚拟块存储客户端之间的套接字连接接收待写入数据 之前,主卷还可以接收虚拟块存储客户端的内核发送的写操作请求,并将该写操作请求转 发给备份卷,该写操作请求用于通知主卷和/或备份卷准备接收待写入数据;上述写操作 请求是虚拟块存储客户端的内核从该内核注册的请求队列中获取的;该内核注册的请求队 列中的写操作请求是虚拟块存储客户端接收到上层业务程序发送的写操作请求之后,放入 该内核注册的请求队列中的。本实施例中,在备份卷向虚拟块存储客户端的内核上报写入操作的结果之后,主 卷可以向备份卷发送检测点记录请求,以使主卷和备份卷更新各自的检测点。另外,在备份卷向虚拟块存储客户端的内核上报写入操作的结果之后,主卷还可 以检查脏数据块列表中是否有脏数据;当该脏数据块列表中有脏数据,且满足预定条件之 后,将上述脏数据写到磁盘中。其中,脏数据为暂时存放在内存缓冲区中,还未写入卷文件 的数据;脏数据块列表用于记录哪些数据是脏数据。进一步地,本实施例中,主卷接收虚拟块存储客户端的内核发送的写操作请求之 前,虚拟块存储客户端可以根据预先指定的备份卷的监听端口与预先指定的备份卷建立套 接字连接,并获得预先指定的备份卷的卷大小、检测点和单节点位图;虚拟块存储客户端可 以根据预先指定的主卷的监听端口与预先指定的主卷建立套接字连接,并获得预先指定的 主卷的卷大小、检测点和单节点位图;然后,虚拟块存储客户端可以比较预先指定的主卷和 预先指定的备份卷的检测点,确定最新检测点对应的卷为真正的主卷,次新检测点对应的 卷为真正的备份卷;之后,虚拟块存储客户端可以向该虚拟块存储客户端的内核注册真正 的主卷和真正的备份卷的角色;当上述真正的主卷与真正的备份卷之间的链路正常时,虚 拟块存储客户端将与预先指定的备份卷建立的套接字连接的描述符,以及与预先指定的主 卷建立的套接字连接的描述符注册到虚拟块存储客户端的内核;接下来,虚拟块存储客户 端可以调用系统函数,例如ioctrl进入内核态线程,在该内核态线程中处理上层业务程 序发送的写操作请求。其中,在虚拟块存储客户端将与预先指定的备份卷建立的套接字连接的描述符, 以及与预先指定的主卷建立的套接字连接的描述符注册到虚拟块存储客户端的内核之前, 当真正的主卷与真正的备份卷之间的链路正常时,如果真正的主卷与真正的备份卷之间的 数据不同步,则虚拟块存储客户端可以向真正的主卷发送数据同步请求,以使真正的主卷 与真正的备份卷进行数据同步。另外,本实施例的一种实现方式中,当主卷发生异常时,在虚拟块存储客户端的内 核进行主备倒换,将备份卷注册为新的主卷之后,该新的主卷可以通过新的主卷与虚拟块 存储客户端之间的套接字连接接收待写入数据,在将该待写入数据写入新的主卷的卷文件 之后,更新新的主卷的检测点和单节点位图;然后,该新的主卷向虚拟块存储客户端的内核 上报写入操作的结果。本实施例的另一种实现方式中,当虚拟块存储客户端与备份卷之间的网络发生异 常时,主卷可以接收虚拟块存储客户端发送的链路异常消息,并将该链路异常消息转发给 备份卷,以使备份卷将写入操作的结果发送给主卷,再由主卷将该写入操作的结果发送给 虚拟块存储客户端的内核;其中,上述链路异常消息由虚拟块存储客户端的心跳进程发送 给虚拟块存储客户端。
本实施例的再一种实现方式中,当主卷和备份卷之间的网络发生异常时,主卷可 以在将待写入数据写入该主卷的卷文件之后,更新主卷的检测点和单节点位图;然后,再由 主卷向虚拟块存储客户端的内核上报写入操作的结果。本实施例中,接收到写入操作的结果之后,虚拟块存储客户端的内核可以先确定 写入操作的结果是否与已发送的写操作请求对应;如果对应,则虚拟块存储客户端的内核 可以将上述写入操作的结果发送给上层业务程序;如果写入操作的结果与已发送的写操作 请求不对应,则虚拟块存储客户端的内核可以丢弃该写入操作的结果,或者缓存但不处理 该写入操作的结果,本发明实施例对此不作限定,但本发明实施例以写入操作的结果与已 发送的写操作请求不对应时,虚拟块存储客户端的内核丢弃该写入操作的结果为例进行说 明。上述实施例中,主卷通过该主卷与虚拟块存储客户端之间的套接字连接接收到待 写入数据之后,将上述待写入数据写入主卷的卷文件,并将上述待写入数据通过主卷与备 份卷之间的套接字连接发送给备份卷,以便备份卷将待写入数据写入该备份卷的卷文件, 从而可以提高存储可靠性;在备份卷将待写入数据写入该备份卷的卷文件之后,由备份卷 向虚拟块存储客户端的内核上报写入操作的结果;从而可以降低消息流量,并且可以分担 主卷的部分负荷,达到动态负载均衡的目的。本发明实施例提供的数据存储方法可以提高存储可靠性,并在保证存储可靠性的 前提下,可以进一步降低消息流量,提高性能。本发明实施例中,可以将主卷和备份卷部署在不同的存储节点上,既可以解决单 存储节点故障引起的业务不可用问题,也可以解决业务与主卷所在存储节点或备份卷所在 存储节点间的网络异常引起的业务不可用问题;另外,在保证单节点故障业务不中断的前 提下,本发明实施例可以将消息流量减少25%,性能上有很大的提高。另外,备份卷在实现 数据备份的同时,参与了业务流程(回应写入操作的结果),可以分担主卷的部分负荷,达 到一个动态负载均衡的目的。本发明实施例采用图2所示的网络架构,图2为本发明网络架构一个实施例的示 意图,如图2所示,该网络架构是一个稳定的三角模型,在该三角模型中,实线代表套接字 (SOCKET)连接,箭头指向服务器侧,虚线为控制消息的流向。本发明实施例中,在处理读操作请求时,备份卷(Backup Volume ;以下简称BV) 不感知,读数据操作和回应都由主卷(Primary Volume ;以下简称PV)负责;在处理写操作 请求时,由PV接收待写入数据,BV回应写入操作的结果。这样,可以将消息量减少25%,从 而达到提高性能的目的。另外,图2所示的网络架构可以有效防止存储节点异常和网络异常,只要不是虚 拟块存储客户端(virtual block storage client ;以下简称vbs-client)、PV 和 BV 中的 任意两个同时发生异常,或者vbs-client与PV之间的链路,以及vbs-client与BV之间的 链路同时发生异常,上层业务程序可以不中断的运行。图3为本发明建立三角模型一个实施例的流程图,如图3所示,图2所示三角模型 的建立流程可以包括步骤301,vbs-client根据预先指定的BV的监听端口与该预先指定的BV建立 SOCKET 连接。
本实施例中,预先指定的BV的监听端口是由预先指定的BV预先对外提供的。步骤302,vbs-client与预先指定的BV进行协商,协商的内容包括(1)通知预先指定的BV当前连接的是vbs-client ;(2)通知预先指定的BV预先指定的PV的信息,包括预先指定的PV的名称和监听 端口 ;其中,预先指定的PV的监听端口也是由预先指定的PV预先提供的;(3)向预先指定的BV发送获取卷大小,检测(check)点和单节点位图(solo bitmap)的请求;其中,check点记录的是写入数据的时间点。步骤303,预先指定的BV向vbs-client返回卷大小、check点和solo bitmap。步骤304,vbs-client根据预先指定的PV的监听端口与该预先指定的PV建立 SOCKET 连接。步骤305,vbs-client与预先指定的PV进行协商,协商的内容包括(1)通知预先指定的PV当前连接的是vbs-client ;(2)通知预先指定的PV当前预先指定的BV的信息,包括预先指定的BV的名称和 监听端口 ;(3)向预先指定的PV发送获取卷大小、check点和solo bitmap的请求。步骤306,预先指定的PV向vbs-client返回卷大小、check点和solo bitmap。步骤307,vbs-client比较预先指定的PV和预先指定的BV的check点,确定最新 检测点对应的卷为真正的PV,次新检测点对应的卷为真正的BV。具体地,如果比较check点之后,vbs-client发现预先指定的BV的check点是最 新的,也就是说预先指定的BV —侧的数据是最新的,这说明在这之前预先指定的PV发生过 异常,然后由vbs-client的内核进行主备倒换,将预先指定的BV作为真正的PV,之后存储 系统在预先指定的BV写过数据。本实施例以预先指定的PV为真正的PV,预先指定的BV为真正的BV为例进行说明。步骤308,vbs-client向vbs-client的内核注册真正的BV的角色,并通知预先指 定的BV,其为真正的BV。步骤309,vbs-client向vbs-client的内核注册真正的PV的角色,并通知预先指 定的PV,其为真正的PV。步骤310,vbs-client判断真正的PV与真正的BV之间的链路是否正常;如果正 常,则执行步骤311 步骤313 ;如果真正的PV与真正的BV之间的链路发生异常,则退出 本流程,进入重建流程。步骤311,如果真正的PV与真正的BV之间的数据不同步,则vbs-client向真正的 PV发送数据同步请求,以使该真正的PV与真正的BV进行数据同步。步骤312,vbs-client将步骤301与步骤304建立的SOCKET连接的描述符注册 到vbs-client的内核。这样,vbs-client的内核在向真正的PV发送读操作请求、写操作 请求或控制消息时可以使用vbs-client与真正的PV之间的SOCKET连接;而在接收数据 或控制消息时,vbs-client的内核会选择一个合适的SOCKET连接。因为,在三角模型下, vbs-client是从vbs-client的内核与真正的BV之间的SOCKET连接开始接收数据的,而在 L模型或S0L0模型下,vbs-client是从vbs-client的内核与真正的PV之间的SOCKET连接开始接收数据的。步骤313,vbs-client调用系统函数,例如ioctrl进入内核态线程,在内核态线 程由注册到系统的回调函数处理上层业务程序发送的I/O请求,例如写操作请求和读操 作请求。上述实施例可以实现建立三角模型,通过该三角模型处理写操作请求,可以实现 提高存储可靠性,降低消息流量,提高存储性能。图4为本发明数据存储方法另一个实施例的流程图,由于本发明实施例中,读操 作请求的处理过程仅是vbs-client与PV之间的交互,与现有技术一样,因此,本实施例仅 对写操作请求的处理过程进行介绍。如图4所示,该数据存储方法可以包括步骤401,三角模型建立,存储系统处于稳定状态。步骤402,三角模型建立后,vbs-client会启动一个内核态线程专门用来处理写 操作请求。步骤403,上层业务程序发送的写操作请求被vbs-client的操作系统(Operating System;以下简称0S)放入内核注册的一个请求队列中。步骤404,vbs-client的内核线程从上述请求队列中获取一个写操作请求。本实施例中,vbs-client的内核线程可以按照预定的规则从上述请求队列中获取 一个写操作请求,该预定的规则可以为先入先出规则或其他规则,本实施例对此不作限定, 只要vbs-client的内核线程可以按照该预定的规则从上述请求队列中获取一个写操作请 求即可;但本实施例以该预定的规则为先入先出规则为例进行说明。步骤405,Vbs-client的内核向PV发送写操作请求,该写操作请求用于通知PV准 备接收待写入数据。步骤406,PV子进程收到写操作请求之后,将接收到的写操作请求转发给BV子进 程;该写操作请求用于通知BV准备接收待写入数据。步骤407,PV通过该PV与vbs-c 1 ient之间的SOCKET连接接收待写入数据,将该待 写入数据写入PV的卷文件(volume file),并将该待写入数据通过PV与BV之间的SOCKET 连接发送给BV,以便BV在将待写入数据写入该BV的卷文件。步骤408,BV在将待写入数据写入该BV的卷文件之后,向vbs-client的内核上报 写入操作的结果。步骤409,PV向BV发送check点记录请求。步骤410,PV和BV更新各自的check点。本实施例中,check点是判断当前侧数据是最新数据的唯一标准。步骤411,PV检查脏数据块列表(Dirty Block List ;以下简称DBL)中是否有脏 数据,如果有,且满足预定条件,则PV将DBL中的脏数据强行写到磁盘中。其中,脏数据为 暂时存放在内存缓冲区中,还未写入卷文件的数据;DBL用于记录哪些数据是脏数据。本实施例中,上述预定条件可以为以下之一或组合(1)如果在轮询时发现DBL没有变化,说明存储系统不忙,可以直接将DBL中的脏 数据写到磁盘中;(2)如果DBL不为空,且在轮询时发现该DBL有变化,则可以在达到预定的时间间隔后将DBL中的脏数据写到磁盘中。步骤412,vbs-client的内核接收到BV发送的写入操作的结果之后,判断接收到 的写入操作的结果是否与已发送的写操作请求对应;如果对应,则执行步骤413 ;如果上述 写入操作的结果与已发送的写操作请求不对应,则vbs-client的内核可以丢弃该写入操 作的结果,或者缓存但不处理该写入操作的结果,本实施例对此不作限定,但本实施例以写 入操作的结果与已发送的写操作请求不对应时,vbs-client的内核丢弃该写入操作的结果 为例进行说明。步骤413,vbs-client的内核将写入操作的结果发送给上层业务程序。上述实施例中,PV通过该PV与vbs-client之间的SOCKET连接接收到待写入数 据之后,将上述待写入数据写入PV的卷文件,并将上述待写入数据通过PV与BV之间的 SOCKET连接发送给BV,以便BV将待写入数据写入该BV的卷文件,从而可以提高存储可靠 性;在BV将待写入数据写入该BV的卷文件之后,由BV向vbs-client的内核上报写入操作 的结果;从而可以降低消息流量,并且可以分担PV的部分负荷,达到动态负载均衡的目的。以下介绍在各种异常发生时,存储系统是如何从稳定的三角模型切换到其他模 型,从而保证上层业务程序不受影响的。当PV发生异常时,原来的BV变成真正的PV,既负责接收请求,也负责回应结果,这 时网络结构可以如图5所示,图5为本发明网络架构另一个实施例的示意图。图5所示的 网络架构为单节点(SOLO)模型图6为本发明数据存储方法又一个实施例的流程图,本实施例对图5所示网络架 构下的数据存储过程进行介绍。如图6所示,该数据存储方法可以包括步骤601,vbs-client内核态线程接收PV发生异常之前的写操作请求。步骤602,PV发生异常导致vbs-client与PV之间的SOCKET连接发生异常, vbs-client的内核进行主备倒换,将原来的BV注册为新的PV。步骤603,vbs-client内核态线程启动检测发生异常的PV是否恢复的进程。步骤604,vbs-client内核态线程将上述写操作请求发送给新的PV(即原来的 BV)。步骤605,新的PV将待写入数据写入该新的PV的卷文件。步骤606,新的PV更新check点。步骤607,新的 PV 更新 solo bitmap。步骤608,新的PV向vbs-client的内核上报写入操作的结果。步骤609,vbs-client的内核确定该写入操作的结果与之前发送的写操作请求对 应之后,将该写入操作的结果发送给上层业务程序。步骤610,检测发生异常的PV是否恢复的进程发送检测消息给vbs-client的内 核,以便vbs-client的内核根据该检测消息确定发生异常的PV是否恢复正常。本实施例中,新的PV(即原来的BV)在将待写入数据写入自身的卷文件之后,要更 新solo bitmap和check点,该solo bitmap用于记录哪一块数据发生了变化,该check点 用于记录写入待写入数据的时间点。记录solo bitmap和check点的作用是,在下次三角 模型建立时,存储系统会根据check点判断哪一侧的数据是最新的,只有具有最新数据的卷才可以做PV。另夕卜,如果PV的数据比BV的新,则可以根据solo bitmap中记录的信息, 将PV上相应的数据同步到BV,保证PV和BV上数据的一致性;反之亦然。当vbs-client与BV之间的链路发生异常时,网络架构可以如图7所示,图7为本 发明网络架构又一个实施例的示意图,图7所示的网络架构为L模型。在图7所示的网络 架构下,BV无法向上层业务程序发送写入操作的结果,这时,BV转向PV上报写入操作的结 果,最后由PV向上层业务程序上报写入操作的结果。图8为本发明数据存储方法再一个实施例的流程图,本实施例对图7所示网络架 构下的数据存储过程进行介绍。如图8所示,该数据存储方法可以包括步骤801,在稳定状态下,vbs-client与BV之间的链路突然发生异常。步骤802,本来需要BV上报的写入操作的结果,因为vbs_c 1 ient与BV之间的链路 发生异常,BV无法将写入操作的结果发送给vbs-client的内核,一直阻塞。步骤803,当vbs-client的心跳机制检测到链路异常时,向vbs-client发送链路 异常消息。步骤804,vbs-client将链路异常消息发送给PV。步骤805,PV将链路异常消息转发给BV。步骤806,BV接收到链路异常消息之后,将未发出的写入操作的结果发送给PV。步骤807,PV将写入操作的结果发送给vbs-client的内核。步骤808,vbs-client的内核将写入操作的结果上报给上层业务程序。 步骤809,之后有写操作请求时,BV在将待写入数据写入BV的卷文件之后,直接将 写入操作的结果上报给PV而不再进行尝试发送给vbs-client的内核。当PV与BV之间的链路发生异常时,网络架构可以如图9所示,图9为本发明网 络架构再一个实施例的示意图,图9所示的网络结构为倒V模型。在倒V模型下,存储 系统可以忽略BV,以处理写操作请求为例,PV将待写入数据写入PV的卷文件之后,更新 PV的check点和solo bitmap ;然后,PV向vbs-client的内核上报写入操作的结果,即 vbs-client不从BV接收写入操作的结果,转而从PV接收,整体的处理流程与SOLO模型类 似,在此不再赘述。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序 在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者 光盘等各种可以存储程序代码的介质。图10为本发明主卷节点设备一个实施例的结构示意图,该主卷节点设备可以实 现本发明图1所示实施例的流程,如图10所示,该主卷节点设备可以包括接收模块1001 和写入模块1002 ;其中,接收模块1001,用于通过该主卷节点设备与虚拟块存储客户端之间的套接 字连接接收待写入数据;写入模块1002,用于将接收模块1001接收的待写入数据写入主卷节点设备的卷 文件,并将待写入数据通过主卷节点设备与备份卷节点设备之间的套接字连接发送给备份 卷节点设备,以便备份卷节点设备在将该待写入数据写入备份卷节点设备的卷文件之后,向虚拟块存储客户端的内核上报写入操作的结果。上述实施例中,接收模块1001通过该主卷节点设备与虚拟块存储客户端之间的 套接字连接接收到待写入数据之后,写入模块1002将上述待写入数据写入主卷节点设备 的卷文件,并将上述待写入数据通过主卷节点设备与备份卷节点设备之间的套接字连接发 送给备份卷节点设备,以便备份卷节点设备将待写入数据写入该备份卷节点设备的卷文 件,从而可以提高存储可靠性;在备份卷节点设备将待写入数据写入该备份卷的卷文件之 后,由备份卷节点设备向虚拟块存储客户端的内核上报写入操作的结果;从而可以降低消 息流量,并且可以分担主卷节点设备的部分负荷,达到动态负载均衡的目的。图11为本发明主卷节点设备另一个实施例的结构示意图,与图10所示的主卷节 点设备相比,不同之处在于,图11所示的主卷节点设备还可以包括发送模块1003 ;本实施例中,接收模块1001还可以在接收待写入数据之前,接收虚拟块存储客户 端的内核发送的写操作请求;则发送模块1003用于将接收模块1001接收的写操作请求转 发给备份卷节点设备,该写操作请求用于通知主卷节点设备和/或备份卷节点设备准备接 收待写入数据;写操作请求是虚拟块存储客户端的内核从该内核注册的请求队列中获取 的;该内核注册的请求队列中的写操作请求是虚拟块存储客户端接收到上层业务程序发送 的写操作请求之后,放入该内核注册的请求队列中的。进一步地,本实施例中,发送模块1003还可以向备份卷节点设备发送检测点记录 请求,以使主卷节点设备和备份卷节点设备更新各自的检测点。进一步地,本实施例中的主卷节点设备还可以包括检查模块1004,用于检查脏数据块列表中是否有脏数据;则写入模块1002还可以当脏数据块列表中有脏数据,且满足预定条件之后,将上 述脏数据写到磁盘中。进一步地,本实施例中,接收模块1001还可以当虚拟块存储客户端与备份卷节点 设备之间的链路发生异常时,接收虚拟块存储客户端发送的链路异常消息;发送模块1003 还可以将接收模块1001接收的链路异常消息转发给备份卷节点设备,以使备份卷节点设 备将写入操作的结果发送给主卷节点设备,再由发送模块1003将上述写入操作的结果发 送给虚拟块存储客户端的内核;该链路异常消息由虚拟块存储客户端的心跳进程发送给虚 拟块存储客户端。进一步地,本实施例中的主卷节点设备还可以包括更新模块1005,用于当主卷节点设备和备份卷节点设备之间的链路发生异常时, 在写入模块1002将待写入数据写入主卷节点设备的卷文件之后,更新主卷节点设备的检 测点和单节点位图;这时,发送模块1003可以向虚拟块存储客户端的内核上报写入操作的结果。采用上述主卷节点设备构建存储系统,可以提高存储可靠性,降低消息流量,提高 存储性能。图12为本发明虚拟块存储客户端设备一个实施例的结构示意图,如图12所示,该 虚拟块存储客户端设备可以包括连接建立模块1201、获得模块1202、比较模块1203、确定 模块1204、注册模块1205和调用模块1206 ;其中,连接建立模块1201,用于根据预先指定的备份卷的监听端口与预先指定的备份卷建立套接字连接,以及根据预先指定的主卷的监听端口与预先指定的主卷建立套接 字连接;获得模块1202,用于获得预先指定的备份卷的卷大小、检测点和单节点位图,以及 获得预先指定的主卷的卷大小、检测点和单节点位图;比较模块1203,用于比较预先指定的主卷和预先指定的备份卷的检测点;确定模块1204,用于根据比较模块1203的比较结果确定最新检测点对应的卷为 真正的主卷,次新检测点对应的卷为真正的备份卷;注册模块1205,用于向虚拟块存储客户端设备的内核注册真正的主卷和真正的备 份卷的角色,以及当真正的主卷与真正的备份卷之间的链路正常时,将连接建立模块1201 与预先指定的备份卷建立的套接字连接的描述符,以及连接建立模块1201与预先指定的 主卷建立的套接字连接的描述符注册到虚拟块存储客户端设备的内核;调用模块1206,用于调用系统函数进入内核态线程,在内核态线程中处理上层业 务程序发送的写操作请求。采用上述虚拟块存储客户端设备构建存储系统,可以提高存储可靠性,降低消息 流量,提高存储性能。图13为本发明虚拟块存储客户端设备另一个实施例的结构示意图,与图12所示 的虚拟块存储客户端设备相比,不同之处在于,图13所示的虚拟块存储客户端设备12还可 以包括请求发送模块1207,用于当真正的主卷与真正的备份卷之间的链路正常时,如果 真正的主卷与真正的备份卷之间的数据不同步,则向真正的主卷发送数据同步请求,以使 真正的主卷与真正的备份卷进行数据同步;主备倒换模块1208,用于当主卷发生异常时,在虚拟块存储客户端设备的内核进 行主备倒换,将备份卷注册为新的主卷,以使新的主卷通过新的主卷与虚拟块存储客户端 之间的套接字连接接收待写入数据,并在将待写入数据写入新的主卷的卷文件之后,更新 新的主卷的检测点和单节点位图,以及向虚拟块存储客户端设备的内核上报写入操作的结^ ο进一步地,本实施例中的虚拟块存储客户端设备12还可以包括结果接收模块 1209和结果发送模块1210;其中,结果接收模块1209,用于接收写入操作的结果;这时确定模块1204还可以确定结果接收模块1209接收的写入操作的结果是否与 已发送的写操作请求对应;结果发送模块1210,用于在确定模块1204确定结果接收模块1209接收的写入操 作的结果与已发送的写操作请求对应之后,将上述写入操作的结果发送给上层业务程序。采用上述虚拟块存储客户端设备构建存储系统,可以提高存储可靠性,降低消息 流量,提高存储性能。图14为本发明备份卷节点设备一个实施例的结构示意图,如图14所示,该备份卷 节点设备可以包括数据接收模块1401、数据写入模块1402和结果上报模块1403 ;其中,数据接收模块1401,用于接收主卷节点设备通过该主卷节点设备与备份卷 节点设备之间的套接字连接发送的待写入数据;
数据写入模块1402,用于将数据接收模块1401接收的待写入数据写入备份卷节 点设备的卷文件;结果上报模块1403,用于向虚拟块存储客户端设备的内核上报写入操作的结果。采用上述备份卷节点设备构建存储系统,可以提高存储可靠性,降低消息流量,提 高存储性能。图15为本发明备份卷节点设备另一个实施例的结构示意图,与图13所示的备份 卷节点设备相比,不同之处在于,图14所示的备份卷节点设备还可以包括请求接收模块1404,用于在数据接收模块1401接收待写入数据之前,接收主卷节 点设备发送的写操作请求,该写操作请求用于通知所述备份卷节点设备准备接收所述待写 入数据;还可以在结果上报模块1403上报写入操作的结果之后,接收主卷节点设备发送的 检测点记录请求,以更新该备份卷节点设备的检测点。采用上述备份卷节点设备构建存储系统,可以提高存储可靠性,降低消息流量,提 高存储性能。图16为本发明存储系统一个实施例的结构示意图,如图16所示,该存储系统可以 包括vbs 客户端 1601、PV 1602 和 BV 1603 ;其中,PV 1602用于通过PV 1602与vbs客户端1601之间的套接字连接接收待写 入数据,将该待写入数据写入PV 1602的卷文件,并将待写入数据通过PV 1602与BV 1603 之间的套接字连接发送给BV 1603,以便BV 1603在将待写入数据写入BV 1603的卷文件之 后,向vbs客户端1601的内核上报写入操作的结果。具体地,vbs客户端1601可以通过本发明图12或图13所示的虚拟块存储客户端 设备实现,PV 1602可以通过本发明图10或图11所示的主卷节点设备实现。本实施例中,vbs客户端1601可以包括三角模型建立模块16011、控制消息处理模 块16012、I/O请求发送模块16013、链路选择模块16014和I/O结果接收模块16015 ;其中,三角模型建立模块16011,用于初次启动、节点异常或网络异常时,重新建立 三角模型或进行模型切换;具体地,三角模型建立模块16011可以参照本发明图3所示实 施例提供的方法建立三角模型,实现图12所示实施例提供的虚拟块存储客户端设备中连 接建立模块1201、获得模块1202、比较模块1203、确定模块1204、注册模块1205、调用模块 1206和请求发送模块1207的功能。控制消息处理模块16012 为用户态与内核态之间的接口 ;I/O请求发送模块16013 来自上层业务程序的I/O请求,例如写操作请求或读 操作请求通过I/O请求发送模块16013发送到PV 1602 ;链路选择模块16014:当异常发生时,数据的收发不同于三角模型,所以在SOLO模 型或L模型时,vbs-client的内核在发送I/O请求时要选择合适的链路;本实施例中,链路 选择模块16014可以实现图12所示实施例提供的虚拟块存储客户端设备中主备倒换模块 1208的功能;I/O结果接收模块16015 来自BV的写入操作的结果由I/O结果接收模块16015 处理;本实施例中,I/O结果接收模块16015可以实现图12所示实施例提供的虚拟块存储 客户端设备中结果接收模块1209和结果发送模块1210的功能。本实施例中,PV 1602可以包括读操作请求处理模块16021、写操作请求处理模块16022、主备数据同步模块16023、PV状态检测模块16024、单节点位图(solo bitmap) 16025、DBL 16026 和卷文件 16027。其中,读操作请求处理模块16021,用于处理来自vbs客户端1601的读操作请求, 在三角模型下读操作请求只到PV 1602,BV 1603不感知;写操作请求处理模块16022,用于处理来自vbs客户端1601的写操作请求,在三角 模型下写操作请求会转到BV 1603,最后由BV 1603向vbs客户端1601报告写入操作的结 果;本实施例中,写操作请求处理模块16022可以实现本发明图10所示实施例提供的主卷 节点设备中接收模块1001、写入模块1002和发送模块1003的部分功能;主备数据同步模块16023 当PV 1602或BV 1603发生异常时,该存储系统进入 SOLO模型,以后有写操作请求时,solo bitmap 16025会记录发生变化的数据,当重建三角 模型时,主备数据同步模块16023将数据同步到另一侧,保持数据一致;PV状态检测模块16024 当PV 1602发生异常时,存储系统进入SOLO模型,原来的 BV 1603会成为真正的PV,PV状态检测模块160M轮询检测发生异常的PV 1602是否恢复 正常,恢复后重建三角模型;solo bitmap 16025 记录存储系统在S0L0模型下运行期间,PV 1602上发生变化 的数据块;本实施例中,solo bitmap 16025可以实现本发明图10所示实施例提供的主卷 节点设备中更新模块1005的部分功能;DBL 16026 写操作请求发生时,存储系统首先将待写入数据写入缓冲区,这些待 写入数据在真正写到磁盘之前都被认为是脏数据,DBL 160 用于记录这些脏数据。当DBL 16026中有脏数据,且满足预定条件时,PV 1602可以将DBL 160 中的脏数据强行写到磁 盘中。本实施例中,上述预定条件可以为以下之一或组合(1)如果在轮询时发现DBL 160 没有变化,说明存储系统不忙,PV1602可以直接 将DBL 16026中的脏数据写到磁盘中;(2)如果DBL 160 不为空,且在轮询时发现该DBL 160 有变化,则PV 1602可 以在达到预定的时间间隔后将DBL 160 中的脏数据写到磁盘中;卷文件16027 基于高级日志文件系统(XFS)文件系统的稀疏文件,用于存放所有 的数据。写入待写入数据之前,卷文件16027并不占用磁盘空间,是一种瘦分配,为用户提 供了很大的灵活性。本实施例中,BV 1603中各模块的功能与PV 1602中相同模块的功能相同,在此不
再赘述。上述存储系统中,PV 1602通过该PV 1602与vbs客户端1601之间的套接字连接 接收到待写入数据之后,将上述待写入数据写入PV 1602的卷文件,并将上述待写入数据 通过PV 1602与BV 1603之间的套接字连接发送给BV 1603,以便BV 1603将待写入数据 写入该BV 1603的卷文件,从而可以提高存储可靠性;在BV 1603将待写入数据写入该BV 1603的卷文件之后,由BV 1603向vbs客户端1601的内核上报写入操作的结果;从而可以 降低消息流量,并且可以分担PV 1602的部分负荷,达到动态负载均衡的目的。下面对本发明实施例在云存储中的实现进行介绍。云存储是在云计算概念上延伸和发展出来的一个新的概念,是指通过集群应用、 网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。当云计算系统运 算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备, 那么云计算系统就转变成为一个云存储系统,所以云存储系统是一个以数据存储和管理为 核心的云计算系统。图17为本发明云存储系统一个实施例的示意图,如图17所示,本实施例中的云存 储系统可以包括以下设备(1)三台块存储提供者(Block Storage Provider ;以下简称BSP),分别记为 BSPU BSP2 和 BSP3, BSPU BSP2 和 BSP3 为上层的块存储代理(BlockStorage Agent ;以下 简称BSA)提供存储空间。同时,每个BSP上分别有本发明实施例提供的三角模型中的PV 和BV。在这种部署下,可以有效地将每个BSP的I/O负荷平均分配。(2) 一台BSA,作为存储管理中间件和底层BSP之间的接口,负责向上层提供虚拟 的NBD设备。(3)另一台服务器,该服务器上部署监控系统、计费系统和存储资源管理系统等; 其中,存储资源管理系统,主要负责BSP1、BSP2和BSP3上PV和BV的选择,从而达到BSPl、 BSP2和BSP3之间负载的均衡;监控系统用于实时监控各节点是否异常,另外,也负责监控 BSPU BSP2和BSP3的性能,如有异常及时通知存储资源管理系统。本发明实施例提供的数据存储方法、设备和系统,可以方便地构建大型可靠的存 储系统。同时,本发明实施例在提高存储可靠性的同时,也有效降低了整个存储系统的消息 流量。在I/O负荷很高的场合,优势更加明显。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流 程并不一定是实施本发明所必须的。 本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分 布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上 述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
权利要求
1.一种数据存储方法,其特征在于,包括通过主卷与虚拟块存储客户端之间的套接字连接接收待写入数据;将所述待写入数据写入所述主卷的卷文件,并将所述待写入数据通过所述主卷与备份 卷之间的套接字连接发送给所述备份卷,以便所述备份卷在将所述待写入数据写入所述备 份卷的卷文件之后,向所述虚拟块存储客户端的内核上报写入操作的结果。
2.根据权利要求1所述的方法,其特征在于,所述通过主卷与虚拟块存储客户端之间 的套接字连接接收待写入数据之前,还包括接收虚拟块存储客户端的内核发送的写操作请求,并将所述写操作请求转发给备份 卷,所述写操作请求用于通知所述主卷和/或所述备份卷准备接收所述待写入数据;所述 写操作请求是所述虚拟块存储客户端的内核从所述内核注册的请求队列中获取的;所述内 核注册的请求队列中的写操作请求是所述虚拟块存储客户端接收到上层业务程序发送的 写操作请求之后,放入所述内核注册的请求队列中的。
3.根据权利要求1所述的方法,其特征在于,所述向所述虚拟块存储客户端的内核上 报写入操作的结果之后,还包括向所述备份卷发送检测点记录请求,以使所述主卷和所述备份卷更新各自的检测点。
4.根据权利要求1或3所述的方法,其特征在于,所述向所述虚拟块存储客户端的内核 上报写入操作的结果之后,还包括检查脏数据块列表中是否有脏数据;当所述脏数据块列表中有脏数据,且满足预定条件之后,将所述脏数据写到磁盘中。
5.根据权利要求2所述的方法,其特征在于,所述接收虚拟块存储客户端的内核发送 的写操作请求之前,还包括所述虚拟块存储客户端根据预先指定的备份卷的监听端口与所述预先指定的备份卷 建立套接字连接,并获得所述预先指定的备份卷的卷大小、检测点和单节点位图;所述虚拟块存储客户端根据预先指定的主卷的监听端口与所述预先指定的主卷建立 套接字连接,并获得所述预先指定的主卷的卷大小、检测点和单节点位图;所述虚拟块存储客户端比较所述预先指定的主卷和所述预先指定的备份卷的检测点, 确定最新检测点对应的卷为真正的主卷,次新检测点对应的卷为真正的备份卷;所述虚拟块存储客户端向所述虚拟块存储客户端的内核注册所述真正的主卷和所述 真正的备份卷的角色;当所述真正的主卷与所述真正的备份卷之间的链路正常时,所述虚拟块存储客户端将 与所述预先指定的备份卷建立的套接字连接的描述符,以及与所述预先指定的主卷建立的 套接字连接的描述符注册到所述虚拟块存储客户端的内核;所述虚拟块存储客户端调用系统函数进入内核态线程,在所述内核态线程中处理上层 业务程序发送的写操作请求。
6.根据权利要求5所述的方法,其特征在于,所述虚拟块存储客户端将与所述预先指 定的备份卷建立的套接字连接的描述符,以及与所述预先指定的主卷建立的套接字连接的 描述符注册到所述虚拟块存储客户端的内核之前,还包括当所述真正的主卷与所述真正的备份卷之间的链路正常时,如果所述真正的主卷与所 述真正的备份卷之间的数据不同步,则所述虚拟块存储客户端向所述真正的主卷发送数据同步请求,以使所述真正的主卷与所述真正的备份卷进行数据同步。
7.根据权利要求2所述的方法,其特征在于,还包括当所述主卷发生异常时,在所述虚拟块存储客户端的内核进行主备倒换,将所述备份 卷注册为新的主卷之后,所述新的主卷通过所述新的主卷与所述虚拟块存储客户端之间的 套接字连接接收待写入数据;所述新的主卷将所述待写入数据写入所述新的主卷的卷文件之后,更新所述新的主卷 的检测点和单节点位图;所述新的主卷向所述虚拟块存储客户端的内核上报写入操作的结果。
8.根据权利要求2所述的方法,其特征在于,还包括当所述虚拟块存储客户端与所述备份卷之间的链路发生异常时,所述主卷接收所述虚 拟块存储客户端发送的链路异常消息,并将所述链路异常消息转发给所述备份卷,以使所 述备份卷将所述写入操作的结果发送给所述主卷,由所述主卷将所述写入操作的结果发送 给所述虚拟块存储客户端的内核;所述链路异常消息由所述虚拟块存储客户端的心跳进程 发送给所述虚拟块存储客户端。
9.根据权利要求2所述的方法,其特征在于,还包括当所述主卷和所述备份卷之间的链路发生异常时,所述主卷将所述待写入数据写入所 述主卷的卷文件之后,更新所述主卷的检测点和单节点位图;所述主卷向所述虚拟块存储客户端的内核上报写入操作的结果。
10.根据权利要求2、7、8或9所述的方法,其特征在于,还包括接收到所述写入操作的结果之后,所述虚拟块存储客户端的内核确定所述写入操作的 结果是否与已发送的写操作请求对应;如果对应,则所述虚拟块存储客户端的内核将所述写入操作的结果发送给所述上层业 务程序。
11.一种主卷节点设备,其特征在于,包括接收模块,用于通过所述主卷节点设备与虚拟块存储客户端之间的套接字连接接收待 写入数据;写入模块,用于将所述接收模块接收的待写入数据写入所述主卷节点设备的卷文件, 并将所述待写入数据通过所述主卷节点设备与备份卷节点设备之间的套接字连接发送给 所述备份卷节点设备,以便所述备份卷节点设备在将所述待写入数据写入所述备份卷节点 设备的卷文件之后,向所述虚拟块存储客户端的内核上报写入操作的结果。
12.根据权利要求11所述的设备,其特征在于,还包括发送模块;所述接收模块,还用于在接收所述待写入数据之前,接收虚拟块存储客户端的内核发 送的写操作请求;所述发送模块,用于将所述接收模块接收的写操作请求转发给所述备份卷节点设备, 所述写操作请求用于通知所述主卷节点设备和/或所述备份卷节点设备准备接收所述待 写入数据;所述写操作请求是所述虚拟块存储客户端的内核从所述内核注册的请求队列中 获取的;所述内核注册的请求队列中的写操作请求是所述虚拟块存储客户端接收到上层业 务程序发送的写操作请求之后,放入所述内核注册的请求队列中的。
13.根据权利要求12所述的设备,其特征在于,所述发送模块,还用于向所述备份卷节点设备发送检测点记录请求,以使所述主卷节 点设备和所述备份卷节点设备更新各自的检测点。
14.根据权利要求11或13所述的设备,其特征在于,还包括检查模块;所述检查模块,用于检查脏数据块列表中是否有脏数据;所述写入模块,还用于当所述脏数据块列表中有脏数据,且满足预定条件之后,将所述 脏数据写到磁盘中。
15.根据权利要求12所述的设备,其特征在于,所述接收模块,还用于当所述虚拟块存储客户端与所述备份卷节点设备之间的链路发 生异常时,接收所述虚拟块存储客户端发送的链路异常消息;所述发送模块,还用于将所述接收模块接收的链路异常消息转发给所述备份卷节点设 备,以使所述备份卷节点设备将所述写入操作的结果发送给所述主卷节点设备,再由所述 发送模块将所述写入操作的结果发送给所述虚拟块存储客户端的内核;所述链路异常消息 由所述虚拟块存储客户端的心跳进程发送给所述虚拟块存储客户端。
16.根据权利要求12所述的设备,其特征在于,还包括更新模块;更新模块,用于当所述主卷节点设备和所述备份卷节点设备之间的链路发生异常时, 在所述写入模块将所述待写入数据写入所述主卷节点设备的卷文件之后,更新所述主卷节 点设备的检测点和单节点位图;所述发送模块,还用于向所述虚拟块存储客户端的内核上报写入操作的结果。
17.—种虚拟块存储客户端设备,其特征在于,包括连接建立模块,用于根据预先指定的备份卷的监听端口与所述预先指定的备份卷建 立套接字连接,以及根据预先指定的主卷的监听端口与所述预先指定的主卷建立套接字连 接;获得模块,用于获得所述预先指定的备份卷的卷大小、检测点和单节点位图,以及获得 所述预先指定的主卷的卷大小、检测点和单节点位图;比较模块,用于比较所述预先指定的主卷和所述预先指定的备份卷的检测点;确定模块,用于根据所述比较模块的比较结果确定最新检测点对应的卷为真正的主 卷,次新检测点对应的卷为真正的备份卷;注册模块,用于向所述虚拟块存储客户端设备的内核注册所述真正的主卷和所述真正 的备份卷的角色,以及当所述真正的主卷与所述真正的备份卷之间的链路正常时,将所述 连接建立模块与所述预先指定的备份卷建立的套接字连接的描述符,以及所述连接建立模 块与所述预先指定的主卷建立的套接字连接的描述符注册到所述虚拟块存储客户端设备 的内核;调用模块,用于调用系统函数进入内核态线程,在所述内核态线程中处理上层业务程 序发送的写操作请求。
18.根据权利要求17所述的设备,其特征在于,还包括请求发送模块,用于当所述真正的主卷与所述真正的备份卷之间的链路正常时,如果 所述真正的主卷与所述真正的备份卷之间的数据不同步,则向所述真正的主卷发送数据同 步请求,以使所述真正的主卷与所述真正的备份卷进行数据同步。
19.根据权利要求17所述的设备,其特征在于,还包括主备倒换模块,用于当所述主卷发生异常时,在所述虚拟块存储客户端设备的内核进 行主备倒换,将所述备份卷注册为新的主卷,以使所述新的主卷通过所述新的主卷与所述 虚拟块存储客户端之间的套接字连接接收待写入数据,并在将所述待写入数据写入所述新 的主卷的卷文件之后,更新所述新的主卷的检测点和单节点位图,以及向所述虚拟块存储 客户端设备的内核上报写入操作的结果。
20.根据权利要求19所述的设备,其特征在于,还包括结果接收模块和结果发送模块;所述结果接收模块,用于接收写入操作的结果;所述确定模块,还用于确定所述结果接收模块接收的写入操作的结果是否与已发送的 写操作请求对应;所述结果发送模块,用于在所述确定模块确定所述结果接收模块接收的写入操作的结 果与已发送的写操作请求对应之后,将所述写入操作的结果发送给所述上层业务程序。
21.一种备份卷节点设备,其特征在于,包括数据接收模块,用于接收主卷节点设备通过所述主卷节点设备与备份卷节点设备之间 的套接字连接发送的待写入数据;数据写入模块,用于将所述数据接收模块接收的待写入数据写入所述备份卷节点设备 的卷文件;结果上报模块,用于向虚拟块存储客户端设备的内核上报写入操作的结果。
22.根据权利要求21所述的设备,其特征在于,还包括请求接收模块,用于在所述数据接收模块接收待写入数据之前,接收所述主卷节点设 备发送的写操作请求,所述写操作请求用于通知所述备份卷节点设备准备接收所述待写入 数据。
23.根据权利要求22所述的设备,其特征在于,所述请求接收模块,还用于在所述结果上报模块上报写入操作的结果之后,接收所述 主卷节点设备发送的检测点记录请求,以更新所述备份卷节点设备的检测点。
24.一种存储系统,其特征在于,包括如权利要求11-16任意一项所述的主卷节点设 备、如权利要求17-20任意一项所述的虚拟块存储客户端设备和如权利要求21-23任意一 项所述的备份卷节点设备。
全文摘要
本发明实施例提供一种数据存储方法、设备和系统,所述数据存储方法可以包括通过主卷与虚拟块存储客户端之间的套接字连接接收待写入数据;将所述待写入数据写入所述主卷的卷文件,并将所述待写入数据通过所述主卷与备份卷之间的套接字连接发送给所述备份卷,以便所述备份卷在将所述待写入数据写入所述备份卷的卷文件之后,向所述虚拟块存储客户端的内核上报写入操作的结果。本发明实施例可以提高存储可靠性,降低消息流量,并且备份卷可以分担主卷的部分负荷,达到动态负载均衡的目的。
文档编号H04L29/08GK102088490SQ20111002171
公开日2011年6月8日 申请日期2011年1月19日 优先权日2011年1月19日
发明者吴清, 周文明, 钟炎培 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1