一种双活存储系统及其处理数据的方法与流程

文档序号:29206904发布日期:2022-03-12 01:46阅读:144来源:国知局
1.本技术涉及存储领域,特别涉及一种双活存储系统及其处理数据的方法。
背景技术
::2.对于网络存储集群,例如网络附加存储(networkattachedstorage,nas)集群,在实现双活时,其中的第一存储设备在接收到写入数据时,会将所接收到的写入数据写到本地的同时,会同步到对端存储设备作为备份数据,这样,在第一存储设备故障,或者第一存储设备与第二存储设备断开连接时,第二存储设备可利用所述备份数据接管第一存储设备的业务,从而保证业务不中断,即实现了active-passive模式的双活。但是无法实现active-active模式的双活。技术实现要素:3.本技术提供一种双活存储系统及实现双活存储系统的方法,用于实现active-active模式的双活,使双活存储系统中的存储设备可以访问同一文件系统中的数据。4.本技术第一方面提供一种双活存储系统。所述双活存储系统包括第一存储设备和第二存储设备。所述第一存储设备用于接收客户端集群发送给文件系统的第一文件的数据,存储所述第一文件的数据,并且将所述第一文件的数据的第一副本数据发送给所述第二存储设备。所述第二存储设备用于接收所述客户端集群发送给所述文件系统的第二文件的数据,存储所述第二文件的数据,并且将所述第二文件的第二副本数据发送给所述第一存储设备。5.由于第一存储设备和第二存储设备都可以通过同样的文件系统进行文件数据的存储,并可以备份对端的文件数据,从而实现了active-active模式双活存储系统。传统的nas设备也具有文件系统,但active-passive模式下的两个存储设备各自拥有独立的文件系统,两个独立的文件系统都需要占用存储设备的计算/存储资源,使得资源的利用效率低,管理起来也较为复杂,这并非真正意义上双活。在本技术中,第一存储设备和第二存储设备拥有同一个文件系统,可以提高资源的利用效率,降低了管理复杂度。另外,由于客户端给存储设备发送访问请求时,对它而言也是向同一个文件系统发送请求。因此对客户端而言其访问效率也提高了。6.在本技术第一方面的一种可能的实现中,所述双活存储系统还包括虚拟节点集合,所述虚拟节点集合包括多个虚拟节点,每个虚拟节点分配有计算资源,所述计算资源来源于所述第一存储设备或所述第二存储设备中的物理节点。7.所述物理节点可以为所述第一存储设备及所述第二存储设备控制节点,也可以是控制节点中的cpu,或者cpu中的内核。虚拟节点是逻辑上的概念,它作为资源分配的媒介用于实现该系统中计算资源的隔离。按照这种资源管理方式,各个虚拟节点分配有独立的计算资源,那么对应不同虚拟节点的文件/目录所使用的计算资源也是独立的。由此有利于所述双活存储系统的扩容或减容,也有利于实现计算资源之间的免锁机制,降低了复杂度。8.在本技术第一方面的一种可能的实现中,所述双活存储系统还包括管理设备,所述管理设备还用于创建全局视图,所述全局视图用于记录每个虚拟节点与其分配的计算资源之间的对应关系;所述管理设备还用于将所述全局视图发送给所述第一存储设备及所述第二存储设备,所述第一存储设备及所述第二存储设备保存所述全局视图。9.所述管理设备可以作为一个软件模块,安装在第一存储设备或第二存储设备上,也可以为一个独立的设备,在作为安装在第一存储设备上的软件模块时,在生成全局视图后,通过与存储设备中的其他模块的交互,将所述全局视图发送至第一存储设备及所述第二存储设备存储。10.通过全局视图的方式将虚拟节点集合中的虚拟节点分别呈现给第一存储设备及第二存储设备中的应用,第一存储设备及第二存储设备中的应用会将对端的物理节点作为本端的资源进行使用,从而更方便与对端物理节点进行交互。11.在本技术第一方面的一种可能的实现中,在存储所述第一文件的数据时,所述第一存储设备根据所述第一文件的数据的地址确定所述第一文件对应的第一虚拟节点,根据所述第一虚拟节点以及所述全局视图确定为所述第一虚拟节点分配的计算资源,并基于为所述第一虚拟节点分配的计算资源,将所述第一文件的数据发送给所述计算资源对应的物理节点,由所述物理节点将所述第一文件的数据存储至所述物理节点的内存中。12.通过全局视图提供的虚拟节点集合,第一存储设备可以接收归属于所述虚拟节点集合中的任意虚拟节点对应的物理节点的文件的数据,并将所接收的文件的数据转发至所述文件归属的物理节点进行处理,这样,用户在写数据的时候,不必感知文件实际存储的位置,可通过任意一个存储设备对文件进行操作。13.在本技术第一方面的一种可能的实现中,所述第一虚拟节点具有至少一个备份虚拟节点,所述第一虚拟节点对应的物理节点与所述备份虚拟节点对应的物理节点位于不同的存储设备中,在确定第一文件对应的第一虚拟节点后,所述第一存储设备还会确定所述第一虚拟节点对应的备份虚拟节点;根据所述备份虚拟节点以及所述全局视图确定所述备份虚拟节点对应的物理节点;将所述第一副本数据发送给所述备份虚拟节点对应的物理节点,由所述备份虚拟节点对应的物理节点将所述第一备份数据存储在所述物理节点中。14.通过将写入第一存储设备的文件的数据备份到第二存储设备中,在第一存储设备故障或者与第二存储设备断开连接后,可通过所述备份数据接管第一存储设备的业务,从而提升了系统的可靠性。15.在本技术第一方面的一种可能的实现中,所述文件系统所包括的文件和目录分布在所述虚拟节点集合中的多个虚拟节点对应的物理节点中。16.所述文件系统所包括的文件和目录分布在所述虚拟节点集合中的多个虚拟节点对应的物理节点中,具体指将所述文件系统所包括的文件和目录打散给多个物理节点处理。这样,可以充分利用第一存储设备和第二存储设备的物理资源,提高文件的处理效率。17.在本技术第一方面的一种可能的实现中,所述虚拟节点集合中的每个虚拟节点设置有一个或多个分片标识,所述文件系统中的每个目录及文件分配一个分片标识,所述第一存储设备和第二存储设备中的物理节点根据每个目录及文件的分片标识将所述目录和文件分布式至所述分片标识所属的虚拟节点对应物理节点中。18.通过分片标识可以更方便的将所述文件系统所包括的文件和目录分布至第一存储设备及第二存储设备的各个物理节点。19.在本技术第一方面的一种可能的实现中,所述第一存储设备中的第一物理节点用于接收所述第一文件的创建请求,从为所述第一物理节点对应的虚拟节点设置的一个或多个分片标识中为所述第一文件选择一个分片标识,在所述存储设备中创建所述第一文件。20.在创建文件时,通过给文件分配接收到所述文件创建请求对应的物理节点的虚拟节点的分片标识,避免将所述文件创建请求转发至其他物理节点,从而提高了处理效率。21.在本技术第一方面的一种可能的实现中,当所述第二存储设备故障或所述第一存储设备与所述第二存储设备之间的链路断开后,所述第一存储设备还用于基于所述第二文件的第二副本数据恢复所述第二文件,并接管所述客户端集群发送给所述第二存储设备的业务。22.在第一存储设备故障或者与第二存储设备断开连接后,可通过备份数据接管第一存储设备的业务,从而提升了系统的可靠性。23.在本技术第一方面的一种可能的实现中,所述第一存储设备还用于从所述全局视图中删除所述第二存储设备的计算资源对应的虚拟节点。24.在本技术第一方面的一种可能的实现中,所述第一存储设备还具有第一文件系统,所述第二存储设备还具有第二文件系统。25.在同一存储设备中同时运行本地文件系统及集群的文件系统,为用户提供了多种访问存储设备中的数据的方式。26.本技术第二方面提供一种实现双活文件系统的方法,所述方法所包括的步骤用于实现本技术第一方面提供的双活存储系统中第一存储设备及第二存储设备所执行的各个功能。27.本技术第三方面提供一种管理设备,所述管理设备用于创建全局视图,所述全局视图用于记录每个虚拟节点与其分配的计算资源之间的对应关系,还用于将所述全局视图发送给所述第一存储设备及所述第二存储设备存储。28.所述管理设备用于监控第一存储设备及第二存储设备中的虚拟节点的变化,当侦测到所述虚拟集群中增加了新的虚拟节点,或者当虚拟节点被删除,例如虚拟节点对应的物理节点故障,则更新所述全局视图。29.通过所述监控模块可以实时监控虚拟节点集群中的虚拟节点的变化,从而及时更新所述全局视图。30.本技术第四方面提供一种存储介质,用于存储程序指令,所述程序指令用于实现第三方面提供的管理设备提供的各项功能。附图说明31.为了更清楚地说明本技术实施例或中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。32.图1为active-passive模式的双活存储系统的架构图。33.图2为本技术实施例提供的active-active模式的双活存储系统的架构图。34.图3a为本技术实施例中建立双活存储系统的方法的流程图。35.图3b为本技术实施例中构建双活存储系统的过程中所生成各项参数的示意图。36.图4a为本技术实施例建立所述双活存储系统的文件系统的流程图。37.图4b为本技术实施例所构建的双活系统的示意图。38.图5为本技术实施例在文件系统中创建目录的方法的流程图。39.图6为本技术实施例在文件系统中查询目录的方法的流程图。40.图7为本技术实施例在文件系统中创建文件的方法的流程图。41.图8为本技术实施例在文件系统中的文件中写入数据的方法的流程图。42.图9为本技术实施例在文件系统中的文件中写入数据的方法的流程图。43.图10为本技术实施例中第一存储设备接管所述第二存储设备的业务的示意图。44.图11为本技术实施例中第一存储设备接管所述第二存储设备的业务的方法的流程图。具体实施方式45.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。46.如图1所示,为active-passive模式的双活系统的架构示意图。所述系统10包括第一存储设备100及第二存储设备200。在第一存储设备100的控制节点101中(第一存储设备可包括多个控制节点,为方便描述,仅以一个为例进行说明)设置有第一文件系统102,在第二存储设备200的控制节点201(第二存储设备也可包括多个控制节点,为方便描述,仅以一个为例进行说明)中设置有第二文件系统202。当第一客户端300连接至第一存储设备100之后,所述第一存储设备100将所述第一文件系统102挂载至所述第一客户端300。当第二客户端400连接至第二存储设备200之后,所述第二存储设备200将所述第二文件系统202挂载至所述第二客户端400。每个文件系统都具有根目录,所述存储设备将文件系统挂载至所述客户端是指存储设备将文件系统的根目录提供给客户端,客户端将文件系统的根目录设置在客户端的文件系统中,从而使客户端可以获取所述存储设备的文件系统的根目录,从而根据所述存储设备的文件系统的根目录访问存储设备的文件系统。如此,在第一文件系统102挂载至所述第一客户端300之后,第一客户端300通过第一文件系统102进行数据的读写,写入的数据作为本端数据103存储。另外,在第一存储设备100中还会存储第二存储设备200的备份数据,即对端备份数据104。同理,第二客户端400通过第二文件系统202进行数据的读写,写入的数据作为本端数据203存储。另外,在第二存储设备200中还会存储第一存储设备100的备份数据,即对端备份数据204。这样,在第一存储设备100发生故障或者与第二客户端之间的链接断开后,第二客户端可以利用对端备份数据204接管第一客户端300的业务,即实现active-passive模式的双活。但是在active-passive模式的双活系统100中,在第一存储设备100和第二存储设备200都正常运行期间,第一客户端300只能通过第一文件系统访问第一存储设备100中的数据,而无法访问第二存储设备200中的数据,第二客户端400只能通过第二文件系统访问第二存储设备200中的数据,而无法访问第一存储设备100中的数据,即无法实现active-active模式的双活。47.本技术实施例提供的技术方案通过设置全局视图,全局视图为虚拟节点的集合,全局视图中的每个虚拟节点分配有计算资源,所述计算资源来自于所述第一存储设备和所述第二存储设备的物理节点,所述物理节点可以是第一存储设备中的控制器及第二存储设备的控制器,也可以是控制器中的cpu,或者cpu中的内核,还可以是分布式存储系统中的服务器。在本技术实施例中,每个物理节点都可以获取所述全局视图,另外,每个物理节点还使用相同的文件系统,这样,连接至第一存储设备的第一客户端和连接至第二存储设备的第二客户端挂载有相同的文件系统,如此,所述第一客户端可以通过所述文件系统及所述全局视图访问所述第二存储设备中归属于所述文件系统的数据。下面将结合附图对本技术实施例提供的方案进行详细描述。48.如图2所示,为本技术实施例提供的active-active模式的双活系统500的架构图。所述系统500包括第一存储设备600及第二存储设备700。所述第一存储设备600包括物理节点a及物理节点b。第二存储设备700包括物理节点c及物理节点d。在实际应用中,所述第一存储设备600及第二存储设备700可以包括更多的物理节点,为了方便描述,本实施例仅以每个存储设备包括两个物理节点为例进行说明。所述第一存储设备600和第二存储设备700分别包括由多个存储盘构成的持久性存储设备601及701,用于持久性存储数据。基于所述持久性存储设备601及701的存储盘提供的物理存储空间,第一存储设备600及第二存储设备700分别创建第一卷609及第二卷703。第一存储设备600及第二存储设备700可分别根据所述第一卷609及第二卷703将数据存储至持久性存储设备601及701中。所述存储盘例如可以为固态硬盘(solidstatedisk,ssd),硬盘驱动器(harddiskdrive,hdd)等持久性存储介质49.物理节点a、物理节点b、物理节点c、及物理节点d的结构相同,本技术实施例中仅以节点a的结构为例进行说明。物理节点a包括处理器602及内存603。内存603中存储应用程序指令(图未示)及处理器运行过程中产生的数据。所述处理器602执行所述应用程序指令以实现本技术实施例提供的active-active模式的双活功能。所述内存603中除了第一文件系统608之外,还存储有全局视图604、文件系统605、缓存数据606及备份数据607。第一文件系统608的功能与图1中的第一文件系统102的功能相同,在此不再赘述。即在本技术实施例中,每个物理节点包括两个文件系统,一个是各个物理节点共有的文件系统,另外一个是每个物理节点自己的文件系统。关于内存603中其他数据的详细介绍结合实现双活的方法,例如图5到图9所示的流程图进行介绍。第一客户端800连接至所述第一存储设备600,以访问第一存储设备600中的数据,第二客户端700连接至所述第二存储设备900,以访问第二存储设备900中的数据。50.下面将结合流程图3a,图4a,图5-图9介绍本技术实施例实现active-active模式的双活的方法。51.首先,如图3a所示,为本技术实施例提供的建立全局视图的方法的流程图。52.步骤s301,第一存储设备600的物理节点a接收客户端发送的虚拟集群建立请求。53.当需要构建双活系统时,会建立全局视图,用户可通过客户端发送全局视图建立请求至第一存储设备600。第一存储设备为主阵列,第一存储设备600中的物理节点a为主节点,则由所述物理节点a对所述请求进行处理。54.步骤s302,物理节点a建立全局视图604,并同步所建立的全局视图604至全局视图中的其他虚拟节点对应的物理节点。55.在第一存储设备600与第二存储设备700建立网络连接后,第一存储设备600会获取第二存储设备700中各物理节点的标识,及每个物理节点的ip地址。在建立所述全局视图604时,所述节点a为第一存储设备600及第二存储设备700中的每个物理节点分配虚拟标识,以标识虚拟节点,并建立全局视图记录所述虚拟节点的虚拟标识。每个物理节点的计算资源,例如处理器资源及内存资源即为所述虚拟节点分配的计算资源,在其他实施例中,除了所述计算资源,还可以给每个虚拟节点分配其他的物理资源,例如带宽等。在本技术实施例中,各个虚拟节点所分配的物理资源是相互独立的,这样,对于一个存储设备来说,可以更方便的对存储设备进行扩容,例如,当个存储设备中增加了新的物理资源,根据新的物理资源生成新的虚拟节点,从而增加虚拟节点的数量,并将新添加的虚拟节点加入所述全局视图。在分布式的存储里,所增加的服务器作为新增的物理资源,根据所增加的服务器建立虚拟节点,从而增加全局视图中虚拟节点的数量。所建立的全局视图如图3b中的vcluster所示,例如,为第一存储设备600中的物理节点a及物理节点b分配虚拟标识vnodea及vnodeb,为第二存储设备700的物理节点c及物理节点d分配虚拟标识vnodec及vnoded。在生成所述全局视图604后,所述节点a将所述全局视图604存储至内存603及持久性存储设备601中,然后将所述节点集合表604同步至其他虚拟节点对应的物理节点中(物理节点b、c及d),及第二存储设备700的持久性存储介质701中。56.步骤s303,物理节点a根据所述节点集合生成分片(shard)视图,并同步所述shard视图至虚拟节点集群中的其他虚拟节点对应的物理节点中。57.在本技术实施例中,会为所述虚拟集群设置预设数量的shard,例如4096个,这些shard会均分给所述全局视图604中各个虚拟节点,即生成shard视图。所生产的shard视图如图3b中的shard视图所示。所述shard用于将文件系统605的目录及文件分布存储至所述全局视图604中的各个虚拟节点对应的物理节点中,关于shard视图的具体作用将在下文做详细介绍。在shard视图生成之后,所述物理节点a将所述shard视图存储至本地内存603及持久性存储介质601,并同步所述shard视图至其他虚拟节点对应的物理节点中(物理节点b、c及d),及第二存储设备700的持久性存储介质701中。58.步骤s303,物理节点a生成数据备份策略,并同步所述数据备份策略至虚拟节点集群中的其他虚拟节点对应的物理节点中。59.为了保证数据的可靠性,防止设备故障后数据丢失,本技术实施例可设置数据备份策略,即将所生成的数据备份至多个节点。本技术实施例中的备份策略为对数据进行3副本备份,其中两份存储在本地的两个物理节点中,另外一份存储在远端存储设备的物理节点中。具体地,如图3b所示的备份策略,为每个虚拟节点设置一组备份节点,例如设置虚拟节点vnodea的对应的备份节点为虚拟节点vnodeb及vnodec,虚拟节点vnodeb对应的虚拟节点为vnodea及vnoded,虚拟节点vnodeb对应的虚拟节点为vnodea及vnoded,虚拟节点vnoded对应的虚拟节点为vnodec及vnodeb。在备份策略生成之后,所述节点a将所述备份策略存储至本地内存603及持久性存储设备601中,并同步所述备份策略至第二存储设备700的持久性存储设备701及全局视图中的其他虚拟节点对应的物理节点中。60.图3a虚拟集群的建立由一个管理模块执行,在图3a及图4a中以所述管理模块位于第一存储设备为例进行说明,该管理模块生成所述文件系统及全局视图后,可以将所生成的文件系统及全局视图发送给第一存储设备及第二存储设备进行存储。在其他实施例中,所述管理模块也可以位于一个独立的第三方管理设备上,第三方的管理设备在生成所述文件系统及全局视图后,发送给第一存储设备及第二存储设备中的存储,使各个物理节点都可以获取所述全局视图。61.在所建立的虚拟集群运行期间,会通过一个监控模块监控第一存储设备及第二存储设备中的虚拟节点的变化,当侦测到所述虚拟集群中增加了新的虚拟节点,或者当虚拟节点被删除,例如虚拟节点对应的物理节点故障,则所述监控模块会通知所述管理模块更新所述全局视图。所述监控模块可以位于所述第三方管理设备上,也可以位于第一存储设备及第二存储设备中。第一存储设备作为主存储设备,第二存储设备会将监控到的变化发送至第一存储设备,由第一存储设备中的管理模块更新所述全局视图。如此即可完成虚拟节点集群的建立,在虚拟节点集群建立好之后,所述第一存储设备600及所述第二存储设备700即可根据客户端的请求建立文件系统。具体如图4a的流程图所示。62.步骤s401,物理节点a接收文件系统创建请求。63.第一客户端800可以向第一存储设备600发送所述文件系统创建请求,也可以向第二存储设备700发送文件系统创建请求,如果是第一存储设备600接收所述文件系统创建请求,则由所述物理节点a处理所述文件系统创建请求,如果是第二存储设备700接收所述文件系统创建请求,则第二存储设备700转发所述文件系统创建请求至所述第一存储设备600的物理节点a处理。64.步骤s402,物理节点a为所述文件系统设置根目录。65.所述主节点在设置所述根目录时,首先生成根目录的标记,一般情况下,根目录的默认标记为“/”,接着为所述根目录分配标识信息及shardid。由于在主节点创建的shard视图同步到了所有节点,所以,主节点从自己的内存中获取所述shard视图,从中为所述根目录选择shardid。如图3b所示,所述shard视图中每个虚拟节点都被分配了多个shardid,所以,为了减少跨网络及跨节点的访问,会优先从物理节点a对应的虚拟节点vnodea所包括的shardid中为所述根目录分配shardid。由于是根目录,shardid还没有被分配过,则例如可以选择shard0作为所述根目录的shardid。66.步骤s403,物理节点a发送文件系统的挂载命令至所述第一客户端800。67.在所述集群文件系统的根目录生成之后,为了能使第一客户端800访问所述文件系统,物理节点a会将所述文件系统挂载至所述第一客户端800的文件系统中。例如,物理节点a通过mount命令将所述文件系统的根目录提供至第一客户端800,物理节点a在发送mount命令时,会携带所述根目录的参数信息,所述根目录的参数信息即为所述根目录的句柄信息,所述句柄信息中携带了所述根目录的shardid及标识信息。68.步骤s404,所述第一客户端800根据所述挂载命令将所述集群文件系统挂载至所述第一客户端800的文件系统中。69.在第一客户端800收到所述文件系统的根目录参数信息后,会在第一客户端的文件系统上生成一个挂载点,并在所述挂载点处记录所述文件系统的根目录的参数信息,所述挂载点为一段存储空间。70.如此,第一客户端800除了可以通过第一文件系统608与第一存储设备600进行数据传输外,还可以通过所述文件系统605与第一客户端800进行数据传输。用户可以根据实际需求选择需要访问的文件系统。71.步骤s405,物理节点a为所述文件系统分配虚拟卷。72.每个新建的文件系统都会被分配一个虚拟卷vvloume0,用于写入第一客户端或者第二客户端写入该文件系统的数据。步骤s406,物理节点a为所述虚拟卷创建镜像卷对。73.在虚拟卷vvloume0建立之后,所述物理节点a首先会基于所述持久性存储介质601创建一个本地卷,例如图2中的第一卷,然后请求第二存储设备700在第二存储设备700中创建所述第一卷的镜像卷,例如图2中的第二卷文件系统文件系统。74.步骤s407,物理节点a通过记录所述虚拟卷对应镜像卷对生成刷盘策略。75.所生成的刷盘策略如图3b所示的刷盘策略所示,文件系统的虚拟卷对应的镜像卷对(第一卷及第二卷)。根据图3b所示的刷盘策略,可以将内存中缓存的所述文件系统的数据分别存储至所述第一存储设备600的持久性存储介质601及第二存储设备700的持久性存储介质701中,从而保证数据的可靠性。具体如何根据所述刷盘策略将内存中的数据写入持久性存储介质601及持久性存储介质701将在图9中做详细描述。76.在生成刷盘策略后,物理节点a将所述文件系统刷盘策略存储至本地内存603及持久性存储设备601,并将其同步至第二存储设备700的持久性存储设备701及全局视图中的其他虚拟节点对应的物理节点中。77.通过执行图3a及图4b的方法,即可完成active-active的双活文件系统的创建,文件系统创建完成的双活存储系统的示意图如图4b所示,即在第一存储设备和第二存储设备之上生成跨设备的文件系统、虚拟卷、shard视图,及全局视图。78.在在active-active的双活存储系统创建完成之后,即可基于所述文件系统进行目录及文件的创建与访问。79.首先,结合图5所示的流程图说明在所述文件系统下创建目录的过程。下面以所述根目录为父目录,将待创建的目录作为所述父目录的子目录进行介绍。本技术实施例中,用户可以通过第一客户端访问第一存储设备创建所述子目录,也可以通过第二客户端访问第二存储设备创建所述子目录。在第一存储设备将所述文件系统挂载至所述第一客户端时,即建立了第一客户端访问所述文件系统的路径,例如第一存储设备通过物理节点a将所述文件系统挂载至所述第一客户端,则第一客户端则会通过所述物理节点a访问所述文件系统。为了实现active-active的双活访问,第二存储设备也会将所述述文件系统挂载至所述第二客户端的文件系统,如此则建立了第二客户端访问所述文件系统的路径,第二客户端访问所述文件系统的请求会被发送至挂载所述文件系统的物理节点,例如物理节点c。下面以用于通过第二客户端发送子目录创建请求至第二存储设备为例说明子目录的创建过程。80.具体创建过程如图5的流程图所示。81.步骤s501,所述第二客户端发送子目录创建请求至物理节点c。82.所述物理节点c为第二存储设备700的主节点,也就是挂载所述文件系统至所述第二客户端的节点。所述子目录创建请求包括父目录的参数信息及子目录的名称。83.步骤s502,物理节点c接收第二客户端发送的创建请求,根据所述创建请求为所述子目录生成参数信息。84.所述参数信息包括父目录的标识信息及shardid,所述标识信息用于唯一标识所述子目录,所述标识信息例如为nfs文件系统中的对象id。在生成shardid时,所述物理节点c查找所述shard视图,从所述shard视图内记录的shardid中为所述子目录分配一个shardid,然后在该shardid所归属的虚拟节点对应的物理节点中创建所述子目录。需要说明的是,每个目录可以分配一个shardid,但是一个shardid可以被分配给多个目录。在本技术实施例中,为了减少数据的转发,会在接收到所述子目录请求的物理节点对应的虚拟节点的shardid中为所述子目录分配shardid,即在物理节点c对应的虚拟节点vnodec中所对应的shard[2048,3071]中为所述子目录分配shardid。但在所述虚拟节点vnodec中shardid对应的目录超过预设阈值的时候,则会为所述子目录分配其他虚拟节点对应的shardid。[0085]步骤s503,物理节点c创建所述子目录。[0086]创建所述子目录包括为所述子目录生成目录入口表(directoryentrytable,det)及inode表。所述目录入口表用于记录所述子目录创建成功之后,所述子目录作为父目录,在其下所建立的子目录或者文件的参数信息,所述参数信息例如包括子目录的名称,目录或者文件的标识信息及shardid等。[0087]inode表用于记录后续在所述子目录中所创建的文件的详细信息,例如文件的文件长度、用户对文件的操作权限、文件的修改时间等信息。[0088]步骤s504,物理节点c根据所述父目录的参数信息确定所述父目录所归属的第一存储设备中的物理节点b。[0089]所述父目录的参数信息中包括shardid,通过在所述shard视图可以确定所述shardid对应的虚拟节点为虚拟节点vnodeb,则进一步根据所述虚拟节点vnodeb确定所述虚拟节点vnodeb对应的物理节点为所述第一存储设备中的物理节点b。[0090]步骤s505,物理节点c将所述子目录的参数信息及所述父目录的参数信息发送至所述物理节点b。[0091]步骤s506,物理节点b根据所述父目录的参数信息找到所述父目录的目录入口表。[0092]具体地,可根据所述父目录的参数信息中的shardid及父目录名称找到所述父目录。[0093]步骤s507,物理节点b将所述子目录的参数信息记录在所述父目录的目录入口表中。[0094]步骤s508,物理节点b将所述子目录的参数首先返回给所述物理节点c,物理节点c再将所述子目录的参数返回给所述第二客户端。[0095]在文件系统中访问文件,例如文件读取或者文件创建的过程中,由于文件创建在目录下,所述首先要查找到目录,才能进一步对该目录下的文件进行访问,如果所访问的文件在多层目录下,则需要逐层查询目录,直到查找到最底层的目录。例如,对于多层目录filesysterm1/user1/favorite,由于根目录的参数信息已记录在所述第一客户端的文件系统中,所以所述客户端首先会根据根目录filesystem1的参数信息查询所述子目录user1的参数信息,即生成查询所述user1的请求,等查询到所述user1的参数信息后,再根据所述user1的参数信息查询所述favorite的参数信息,即生成查询所述favorite的请求。每个层级的目录的参数信息的查询方法相同,下面以上层目录为父目录,待查询的目录为子目录为例,说明一次目录查询的过程。本技术实施例中仍然以第二存储设备的物理节点c接收到查询请求为例进行说明[0096]步骤s601,第二客户端发送子目录的查询请求至物理节点c。[0097]所述查询请求中携带所述父目录的参数信息及子目录的名称。所述父目录的参数信息例如为所述父目录句柄。在所述父目录为根目录时,则从所述客户端的文件系统中获取所述根目录的句柄。当所述父目录为不是根目录时,则可通过查询所述父目录的查询请求查询到所述父目录的句柄。[0098]所述父目录的句柄中包括所述父目录的标识信息及shardid。[0099]步骤s602,物理节点c接收第二客户端发送的查询请求,根据所述查询请求确定所述父目录所归属的物理节点b。[0100]物理节点c从所述根目录的参数信息中获取所述根目录的shardid,根据所述shardid获取所述父目录所归属的虚拟节点。[0101]由于物理节点a将创建的shard视图同步到了所有节点,所以,物理节点c从自己的内存中获取所述shard视图,根据所述父目录的shardid确定所述父目录所归属的虚拟节点,再确定所述虚拟节点对应的物理节点。[0102]步骤s603,物理节点c将所述父目录的参数及所述子目录的名称发送至所述父目录所在的物理节点b。[0103]步骤s604,物理节点b根据所述父目录的参数确定所述父目录的目录入口表。[0104]请参考图5的描述,在物理节点b创建所述父目录时,会为所述父目录创建目录入口表,所述目录入口表中记录了在所述父目录下创建的所有子目录的参数信息。[0105]步骤s605,物理节点b从所述父目录的目录入口表中获取所述子目录的参数信息。[0106]步骤s606,物理节点b将所述子目录的参数信息返回给所述物理节点c。[0107]步骤s607,物理节点c将所述子目录的参数信息返回给所述第二客户端。[0108]图5及图6以第二客户端访问第二存储设备并在文件系统中创建子目录及查询子目录的为例进行说明,但在实际应用中,第一客户端也可以通过访问所述第一存储设备进行所述子目录的创建及查询。[0109]在查询到子目录或者创建了新的子目录后,第一客户端或者第二客户端可以获取所述子目录的参数信息,然后可根据所述子目录的参数信息在所述子目录中创建文件。下面以用户通过第一客户端访问第一存储设备,并在子目录中创建文件的过程进行说明,具体如图7所示。[0110]步骤s701,客户端发送文件生成请求至物理节点a。[0111]所述文件生成请求携带所述子目录的参数信息及文件名。[0112]如图5或图6所述,物理节点a已经将所述子目录的参数信息发送至所述客户端,所以所述客户端需要在所述子目录中创建文件时,可在所述文件查询请求中携带所述子目录的参数信息及所述文件的文件名。[0113]步骤s702,物理节点a在接收到所述文件生成请求后,根据所述子目录的参数信息确定所述子目录所归属的物理节点d。[0114]确定所述子目录所归属的物理节点d的方式与图6中的步骤s602相同在此不再赘述。[0115]步骤s703,物理节点a将所述子目录的参数信息及所述文件名发送至所述物理节点d。[0116]步骤s704,所述物理节点d确定所述文件是否已经创建。[0117]所述物理节点d根据所述子目录的参数中的shardid及子目录名称找到所述子目录,然后找到所述子目录对应的det,并在所述det中查找所述文件名,如果存在,则说明有相同文件名的文件已经创建,则执行步骤s705,如果不存在,则说明可以在所述子目录中创建所述文件,则执行步骤s706。[0118]步骤s705,所述节点d发送所述文件名已被创建的反馈至节点a,节点a进一步反馈给第一客户端。[0119]第一客户端收到所述反馈消息后,可进一步通过通知消息通知用户,相同文件名的文件已存在,用户可根据该提示信息做进一步操作,例如修改文件名。[0120]步骤s706,所述节点d创建所述文件。[0121]所述节点d创建文件时,为所述文件设置参数,例如分配shardid,分配文件标识信息,并将shardid及文件标识信息添加至所述子目录的det中。如图5中的步骤s503所述,在创建所述子目录时,会为子目录生成inode表,所述inode表用于记录在所述子目录下所生成的文件的信息,所以,在本步骤中,在节点d创建了所述文件后,会将所述文件的信息添加至所述子目录中的inode中。所述文件信息包括文件长度、用户对文件的操作权限、文件的修改时间等信息。[0122]步骤s707,物理节点d反馈所述文件参数。[0123]物理节点d首先将所述反馈信息发送至节点a,节点a则进一步将所述反馈信息反馈给第一客户端。[0124]在步骤s702中,当所述物理节点a确定所述子目录的归属节点为所述物理节点a时,则由物理节点a执行上述步骤s704至s707。[0125]在此需要说明的是,图6中生成的子目录及图7中生成的文件都会根据图3b设定的备份策略备份到对应的备份节点中。[0126]在文件创建好后,用户即可在所述文件写入数据。用户可通过连接至第一存储设备的第一客户端及连接至第二存储设备的第二客户端在所述文件中写入数据。下面以用户通过第一客户端访问第一存储设备,对所述文件进行数据写入的过程为例进行说明,具体如图8所示。[0127]步骤s801,物理节点a接收对所述文件的写入请求。[0128]在本技术实施例中,由于任一节点都存储有文件系统,所以用户可以通过连接至任一节点的客户端访问所述文件系统中的文件。[0129]所述写入请求中携带所述文件的地址信息,所述地址信息包括所述文件的参数信息、偏移地址及待写数据。在本技术实施例中,所述文件的参数信息即为所述文件的句柄,包括文件系统标识、文件标识、及shardid。[0130]步骤s802,物理节点a根据所述写入请求确定所述文件的归属节点d。[0131]根据所述文件的shardid确定记录所述文件的归属节点d的方式请参考图6中的步骤s602,在此不再赘述。[0132]步骤s803,所述物理节点a将所述写请求转发至所述物理节点d。[0133]步骤s804,所述物理节点d将对所述文件系统的访问转换为对所述文件系统对应的虚拟卷的访问。[0134]由于每个物理节点中都记录了为所述文件系统创建的虚拟卷,则所述物理节点d将所述写请求中的文件系统的标识替换为所述虚拟卷的标识。[0135]步骤s805,所述物理节点d根据所述写请求中的文件标识及shardid找到所述文件并更新所述文件的信息。[0136]所述物理节点d在根据所述文件标识及shardid找到所述文件之后,再根据所述文件标识中包含有所述文件的inode号,在所述inode中找到所述文件对应的inode项,并在其中记录文件的信息,例如根据写请求中携带的待写数据的长度及偏移地址,更新所述文件的长度及偏移地址并将当前时间记录为文件的更新时间。[0137]步骤s806,所述物理节点d根据预设的备份策略,对所述待写数据进行多副本写入。[0138]在建立所述虚拟文件集群时,为所述文件系统建立了备份策略,所述备份策略中为每个节点设定了备份节点,例如,根据图3b设置的备份策略,可以确定所述物理节点d的备份节点为物理节点c及物理节点b,则所述物理节点d在将所述待写数据写入本地内存的同时,将所述待写数据发送至物理节点c及物理节点b,由所述物理节点c及所述物理节点b将所述待写数据写入自己的内存中。[0139]步骤s807,所述物理节点d在确定多副本写入完成后,返回写请求完成的消息至第一客户端。[0140]步骤s808,所述物理节点d对所述待写数据进行持久化存储。[0141]如图3b所示的刷盘策略,文件系统的虚拟卷对应了镜像卷对:第一存储设备中的第一卷及第二存储设备中的第二卷。所述物理节点d根据预设的内存淘汰算法,在确定需要将所述待写数据淘汰至持久性存储,也即刷盘时,先根据所述待写数据中的地址中记录的所述虚拟卷从所述刷盘策略中获取所述虚拟卷对应的镜像卷对,即第一存储设备中的第一卷及第二存储设备中的第二卷,然后将所述第二存储设备的内存中的待写数据写入所述持久性存储701中所述第二卷对应的物理空间中,然后将所述待写数据的的内存地址发送至所述第一存储设备中所述物理节点d对应的备份节点b,物理节点b根据所述内存地址将所述物理节点b的内存中存储的待写数据写入第一存储设备的持久性存储601中所述第一卷对应的物理空间中。[0142]如图9所示,为本技术实施例中对文件进行读取的方法的流程图。[0143]在本技术实施例中,用户同样可以通过任一客户端访问所述文件系统中的文件。本实施例以用户通过第二客户端读取文件为例进行说明。[0144]步骤s901,物理节点c接收文件的读请求。[0145]所述读请求中携带文件的地址信息,所述地址信息包括文件的参数信息、及偏移地址,所述参数信息即为所述文件的句柄,包括文件系统标识、文件标识、及shardid。在第二客户端发送所述读请求时,已经根据图6所示的方法获取了文件的参数信息。[0146]步骤s902,物理节点c根据所述读请求确定所述文件的归属节点b。[0147]关于文件的归属节点b的确认方式请参考图6中的步骤s602的描述,在此不再赘述。[0148]步骤s903,物理节点c将所述读请求转发至所述归属节点b。[0149]步骤s904,物理节点b将所述读请求对所述文件系统的访问转换为对所述文件系统的虚拟卷的访问。[0150]步骤s905,所述物理节点b根据所述读请求中的地址,从所述物理节点b的内存中读取所述文件。[0151]步骤s906,所述物理节点b返回所述文件。[0152]步骤s907,当所述文件不在所述内存中时,所述物理节点b根据所述刷盘策略中所述虚拟卷对应的第一存储设备中的第一卷,从所述持久性存储601中读取所述文件,并返回给所述物理节点c,所述物理节点c再将所述文件返回给所述第二客户端。[0153]本技术实施例中,第一存储设备及第二存储设备在进行文件及目录的访问的时候,都是基于shardid将访问请求转发至文件及目录的归属节点,这样,会导致跨设备进行数据的访问,从而影响访问效率。在本技术实施例提供的一种可能的实现方式中,由于第一存储设备及第二存储设备都备份了对端的数据,所以在收到访问对端数据的访问请求时,可以从本端备份的对端的备份数据中获取需要访问的数据,而无需从对端获取所访问的数据,从而提高了数据的访问效率。[0154]当所述active-active双活存储系统中的一个存储设备故障后,则可以通过备份数据接管故障存储设备的业务。如图10所示,在第一存储设备及第二存储设备之间的链路断开,或者第二存储设备故障后,可以通过第一存储设备中存储的第二存储设备的备份数据接管第二存储设备的业务。下面以在第一存储设备及第二存储设备之间的链路断开为例进行说明。具体如图11所示的流程图所示。[0155]步骤s111,第一存储设备和第二存储设备同时侦测对端的心跳。[0156]步骤s112,在侦测不到对端心跳时,第一存储设备和第二存储设备挂起正在执行的业务。[0157]挂起业务,即停止正在执行的访问请求。[0158]步骤s113,第一存储设备和第二存储设备修改全局视图及文件系统。[0159]当侦测不到对端心跳时,则第一存储设备和第二存储设备就要为接管对端的业务做准备,则会对全局视图及文件系统进行修改,会将全局视图中对端的物理节点对应的虚拟节点从全局视图中删除,将备份策略中对端的备份节点删除。例如第一存储设备将全局视图修改为(vnodea,vnodeb),第二存储设备将全局视图修改为(vnodec,vnoded)。另外将文件系统中的shard视图中对端节点对应的虚拟节点的shard修改为本端节点对应的虚拟节点对应的shard。例如,将第一存储设备中的shard视图修改为vnodea[0,2047],vnodeb[2048,4095];将第二存储设备中的shard视图修改为vnodec[0,2047],vnoded[2048,4095];同时将刷盘策略对端节点的卷删除。[0160]步骤s114,第一存储设备及第二存储设备都向仲裁设备发送仲裁请求。[0161]步骤s115,仲裁设备仲裁第一存储设备接管业务。[0162]仲裁设备可根据收到仲裁请求的先后顺序确定接管业务的设备,例如,先收到的仲裁请求对应的存储设备作为接管业务的设备。[0163]步骤s116,仲裁设备将仲裁结果分别通知到第一存储设备和第二存储设备。[0164]步骤s117,第二存储设备接收到所述通知后,解除与第二客户端的连接,即停止业务的执行。[0165]步骤s118,第一存储设备接收到所述通知后,将第二存储阵列的ip地址漂移至第一存储设备,并建立与第二客户端的连接。[0166]步骤s119,通过第二存储阵列的备份数据接管第二存储阵列的业务。[0167]由于所述第一存储设备中存储了所述第二存储阵列的备份数据,所以在第一存储设备接收到所述第一存储设备中的数据的访问时,可以通过访问请求中的shardid将第一客户端及第二客户端对第二存储设备中的数据的访问请求定位到对所述备份数据的访问,从而使第一客户端及第二客户端感知不到链路中断。[0168]在数据访问的过程中,由于备份策略及刷盘策略的更改,写入的数据则只会写入第一存储设备的节点中的内存,并且只在第一存储设备的卷中存储。[0169]以上对本技术实施例所提供方案进行了描述,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1