集群中的虚拟共享存储的制作方法

文档序号:6504512阅读:138来源:国知局
集群中的虚拟共享存储的制作方法
【专利摘要】本发明涉及集群中的虚拟共享存储。本发明通过在利用共享存储的集群内创建存储名字空间来使得建立该集群的成本最小化,该存储名字空间使得物理上连接到该集群中的各节点中的任一个的每一存储设备显现为物理上连接到该集群中的所有节点。虚拟主机总线适配器(VHBA)在每一节点上执行,并且被用于创建存储名字空间。每一VHBA确定哪些存储设备物理上连接到VHBA在其上执行的节点,以及物理上连接到其他节点中的每一个的每一存储设备。以此方式确定的所有存储设备被聚集到存储名字空间,该存储名字空间随后被呈现给每一节点上的操作系统以提供该存储名字空间中的所有存储设备物理上连接到每一节点的假象。
【专利说明】集群中的虚拟共享存储
【技术领域】
[0001 ] 本发明涉及节点集群,尤其涉及集群中的虚拟共享存储。
【背景技术】
[0002]计算机系统及相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。现在,计算机系统通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排、帐目管理等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统及其他电子设备可在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境中。
[0003]集群是按允许多个计算机(例如,服务器)一起工作以通过在该集群的一节点停工时实现故障切换来提供高度可用的应用的方式将该多个计算机互连的技术。为实现集群,需要共享存储。例如,为使得应用能在集群中从第一节点故障切换到第二节点,需要共享存储以使得该应用可继续访问共享存储中的相同数据,而不论该应用是在第一节点还是第二节点上执行。实现故障切换的应用被称为是高度可用的。
[0004]图1描绘了包括三个服务器节点101-103和共享存储104的典型现有技术集群体系结构100。节点101-103中的每一个在物理上连接到共享存储104以使得在每一节点上执行的应用能够访问储存在共享存储104上的数据。节点101-103中的每一个还被示为分别包括本地存储设备110-111、112-113以及114-115。本地存储设备110-115表示硬盘驱动器、固态驱动器或典型地包括在服务器中的其他本地存储设备。换言之,服务器101-103中的每一个可以表示从诸如IBM、Dell或HP等第三方供应商购买的服务器。
[0005]在图1中,共享存储104表示包含诸如驱动器等存储硬件以及用于使得存储硬件能作为共享存储被访问(例如,作为存储区域网络(SAN))的联网组件的箱。这样的组件可包括例如主机适配器、光纤通道(fibre channel)交换机等。存储阵列104可以是由第三方供应商提供的诸如EMC存储解决方案等存储解决方案。
[0006]存储阵列104 —般是集群的昂贵组件(例如,在一些集群中超过数百万美元)。此夕卜,存储阵列104不是在建立集群时唯一的重大开支。对于与存储阵列104进行通信的每一节点,每一节点将需要适当的存储组件,如主机总线适配器(HBA)。例如,如果光纤通道被用于将每一节点连接到存储阵列104,则每一节点将需要光纤通道适配器(在图1中表示为组件101a-103a)。还将需要光纤通道交换机来将每一节点连接到存储阵列104。这些附加组件增加了建立集群的开支。
[0007]如图所示,典型的集群体系结构需要每一节点直接连接到存储阵列104。因此,为建立集群,公司通常购买多个服务器、用于每一服务器的操作系统、共享存储解决方案(存储阵列104)以及其他必要组件(如用于将服务器与共享存储互连的那些组件)(例如,组件101a-103a、105 等)。
【发明内容】

[0008]本发明涉及用于使建立利用共享存储的节点集群的成本最小化的方法、系统以及计算机程序产品。本发明使得物理上连接到集群中的节点子集的存储设备能作为共享存储从该集群中的任何节点来访问。
[0009]本发明提供作为在该集群中的每一节点上执行的软件组件的虚拟主机总线适配器(VHBA),它提供从节点的观点来看等效于上述SAN的用途的共享存储拓扑结构。VHBA通过扩展可在集群中用作为共享存储的存储设备的类型来提供这一共享存储拓扑结构。例如,VHBA允许直接附连到该集群的一节点的存储设备的要被用作共享存储的用途。具体而言,通过在每一节点上安装VHBA,集群中的每一节点将能够使用如上所述地共享的盘以及不处于共享总线上的盘(如节点的内部驱动器)。此外,本发明允许集群将廉价驱动器(如SATA和SAS驱动器)用作共享存储。
[0010]在一个实施例中,集群中的每一计算机系统上的VHBA在每一计算机系统上创建存储名字空间,该存储名字空间包括物理上连接到该节点的存储设备和物理上连接到该集群的其他节点的设备。每一计算机系统上的VHBA查询集群中的其他计算机系统中的每一个上的VHBA。该查询请求枚举物理上连接到该VHBA所处的计算机系统的每一存储设备。
[0011]每一计算机系统上的VHBA接收来自其他VHBA中的每一个的响应。每一响应枚举物理上连接到对应计算机系统的每一存储设备。每一计算机系统上的VHBA为在本地或通过其他节点来枚举的每一存储设备创建命名虚拟盘。每一命名虚拟盘包括对应存储设备的表示,该表示使得该存储设备看起来就像盘被本地连接到对应的计算机系统。
[0012]存储名字空间包括命名虚拟盘,其中对于给定盘/存储而言,盘序数/地址是跨各集群节点相同的。
[0013]每一计算机系统上的VHBA将每一命名虚拟盘展示给该对应计算机系统上的操作系统。因此,每一计算机系统在本地存储名字空间中将每一存储设备看作物理上连接的存储设备,即使盘没有在物理上连接到该计算机系统也如此。集群确保本地存储名字空间是跨各集群节点相同的。
[0014]在另一实施例中,计算机系统上的策略引擎实现高可用性策略,以确保储存在存储名字空间中的各存储设备上的数据保持对该集群中的每一计算机系统都高度可用。策略引擎经由存储名字空间访问拓扑结构信息。存储名字空间包括多个存储设备。一些存储设备只连接到该集群中的计算机系统的子集,而其他存储设备只连接到该集群中的计算机系统的不同子集。
[0015]策略引擎实现用户定义的策略或内置策略,使得通过独立盘冗余阵列(RAID)技术和/或廉价/独立节点冗余/可靠阵列(RAIN)来保护数据。策略引擎将确保没有给定容错逻辑单元(LU)的两列被分配给给定节点上的盘,这将确保节点故障不会使相关LU (逻辑单元)停止。所使用的RAID类型确定LU可容许的盘故障的数量。例如,双向镜像LU可承受单列故障,因为数据可从第二副本得到满足。
[0016]策略引擎还从所访问的拓扑结构信息确定在DAS (直接访问存储)的情况下,连接到其他节点的至少一个其他存储设备被用来构建基于RAID的LU,使得节点损失不会影响LU的可用性。
[0017]提供本
【发明内容】
是为了以简化的形式介绍将在以下【具体实施方式】中进一步描述的一些概念。本
【发明内容】
不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
[0018]本发明的附加特征和优点将在以下描述中叙述,并且其一部分根据本描述将是显而易见的,或者可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些以及其他特征、优点和特征将根据以下描述和所附权利要求而变得更显而易见,或者可通过如此后阐述的对本发明的实践而获知。
【专利附图】

【附图说明】
[0019]为了描述可获得本发明的上述和其他优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中:
[0020]图1示出了典型的现有技术集群体系结构,其中每一节点直接连接到共享存储;
[0021]图2A示出了其中可实现本发明的共享存储技术的示例计算机体系结构;
[0022]图2B示出了如何使未物理上连接的存储设备看起来像物理上连接的存储设备;
[0023]图2C示出了在示例计算机体系结构中可如何实现镜像;
[0024]图3示出了示例计算机体系结构中的虚拟主机总线适配器(VHBA)和虚拟盘目标;
[0025]图4示出了在示例计算机体系结构中请求如何从互连流到VDT、并随后流到具有存储连接性的本地HBA ;
[0026]图5示出了在示例计算机体系结构中共享存储设备和远程存储设备的存在;
[0027]图6示出了用于创建存储名字空间的示例方法的流程图,该存储名字空间包括物理上连接到一个或多个其他计算机系统的存储设备;
[0028]图7示出了在示例计算机体系结构内用于创建镜像的读取组件;
[0029]图8示出了在示例计算机体系结构内用于实施策略的策略引擎;以及
[0030]图9示出了用于实现策略的示例方法的流程图,该策略用于将一存储设备上的内容镜像到存储名字空间中的另一存储设备上。
【具体实施方式】
[0031]本发明涉及用于使建立利用共享存储的节点集群的成本最小化的方法、系统以及计算机程序产品。本发明使得物理上连接到集群中的节点子集的存储设备能作为共享存储从该集群中的任何节点来访问。
[0032]本发明提供作为在该集群中的每一节点上执行的软件组件的虚拟主机总线适配器(VHBA),它提供从节点的观点来看等效于上述SAN的用途的共享存储拓扑结构。VHBA通过扩展可在集群中用作为共享存储的存储设备的类型来提供这一共享存储拓扑结构。例如,VHBA允许直接附连到该集群的一节点的存储设备的要被用作共享存储的用途。具体而言,通过在每一节点上安装VHBA,集群中的每一节点将能够使用如上所述地共享的盘以及不处于共享总线上的盘(如节点的内部驱动器)。此外,本发明允许集群将廉价驱动器(如SATA和SAS驱动器)用作共享存储。[0033]在一个实施例中,集群中的每一计算机系统上的VHBA在每一计算机系统上创建存储名字空间,该存储名字空间包括物理上连接到该节点的存储设备和物理上连接到该集群的其他节点的设备。每一计算机系统上的VHBA查询集群中的其他计算机系统中的每一个上的VHBA。该查询请求枚举物理上连接到该VHBA所处的计算机系统的每一存储设备。
[0034]每一计算机系统上的VHBA接收来自其他VHBA中的每一个的响应。每一响应枚举物理上连接到对应计算机系统的每一存储设备。每一计算机系统上的VHBA为在本地或通过其他节点来枚举的每一存储设备创建命名虚拟盘。每一命名虚拟盘包括对应存储设备的表示,该表示使得该存储设备看起来就像盘被本地连接到对应的计算机系统。
[0035]存储名字空间包括命名虚拟盘,其中对于给定盘/存储而言,盘序数/地址是跨各集群节点相同的。
[0036]每一计算机系统上的VHBA将每一命名虚拟盘展示给对应计算机系统上的操作系统。因此,每一计算机系统在本地存储名字空间中将每一存储设备看作物理上连接的存储设备,即使盘没有在物理上连接到该计算机系统也如此。集群确保本地存储名字空间是跨各集群节点相同的。
[0037]在另一实施例中,计算机系统上的策略引擎实现高可用性策略,以确保储存在存储名字空间中的各存储设备上的数据保持对该集群中的每一计算机系统都高度可用。策略引擎经由存储名字空间访问拓扑结构信息。存储名字空间包括多个存储设备。一些存储设备只连接到该集群中的计算机系统的子集,而其他存储设备只连接到该集群中的计算机系统的不同子集。
[0038]策略引擎实现用户定义的策略或内置策略,使得通过独立盘冗余阵列(RAID)技术和/或廉价/独立节点冗余/可靠阵列(RAIN)来保护数据。策略引擎将确保没有给定容错逻辑单元(LU)的两列被分配给给定节点上的盘,这将确保节点故障不会使相关LU (逻辑单元)停止。所使用的RAID类型确定LU可容许的盘故障的数量。例如,双向镜像LU可承受单列故障,因为数据可从第二副本得到满足。
[0039]策略引擎还从所访问的拓扑结构信息确定在DAS (直接访问存储)的情况下,连接到其他节点的至少一个其他存储设备被用来构建基于RAID的LU,使得节点损失不会影响LU的可用性。
[0040]本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是计算机存储介质(设备)。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质:计算机存储介质(设备)和传输介质。
[0041 ] 计算机存储介质(设备)包括RAM、ROM、EEPROM、CD-ROM、固态驱动器(SSD )(如基于RAM)、闪存、相变存储器(PCM)、其他类型的存储器、其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
[0042]“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络和/或数据链路。以上组合也应被包括在计算机可读介质的范围内。
[0043]此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(设备)(或反之亦然)。例如,通过网络或数据链接接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质(设备)。因而,应当理解,计算机存储介质(设备)可被包括在还利用(甚至主要利用)传输介质的计算机系统组件中。
[0044]计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
[0045]本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、平板、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备二者中。
[0046]图2A示出了其中可实现本发明的共享存储技术的示例计算机体系结构200。参考图2A,计算机体系结构200包括三个节点(即服务器):节点201、节点202以及节点203。
[0047]所描绘的节点中的每一个都通过诸如例如局域网(“LAN”)、广域网(“WAN”)或甚至因特网之类的网络彼此连接(或者是网络的一部分)。因此,所描绘的节点中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP,,)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
[0048]节点201和202中的每一个被示为包括两个本地存储设备(分别是210-211以及212-213),但一个节点可包括任何数量的本地存储设备,而节点203被示为不包括任何本地存储设备。这些存储设备可以是任何类型的本地存储设备。例如,典型的服务器可包括一个或多个固态驱动器或硬盘驱动器。
[0049]本地存储设备旨在意味着节点本地的存储设备(即物理上连接到该节点),无论该设备被包括在服务器外壳内或处于服务器外壳的外部(即,外部硬盘驱动器)。换言之,本地存储设备包括这样的驱动器:包括在典型的膝上型计算机或台式计算机内的硬盘驱动器、经由USB连接到计算机的外部硬盘驱动器或不可通过网络访问的其他驱动器。
[0050]虽然为简明起见图2A中的示例使用本地存储设备,但如以下参考图6描述的,本发明的共享存储技术适用于物理上连接到一个节点而非来自集群中的至少一个其他节点的任何存储设备。这包括只在物理上连接到集群中的节点子集(例如,一个)的远程存储阵列以及在节点中的一些之间共享的存储设备(例如,共享阵列)。
[0051]不管存储设备的类型(包括远程和本地存储设备)为何,计算机系统使用在本说明书中被称为主机总线适配器(HBA)的事物来与存储设备通信。HBA是存储栈的最低层处的与存储设备对接的组件(通常是硬件)。HBA实现用于通过将计算机系统连接到存储设备的总线来进行通信的协议。不同的HBA可被用于用来将计算机系统连接到存储设备的每一不同类型的总线。例如,SAS或SATA HBA可被用于与硬盘驱动器进行通信。类似地,光纤通道HBA可被用于与通过光纤通道连接的远程存储设备进行通信。类似地,以太网适配器或iSCSI适配器可被用于通过网络与远程计算机系统进行通信。因此,HBA旨在包括用于通过本地(存储)总线、网络总线进行通信或在各节点之间进行通信的任何适配器。
[0052]本发明使得节点201和202中的本地存储设备中的每一个在计算机体系结构200中的其他节点中的任一个节点处作为共享存储可见。这在图2B中示出。图2B中的每一节点被(用虚线)示为包括来自其他节点的本地存储设备,以表示这些其他本地存储设备对该节点而言可作为共享存储来访问。例如,节点203被示为能访问节点201上的本地存储设备210、211以及节点202上的本地存储设备212、213。存储设备被用虚线示出以指示存储设备显现为物理上连接到该节点(即,连接到VHBA上的存储栈的各层(例如应用)),即使该存储设备并没有物理上连接到该节点。存储设备可以是物理上连接的,例如通过小型计算机系统接口(SCSI)、串行附连SCSI(SAS)、串行AT附连(SATA)、光纤通道(FC)、因特网SCSI(iSCSI)等等。在这些示例中,FC和iSCSI存储不是本地的,相反,它们是通过交换机等连接的。因而,如本文所使用的,物理上连接到一节点的存储是掩蔽(mask)到该节点的存储。这可以是直接附连的存储、和/或存储网络上的掩蔽到特定计算机节点的盘。物理上连接的存储被通过诸如本文描述的机制等机制展示给其他节点。
[0053]以此方式,可使用各节点内的现有本地或其他物理上连接的存储设备来实现共享存储,而不必使用单独的共享存储(如图1中的共享存储104)。通过使用每一节点的本地存储设备来实现共享存储,实现集群的成本可被极大地降低。
[0054]本发明的各实施例还可补偿节点故障。例如,如果节点201停工,则存储设备210和211将也停工(因为它们是节点201的一部分)。结果,节点202和203上的虚拟化存储设备210、211将不再可用(因为节点202和203不能在物理上访问节点201上的存储设备210、211)。因而,在节点201上运行并访问存储在设备210或211上的数据的应用将不能够故障切换到节点202或203,因为存储在设备210或211上的数据将保持从节点202和203不可访问。
[0055]RAID技术可被用来吸收盘故障,例如镜像,或其他类型的RAID阵列可被用来补偿这些和其他类似事件。图2C示出了如何可实现镜像以确保在主机节点停工时本地存储设备上的数据不会变得不可访问。如图2C所示,存储在本地存储设备210和211上的数据的至少一些被镜像(即,复制)到本地存储设备212和213中的一个或多个上(示为来自设备210的数据210d被复制到设备213,且来自设备211的数据211d被复制到设备212)。类似地,存储在本地存储设备212和213上的数据的至少一些被镜像到本地存储设备210和211中的一个或多个上(示为来自设备212的数据212d被复制到设备211,且来自设备213的数据213d被复制到设备210)。以此方式,如果节点201或202中的任一个停工,则存储在故障节点的本地存储设备上的数据将仍然能在集群中的每一节点处访问,因为该数据被镜像在另一节点上。
[0056]例如,如果节点201停工,则在节点201上执行并访问设备210上的数据的应用可故障切换到节点203,并且通过访问被镜像在节点202上的设备213上的数据来继续访问相同数据。注意,数据可被镜像在超过一个节点上。例如,如果节点203也包括本地存储设备,则设备210-213中的任一设备上的数据可被镜像在节点203的存储设备上。在该示例中,还要注意,如果节点203包括本地存储设备,则该本地存储设备也可按上述方式被虚拟化(即,使之作为共享存储可用)在节点201和202上。换言之,来自多个节点的本地存储设备可被虚拟化在任何给定节点上。
[0057]图3示出了表示用于在集群的其他节点上将一个节点的本地存储设备虚拟化为共享存储的特定实现的计算机体系结构200的更详细视图。图3类似于图2B,其中在每一节点上分别包括虚拟盘目标(VDT) 220-222和虚拟主机总线适配器(VHBA) 230-232。
[0058]虚拟盘目标是节点的组件(一般是操作系统的组件,它能够枚举该节点上存在的本地存储设备或该节点能直接访问的任何存储设备)。例如,节点201上的DT220能够枚举节点201上存在的本地存储设备210和211。在一集群中,使得每一节点知晓(通过集群服务)该集群中的其他节点,包括其他节点中的每一个上的DT。如下文进一步描述的,每一 DT还担当用于接收来自远程节点的通信的端点。
[0059]VHBA是存储栈的与HBA相同的层处的虚拟化。VHBA从存储栈的较高层(例如,应用)抽象出在该节点上可用的存储设备的具体拓扑结构。如下文更详细地描述的,VHBA担当节点上的HBA与存储栈的较高层之间的中介以提供以下假象:每一节点在其本地存储名字空间中看到相同的一组盘,如同各节点都连接到共享存储一样。将用物理上连接到该节点的盘和物理上连接到集群中的其他节点的盘来填充本地存储名字空间。在一些实施例中,每一节点基于存储发现来构建存储名字空间。所有参与集群的节点枚举相同的一组存储设备并且它们的地址也相同。结果,名字空间在集群节点中的每一个上是相同的。
[0060]节点上的VHBA被配置成与每一节点(包括该VHBA所处的节点)上的DT进行通信以确定在各节点上什么本地存储设备是可用的。例如,VHBA230查询DT220、DT221以及DT222以分别寻找节点201、202以及203上的本地存储设备的列表。作为响应,DT将向VHBA230通知存储设备210和211在节点201本地;DT221将向VHBA230通知存储设备212和213在节点202本地;而DT222将向VHBA230通知没有存储设备在节点203本地。
[0061 ] VHBA从对节点上的DT进行查询获得的信息包括每一存储设备的属性。例如,在被VHBA230查询时,DT221可向VHBA230通知存储设备212的属性,如设备类型、制造商以及在节点202上可获得的其他属性。
[0062]一旦节点的VHBA确定了哪些存储设备在该集群的每一节点的本地,该VHBA就创建虚拟化对象以表示被标识为处于该节点本地的每一存储设备。虚拟化对象可包括对应存储设备的属性。例如,在图3中,VHBA232将创建四个虚拟化对象,存储设备210-213中的每一个都有一个虚拟化对象。这些虚拟化对象将以如下方式对在节点203上执行的应用浮现:使得存储设备210-213看起来如同它们是节点203上的本地存储设备。换言之,节点203上的应用一般将不能区分节点203本地的存储设备(在该示例中没有)和另一节点本地的那些存储设备(存储设备210-213)。
[0063]使用另一示例,在节点201上,VHBA230使得表示存储设备210和211 (它们是本地存储设备)以及存储设备212和213 (它们不是本地存储设备)的虚拟化对象浮现。从节点201上的应用的观点来看,存储设备212和213是以与存储设备210和211相同的方式来访问的。通过这一过程,节点201-203中的每一个将相同的存储名字空间(即,存储设备210-213)看作为该集群的共享存储。
[0064]为了实现其他节点的存储设备在一节点本地的假象,VHBA对I/Q请求的处理进行抽象。再次参考图3,如果节点201上的应用要请求对存储设备210 (本地存储设备)的I/0,则该I/O请求将被路由到VHBA230。VHBA230随后将该I/O请求路由到节点201上的适当的HBA (例如,在存储设备210是经由SAS总线连接的硬盘的情况下,路由到SAS HBA)。
[0065]类似地,如果节点201上的应用要请求对存储设备212的1/0,则该I/O请求也将被路由到VHBA230。因为VHBA230知道存储设备212的实际位置,所以VHBA230可将该I/O请求路由到节点202上的DT221,DT221将该请求重定向到VHBA231。VHBA231随后将该I/O请求路由到节点202上的适当的HBA (例如,在存储设备212是经由SAS总线连接到节点202的情况下,路由到SAS HBA)ο
[0066]VHBA在任何时刻接收访问远程存储设备的I/O请求,该I/O请求都被路由到该远程节点上的DT。该远程节点上的DT随后将该请求重定向到该远程节点上的VHBA。因此,DT用作用于接收来自远程节点的通信的端点,无论通信是请求枚举本地存储设备或是对本地存储设备的I/O请求。
[0067]一旦处理了 I/O请求,则要返回给发出请求的应用的任何数据可通过类似路径来返回。例如,主存所访问的本地存储设备的节点上的VHBA将该数据路由到适当的位置(例如,在发出请求的应用处于同一节点上的情况下,在该节点上沿存储栈向上路由,或者在发出请求的应用在另一节点上的情况下,路由到该另一节点上的DT)。
[0068]图4示出了 VHBA如何路由I/O请求。图4类似于图3。节点201包括HBA410和互连411,HBA410是用于与存储设备210进行通信的HBA,互连411是用于通过节点201和节点202之间的连接来进行通信的互连。类似地,节点202包括HBA412和互连413,HBA412是用于与存储设备212进行通信的HBA,互连413是用于通过节点202和节点201之间的连接来进行通信的互连。
[0069]节点201包括作出两个I/O请求的应用401。第一请求,标记为(I)并用实线画出,是对储存在存储设备210上的数据_乂的请求。第二请求,标记为(2)并用虚线画出,是对储存在存储设备212上的数据_Y的请求。
[0070]从应用401的观点来看,存储设备210-213全部显现为作为在该集群的每一节点上看到的相同存储名字空间的一部分的本地存储设备(例如,每一节点上的应用将存储设备210-213看作物理上连接的存储设备)。如此,应用401通过沿存储栈向下发送请求到VHBA230来按相同的方式作出请求(I)和(2)。注意,应用401如同这些请求是发送给存储设备的实际HBA (如在没有实现本发明的技术的典型计算机系统中完成的那样)一样来作出这些请求。
[0071]VHBA230接收请求(I)和(2)中的每一个并将它们适当地路由。因为VHBA230知道每一存储设备的物理位置(因为已经查询了集群中的每一 DT),所以VHBA230知道请求(I)可被直接路由到节点201上的HBA410以访问存储设备210。VHBA230还知道请求(2)必须被路由到存储设备212所处的节点202。因此,即使对于应用401,看起来数据_¥被存储在物理上连接的存储设备(在节点201上用虚线示出的虚拟化存储设备212),VHBA230知道数据_Y物理上储存在节点202上的物理存储设备212上。
[0072]因此,VHBA230将请求(2)路由到互连411以与节点202上的ΗΒΑ412进行通信。ΗΒΑ412将该请求路由到DT221,DT221将它重定向到VHBA231。VHBA231随后将该请求路由到HBA412以访问存储设备212。
[0073]至此,本公开内容提供了简单的示例,其中每一存储设备都在单个节点本地。然而,本发明不限于这些拓扑结构。在许多集群中,存储设备直接连接到多个节点。同样,存储设备可处于该节点的远程,但仍然物理上连接到该节点。本发明同样适用于这些拓扑结构。具体而言,DT枚举主机计算机系统能直接访问的所有存储设备。
[0074]在图5中,计算机体系结构200已被修改成包括在节点201和202之间共享的存储设备510以及包括连接到节点203的远程存储阵列520。本发明的技术可同样适用于这样的拓扑结构,以创建跨各集群节点相同的在每一节点处可见的存储名字空间,该存储名字空间包括存储设备210-213以及存储设备510和存储阵列520中的存储设备520a_520n。
[0075]用于发现图5中示出的集群中每一存储设备的过程是按上述相同的方式来执行的。具体而言,在查询DT220时,它将响应它能直接访问存储设备210、211以及510。类似地,在查询DT221时,它将响应它能直接访问存储设备212、213以及510。此外,在查询DT222时,它将响应它能直接访问存储阵列520中的存储设备520a_520n中的每一个。
[0076]与只涉及本地存储设备的以上示例形成对比,在该示例中发生的一个变化是因为两个DT都响应它们能直 接访问存储设备510,VHBA将知道存在到达存储设备510的两条路径。这一信息可如下所述地用各种方式来利用。
[0077]如上所述,每一节点上的VHBA将从每一 DT接收物理上连接的存储设备的枚举并创建表示每一存储设备的虚拟化对象。因此,在每一节点处可见的存储名字空间将包括存储设备 210-213,510 以及 520a-520n。
[0078]节点201和202上的应用作出的对存储设备520a_520n的I/O请求将被路由到节点3上的DT222,重定向到VHBA231,并随后路由到用于与存储阵列520进行通信的HBA。如此,对存储设备520a-520n的I/O被按在以上示例中描述的相似方式来执行。
[0079]相比之下,在作出访问存储设备510上的数据的I/O请求时,可执行附加步骤。因为存储设备510物理上连接到节点201和202 (即,存在到存储设备510的两条路径),所以可选择最佳路径来路由I/O请求。例如,如果VHBA232接收到来自节点203上的应用的请求,它可以确定将该请求路由到节点201上的DT220还是节点202上的DT221。这一确定可以基于各策略考虑,包括哪一连接具有较大带宽、负载平衡等等。
[0080]另外,如果到存储设备的一条可用路径出现故障,则对该存储设备的I/O请求可通过到该存储设备的另一可用路径来自动路由。以此方式,故障切换到另一路径将对作出该I/o请求的应用是透明的。具体而言,因为VHBA知道到每一存储设备的每一路径,所以独立于存储栈的较高层处的其他组件的作出请求的应用,VHBA能通过适当的路径将I/O请求转发到存储设备。
[0081]总而言之,物理上连接到一节点的任何存储设备(不论该存储设备如何连接到该节点的具体细节(即,不论本地还是远程))都在跨集群的所有节点相同的存储名字空间内可见。以此方式,对在该集群中的各节点中的任一个上执行的应用而言,存储名字空间中的所有存储设备将显现为共享存储。每一节点上的VHBA提供以下假象:该集群中的每一存储设备在物理上连接在每一节点处,从而允许各应用故障切换到该集群中的其他节点,同时保持对其数据的访问。因而,以并非每一节点都需要直接访问每一存储设备的方式实现了共享存储。如此,建立并维护集群的成本可被极大地降低。
[0082]图6示出了用于在集群中的第一计算机上创建存储名字空间的示例方法600的流程图,该存储名字空间包括物理上连接到该集群中的一个或多个其他计算机系统而没有在物理上连接到该第一计算机系统的存储设备。将参考图3中的计算机体系结构200的组件和数据来描述方法600,但该方法也同样可被实现在图5中的计算机体系结构200中。
[0083]方法600包括查询集群中的各计算机系统中的每一个上的虚拟盘目标的动作(601)。该查询请求枚举物理上连接到该虚拟盘目标所处的计算机系统的每一存储设备。例如,VHBA230可查询DT220-222以枚举物理上分别连接到节点201-203的每一存储设备。
[0084]方法600包括接收来自每一虚拟盘目标的响应的动作(602),该响应枚举物理上连接到对应计算机系统的每一存储设备。来自虚拟盘目标中的至少两个的响应指示至少一个存储设备在物理上连接到对应的计算机系统。所枚举的存储设备中的至少一个没有在物理上连接到该第一计算机系统。例如,VHBA230可接收来自DT220-222的响应。来自DT220的响应可指示存储设备210和211在物理上连接到节点201 ;来自DT221的响应可指示存储设备212和213在物理上连接到节点202 ;以及来自DT222的响应可指示没有存储设备在物理上连接到节点203。
[0085]方法600包括为在接收到的响应中枚举的每一存储设备创建虚拟化对象的动作(603)。每一虚拟化对象包括对应存储设备的表示,该表示使得该存储设备从第一计算机系统来看显现为物理上连接的存储设备。例如,VHBA230可为存储设备210-213中的每一个创建虚拟化对象,以使得存储设备210-213中的每一个看起来像它们全部是节点201上的物理上连接的存储设备。
[0086]方法600包括动作(604),该动作(604)向第一计算机系统上的应用展示每一虚拟化对象,使得该第一计算机系统上的每一应用将每一存储设备看作物理上连接的存储设备,而不论该存储设备是物理上连接到该第一计算机系统还是物理上连接到该集群中的另一计算机系统。例如,VHBA230可将存储设备210-213的虚拟化对象展示给在节点201上执行的应用。这些虚拟化对象使得存储设备210-213中的全部显现为节点201上物理上连接的存储设备,即使存储设备212和213实际上在节点202上。
[0087]方法600可同样实现在诸如节点203等节点上,其中所有存储设备在物理上连接到该集群中的另一节点。换言之,节点203上的VHBA232将通过创建表示存储设备210-213的虚拟化对象来实现方法600,这些虚拟化对象使得这些存储设备对在节点203上执行的应用显现为像它们全部是节点203上的物理上连接的存储设备,即使实际上它们没有一个是物理上连接的。
[0088]一旦在一节点上实现了方法600来创建存储名字空间,该节点上的应用可以执行对名字空间中的存储设备中的任一个的1/0,如同每一存储设备是物理上连接的存储设备。例如,节点201上的应用可按与它从存储设备210读取数据相同的方式从存储设备212读取数据。VHBA230通过接收来自应用的所有I/O请求(B卩,VHBA驻留在互连上的存储栈的最低层)并将该请求适当地路由来创建这一抽象,而不论该请求是否是对物理上连接的存储设备的请求。
[0089]如上所述,除了使用每一节点本地的存储设备在各集群节点中的每一个上创建相同存储名字空间之外,本发明还涉及实现基于RAID的容错设备,例如创建名字空间中各存储设备上的数据的镜像。镜像确保在一节点(或节点上的单独存储设备)停工时存储设备上的数据将不会变得不可访问。
[0090]如上所述,图2C提供了数据如何可被镜像在其他节点的存储设备上的示例。如图7所示,这一镜像可以使用每一节点上的读取组件(例如,节点201上的读取组件710)来实现,该读取组件读取该节点上的本地存储设备的数据并将该数据复制到另一存储设备。这一读取和复制可在任何适当的时间完成,诸如在对存储设备的数据作出变更时或以指定时间间隔。
[0091]为确保创建足够数量的镜像(以维持容错)且镜像被创建在适当的存储设备上,使用策略引擎。类似地,对于其他RAID类型,策略引擎将监视并维护容错存储状态。策略引擎可驻留在集群中每一节点上或至少一些节点上(并且可以是独立组件或可以是包括在VHBA中的功能)。策略引擎确保镜像策略被实现在集群中。
[0092]图8示出了图6中示出的计算机体系结构200,其中在节点201上添加了策略引擎810和策略811。为简明起见,策略引擎未在节点202和203上示出,但每一节点都可包括策略引擎。另外,虽然策略811被示为处于节点201中,但它可被存储在策略引擎810可访问的任何位置(例如,在存储名字空间中的各存储设备中的任一个中)。
[0093]镜像策略可以定义应针对特定存储设备或存储设备上的指定内容来维护的镜像数量、镜像应被创建在何处、在创建新镜像之前节点(或存储设备)可停工多久,等等。例如,策略可以定义应当总是维护存储设备的内容的两个镜像(以使得存在内容的三个副本)。如果包括镜像之一的节点出现故障,则策略引擎可访问该策略以确定应当创建另一镜像。
[0094]类似地,可以定义并实现用于其他RAID类型的策略。
[0095]策略引擎的主要目的是确定应当在何处创建镜像。因为存储名字空间提供所有存储设备物理上连接到每一节点的假象,所以策略引擎利用通过查询DT所获得的拓扑结构信息来确定应当在何处创建镜像以顺应适用策略。例如,存储设备的位置可被用来确保相同内容的多个镜像不被置于同一节点(例如,存储设备212和213中)或机架(例如,与存储阵列处于同一机架)上,以使得在该节点或机架出现故障的情况下两个镜像不会丢失。
[0096]类似地,到特定存储设备的路径信息可被用于这一确定。例如,参考图8,策略引擎810可以使用(由VHBA230通过查询DT220-222获得的)路径信息来确定相同内容的镜像能被置于存储设备210和存储设备510上。这是因为路径信息将标识即使节点201出现故障,存储设备510也仍然是可通过穿过节点202的路径来访问的。
[0097]简言之,策略引擎使用与哪些节点具有对存储设备的直接访问权有关的信息来以遵循策略的方式确定镜像的放置。在许多集群中,策略规定存在内容的三个副本。因此,策略引擎将确保创建原始内容的两个镜像且这些镜像被创建在可独立访问的存储设备上(不论它们在不同的节点上还是可经由不同的路径来访问)。如果主存镜像的存储设备出现故障,则策略引擎可以确定是否需要创建新镜像(例如,如果故障不是被策略定义为临时的),并且如果是,则确定在何处创建镜像以确保内容的三个副本保持独立地可访问。
[0098]图9示出了用于实现用于将存储名字空间的第一存储设备的内容镜像在存储名字空间中的一个或多个其他存储设备上的策略的示例方法900的流程图。将参考图8所示的计算机体系结构200的组件和数据来描述方法900。
[0099]方法900包括访问与集群的存储名字空间有关的拓扑结构信息的动作(901)。存储名字空间包括多个存储设备,该多个存储设备包括物理上连接到集群中计算机系统的子集的一些存储设备和物理上连接到该群集中的计算机系统的不同子集的其他存储设备。例如,策略引擎810可以访问与包括存储设备210-213、510以及520a_520n的存储名字空间有关的拓扑结构信息。
[0100]方法900包括访问定义在存储名字空间的第一存储设备上的内容的至少一些要被复制到该名字空间中的至少一个其他存储设备上的策略的动作(902)。例如,策略引擎810可以访问策略811。策略811可以规定存储设备210上的内容要被镜像在两个其他存储设备上。取代镜像,策略引擎可以部署其他RAID类型。
[0101]方法900包括根据所访问的拓扑结构信息来确定第一存储设备物理上连接到该集群中第一计算机系统的动作(903)例如,策略引擎811可以确定存储设备210物理上连接到节点201 (例如,根据由VHBA230从DT222获得的与物理上连接到节点201的存储设备有关的彳目息)。
[0102]方法900包括根据所访问的拓扑结构信息来确定至少一个其他存储设备物理上连接到该集群中另一计算机系统的动作(904)。例如,策略引擎810可以确定存储设备510物理上连接到节点202且存储阵列520中的存储设备520a物理上连接到节点203。
[0103]方法9 O O包括指令在该至少一个其他存储设备上创建该内容的副本的动作(905)。例如,策略引擎810可以指令读取组件710在存储设备510和520a上创建来自存储设备210的内容的副本。
[0104]本发明可具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求的等价物的含义和范围的所有改变都包含在权利要求的范围内。
【权利要求】
1.在计算机系统集群中,其中每一计算机系统包括一个或多个处理器、存储器、一个或多个主机总线适配器(HBA)以及虚拟主机总线适配器(VHBA) (230-232),一种由所述集群中每一计算机系统上的VHBA (230-232)来执行的方法,所述方法用于在每一计算机系统上创建包括物理上连接到对应计算机系统的存储设备(210-211以及212-213)以及连接到所述集群中其他计算机系统中的每一个的存储设备(210-211以及212-213)的存储名字空间,所述方法包括: 所述集群中每一计算机系统上的VHBA (230-232)查询所述集群中其他计算机系统中的每一个上的VHBA (230-232),所述查询请求枚举物理上连接到被查询VHBA (230-232)所处的计算机系统的每一存储设备(210-211以及212-213) (601); 所述集群中每一计算机系统上的VHBA (230-232)接收来自所述集群中其他VHBA(230-232)中的每一个的响应,每一响应枚举连接到对应计算机系统的每一存储设备(210-211以及212-213),所述响应中的至少一个枚举没有在物理上连接到接收该响应的计算机系统的存储设备(210-211以及212-213) (602); 所述集群中每一计算机系统上的VHBA (230-232)为在接收到的响应中枚举的每一存储设备(210-211以及212-213)创建命名虚拟盘,每一命名虚拟盘包括对应存储设备(210-211以及212-213)的表示,所述表示使得所述存储设备(210-211以及212-213)显现为连接到对应计算机系统(603);以及 所述集群中每一计算机系统上的VHBA (230-232)向对应计算机系统上的操作系统展示每一命名虚拟盘,以使得所述集群中的每一计算机系统将所述存储名字空间中的每一存储设备(210-211以及212-213)看作物理上连接的存储设备(210-211以及212-213),而不论该存储设备(210-211以及212-213)连接到该对应计算机系统还是所述集群中的另一计算机系统(604)。
2.如权利要求1所述的方法,其特征在于,所述存储名字空间包括针对在所述集群中任何计算机系统上执行的应用的共享存储。
3.如权利要求1所述的方法,其特征在于,所述响应中的至少一个枚举物理上也连接到接收该响应的计算机系统的存储设备。
4.如权利要求1所述的方法,其特征在于,来自所述VHBA中的至少一个的响应指示没有存储设备在物理上连接到所述对应计算机系统。
5.如权利要求1所述的方法,其特征在于,来自所述VHBA中的两个或更多个的响应指示特定存储设备在物理上连接到所述两个或更多个对应计算机系统中的每一个。
6.如权利要求5所述的方法,其特征在于,还包括维护与通过它可访问所述特定存储设备的每一路径有关的路径信息。
7.如权利要求1所述的方法,其特征在于,每一命名虚拟盘包括对应存储设备的属性,所述属性要被包括在来自所述对应VHBA的响应中以使得每一存储设备的属性对所述计算机系统中的每一个上的操作系统可见,而不论所述存储设备是否在物理上连接到所述计算机系统。
8.如权利要求1所述的方法,其特征在于,还包括: 所述集群中第一计算机系统上的VHBA接收来自所述第一计算机系统上的应用的I/O请求,所述I/O请求请求访问所述存储名字空间中各存储设备中的第一个上的数据;所述第一计算机系统上的VHBA选择所述第一计算机系统上的多个主机总线适配器(HBA)中的要被用来将所述I/O请求路由到所述第一存储设备的一个主机总线适配器;以及 将所述I/O请求路由到所选HBA。
9.如权利要求8所述的方法,其特征在于,所述第一存储设备连接到所述第一计算机系统,使得所选HBA将所述I/O请求路由到所述第一存储设备,而不将所述I/O请求路由到所述集群中的另一 VHBA。
10.如权利要求8所述的方法,其特征在于,所述第一存储设备连接到所述集群中的另一计算机系统,但不从所述第一计算机系统连接,使得所选HBA将所述I/O请求路由到所述另一计算机系统上的VHBA 。
【文档编号】G06F9/455GK103546529SQ201310247322
【公开日】2014年1月29日 申请日期:2013年6月20日 优先权日:2012年6月21日
【发明者】A·达马托, V·R·尚卡尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1