一种存储阵列中数据镜像方法及存储阵列的制作方法
【专利摘要】本发明实施例公开了一种存储阵列中数据镜像方法,以一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升存储阵列的性能。本发明实施例方法用于包括多个控制器的存储阵列,所述方法包括:第一控制器接收第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,则所述第一控制器缓存所述第一数据;所述第一控制器将所述第一数据发送给所述第一待写入逻辑单元的工作控制器,以使所述第一待写入逻辑单元的工作控制器缓存所述第一数据。本发明实施例还提供存储阵列。
【专利说明】一种存储阵列中数据镜像方法及存储阵列
【技术领域】
[0001]本发明涉及存储【技术领域】,具体涉及一种存储阵列中数据镜像方法及存储阵列。
【背景技术】
[0002]为了优化系统性能,控制器将一定容量的内存设置为缓存(Cache),再将数据存储在Cache中后即可向主机反馈完成响应,从而减少了主机访问的延迟,加快了主机的读写性能,但是内存是易失性存储介质,在掉电或者控制器出现故障时容易丢失数据,为了保证内存中缓存的数据在控制器异常时不丢失,又会将数据在另一个控制器的内存中保存一份副本,形成镜像数据。
[0003]现有技术中,以双控制器组成的存储阵列为例,通常逻辑单元号(Logic al UnitDisks, LUN)有工作控制器的属性,即只有固定的一个控制器可以处理该LUN的写请求,而高端存储阵列通常都支持由双控制器引擎组成的多控制器集群,各存储控制器之间通过固定方式形成数据镜像关系。
[0004]数据所在逻辑单元号的工作控制器和其镜像控制器是固定的关系,当接收主机的请求的控制器不是工作控制器时,需要先将数据转发至工作控制器上,再由工作控制器发送至固定的镜像控制器上,加大了控制器的开销,对存储阵列的性能产生影响。
【发明内容】
[0005]本发明实施例提供了一种存储阵列中数据镜像方法及存储阵列,以一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升存储阵列的性能。
[0006]本发明第一方面提供一种存储阵列中数据镜像方法,所述存储阵列包括多个控制器,所述方法包括:
[0007]第一控制器接收第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据;
[0008]当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,则所述第一控制器缓存所述第一数据;
[0009]所述第一控制器将所述第一数据发送给所述第一待写入逻辑单元的工作控制器,以使所述第一待写入逻辑单元的工作控制器缓存所述第一数据。
[0010]结合第一方面,在第一种可能的实现方式中,所述方法还包括:
[0011]所述第一控制器接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0012]当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,所述第一控制器缓存所述第二数据;
[0013]所述第一控制器将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
[0014]结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一控制器将所述第二数据发送给第二控制器之前还包括:
[0015]所述第一控制器获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定;
[0016]以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
[0017]结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述方法还包括:
[0018]当所述第一待写入逻辑单元的工作控制器失效时,所述第一控制器作为所述第一待写入逻辑单元的工作控制器,则所述第一控制器从失效的所述第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在所述第一控制器的第三数据并且缓存所述第三数据,所述第三数据为失效的所述第一待写入逻辑单元的工作控制器缓存的所述第一待写入逻辑单元中除所述第一数据以外的其他数据;
[0019]以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取一个或多个控制器作为第三控制器;
[0020]所述第一控制器将所述第三数据发送给所述第三控制器,以使所述第三控制器缓存所述第三数据;
[0021]所述第一控制器向所述存储阵列中的所有控制器广播第一消息;所述第一消息用于通知所述所有存储阵列中的所有控制器缓存所述第三数据的控制器的信息;
[0022]其中,所述第一消息包含有所述第一待写入逻辑单元的标识和所述第三控制器的标识。
[0023]结合第一方面的第二种可能的实现方式,在第四种可能的实现方式中,所述方法还包括:
[0024]当所述第二控制器失效时,以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为第四控制器;
[0025]所述第一控制器将所述第二数据发送给所述第四控制器,以使所述第四控制器缓存所述第二数据;
[0026]所述第一控制器向所述存储阵列中的所有控制器广播第二消息;所述第二消息用于通知所述所有存储阵列中的所有控制器缓存所述第二数据的控制器的信息;其中,所述第二消息包含有所述第二待写入逻辑单元的标识和所述第四控制器的标识。
[0027]结合第一方面的第一种可能的实现方式,在第五种可能的实现方式中,所述方法还包括:
[0028]当所述第一控制器缓存的所述第二数据发生更新时,以所述第二控制器为起点,所述第一控制器从所述哈希环上中沿着顺时针方向选取与所述第二控制器相邻的控制器作为第五控制器;
[0029]所述第一控制器将所述更新后的第二数据发送给所述第五控制器,以使所述第五控制器缓存所述更新后的第二数据;
[0030]所述第一控制器向所述存储阵列中的所有控制器广播第三消息;所述第三消息用于通知所述所有存储阵列中的所有控制器缓存所述更新后的第二数据的控制器的信息;其中,所述第三消息包含有所述第二待写入逻辑单元的标识和所述第五控制器的标识。
[0031]本发明第二方面提供一种存储阵列,所述存储阵列中包括多个控制器,其中,第一控制器包括:
[0032]接收模块,用于接收写第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据;
[0033]缓存模块,用于当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,缓存所述第一数据;
[0034]发送模块,用于在所述缓存模块缓存所述第一数据后,将所述第一数据发送给所述第一待写入逻辑单元的工作控制器,以使所述第一待写入逻辑单元的工作控制器缓存所述第一数据。
[0035]结合第二方面,在第一种可能的实现方式中,所述接收模块,还用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0036]所述缓存模块,还用于当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,缓存所述第二数据;
[0037]所述发送模块,还用于在所述缓存模块缓存所述第二数据后,将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
[0038]结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一控制器还包括:
[0039]获取模块,用于在所述发送模块将所述第二数据发送给第二控制器前,获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定;
[0040]选取模块,用于在所述获取模块获取所述存储阵列中所有控制器在哈希环上的位置后,以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
[0041]结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述第一控制器还包括广播模块;其中,
[0042]所述获取模块,还用于当所述第一待写入逻辑单元的工作控制器失效时,所述第一控制器作为所述第一待写入逻辑单元的工作控制器,则所述第一控制器从失效的所述第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在所述第一控制器的第三数据,所述第三数据为失效的所述第一待写入逻辑单元的工作控制器缓存的所述第一待写入逻辑单元中除所述第一数据以外的其他数据;
[0043]所述缓存模块,还用于在所述获取模块获取所述第三数据后,缓存所述第三数据;
[0044]所述选取模块,还用于以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取一个或多个控制器作为第三控制器;
[0045]所述发送模块,还用于在所述选取模块选取所述第三控制器后,将所述第三数据发送给所述第三控制器,以使所述第三控制器缓存所述第三数据;
[0046]所述广播模块,用于在所述发送模块将所述第三数据发送给所述第三控制器后,向所述存储阵列中的所有控制器广播第一消息;所述第一消息用于通知所述所有存储阵列中的所有控制器缓存所述第三数据的控制器的信息;
[0047]其中,所述第一消息包含有所述第一待写入逻辑单元的标识和所述第三控制器的标识。
[0048]结合第二方面的第二种可能的实现方式,在第四种可能的实现方式中,所述选取模块,还用于当所述第二控制器失效时,以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为第四控制器;
[0049]所述发送模块,还用于在所述选取模块选取所述第四控制器后,将所述第二数据发送给所述第四控制器,以使所述第四控制器缓存所述第二数据;
[0050]所述广播模块,还用于在所述发送模块将所述第二数据发送给所述第四控制器后,向所述存储阵列中的所有控制器广播第二消息;所述第二消息用于通知所述所有存储阵列中的所有控制器缓存所述第二数据的控制器的信息;
[0051]其中,所述第二消息包含有所述第二待写入逻辑单元的标识和所述第四控制器的标识。
[0052]结合第二方面的第一种可能的实现方式,在第五种可能的实现方式中,所述选取模块,还用于当所述第一控制器缓存的所述第二数据发生更新时,以所述第二控制器为起点,所述第一控制器从所述哈希环上中沿着顺时针方向选取与所述第二控制器相邻的控制器作为第五控制器;
[0053]所述发送模块,还用于在所述选取模块选取所述第五控制器后,将所述更新后的第二数据发送给所述第五控制器,以使所述第五控制器缓存所述更新后的第二数据;
[0054]所述广播模块,还用于在所述发送模块将所述更新后的第二数据发送给所述第五控制器后,向所述存储阵列中的所有控制器广播第三消息;所述第三消息用于通知所述所有存储阵列中的所有控制器缓存所述更新后的第二数据的控制器的信息;
[0055]其中,所述第三消息包含有所述第二待写入逻辑单元的标识和所述第五控制器的标识。
[0056]本发明第三方面提供一种存储阵列,所述存储阵列中包括多个控制器,其中,第一控制器包括处理器和存储器;所述存储器存储计算机指令,当所述处理器执行所述计算机指令用于执行第一方面或者第一方面的第一种至第五种任意一种所述的方法。
[0057]本发明第四方面提供一种存储阵列,所述存储阵列中包括多个控制器,其中,第一控制器用于接收第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据;
[0058]当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,则所述第一控制器用于缓存所述第一数据;
[0059]所述第一控制器用于将所述第一数据发送给所述第一待写入逻辑单元的工作控制器;
[0060]所述第一待写入逻辑单元的工作控制器用于接收所述第一数据并缓存所述第一数据。
[0061]结合第四方面,在第一种可能的实现方式中,所述第一控制器还用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0062]当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,所述第一控制器缓存所述第二数据;
[0063]所述第一控制器将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
[0064]结合第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一控制器还用于获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定;
[0065]以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
[0066]应用以上技术方案,本发明实施例中采用在的存储阵列包括多个控制器,其中,第一控制器接收第一写请求,该第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识,当第一控制器不是第一待写入逻辑单元的工作控制器时,则第一控制器缓存第一数据;第一控制器将第一数据发送给第一待写入逻辑单元的工作控制器,以使第一待写入逻辑单元的工作控制器缓存所述第一数据。即:当接收第一写请求的控制器不是第一待写入逻辑单元的工作控制器时,直接在第一控制器上缓存第一数据,然后将第一数据发送至第一待写入逻辑单元的工作控制器进行缓存,即:第一待写入逻辑单元的工作控制器不需要转发第一数据,也就是说,取消了将第一数据从第一待写入逻辑单元的工作控制器转发至第一控制器的步骤,从而,一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升了存储阵列的性能。
【专利附图】
【附图说明】
[0067]图1是本发明实施例存储阵列中数据镜像方法的一个实施例示意图;
[0068]图2是本发明实施例存储阵列中数据镜像方法的另一个实施例示意图;
[0069]图3是本发明实施例存储阵列中数据镜像方法的另一个实施例示意图;
[0070]图4是本发明实施例存储阵列中数据镜像方法的另一个实施例示意图;
[0071]图5是本发明实施例存储阵列中数据镜像方法的另一个实施例示意图;
[0072]图6是本发明实施例中控制器的一个实施例示意图;
[0073]图7是本发明实施例中控制器的另一个实施例示意图;
[0074]图8是本发明实施例中控制器的另一个实施例示意图;
[0075]图9是本发明实施例中控制器的另一个实施例示意图;
[0076]图10是本发明实施例中控制器的另一个实施例示意图;
[0077]图11是本发明实施例中控制器的另一个实施例示意图;
[0078]图12是本发明实施例中存储阵列的一个实施例示意图。
【具体实施方式】
[0079]本发明实施例提供了一种存储阵列中数据镜像方法及存储阵列,以一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升存储阵列的性能。
[0080]为了使本【技术领域】的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0081]本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三…第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0082]本发明实施例中存储阵列中数据镜像方法所涉及的存储阵列包括多个控制器,下面对存储阵列做一个简单介绍,存储阵列是多个控制器组成,用于控制主机发送的读写请求,并且缓存主机发送的写入数据。由多个控制器组成的存储阵列中,其中,一个是作为待写入逻辑单元的工作控制器,能够处理以该待写入逻辑单元为写入目标的写请求,并在其控制的缓存器中写入写请求中包含的待缓存的数据作为主数据,而与之对应的另一个控制器写入该待缓存的数据作为镜像数据。待写入逻辑单元作为写入目标是指待写入逻辑单元存储写请求中携带的写入数据。当一个控制器失效时,另一个控制器通过备份找回缓存数据,目前高端存储阵列通常支持多控制器的配置,是由多个控制器组成的引擎堆叠而成,弓丨擎后端连接的硬盘框只有本引擎内的控制器可以访问,每个引擎的可靠性由本引擎内的双控冗余来保证,当引擎内的控制器都故障时,整个集群的数据会处于不可用的状态。
[0083]请参阅图1,本发明实施例存储阵列中数据镜像方法的一个实施例包括:
[0084]101、第一控制器接收写第一写请求;
[0085]在本发明实施例中,由于存储阵列为了加快主机的写性能,减少响应时延,将主机发送的写请求携带的待写入数据缓存在存储阵列的控制器,因此主机向第一控制器发送第一写请求,第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识,第一控制器是存储阵列中的任一个控制器,该存储阵列包括多个控制器;其中,所述第一待写入逻辑单元用于存储所述第一数据。
[0086]102、当第一控制器不是第一待写入逻辑单元的工作控制器时,则第一控制器将缓存第一数据;
[0087]在本发明实施例中,与现有技术不同的是,当第一控制器不是第一待写入逻辑单元的工作控制器时,不需要先将第一数据转发至第一待写入逻辑单元的工作控制器上,再由第一待写入逻辑单元的工作控制器发送至第一控制器上进行缓存,而是直接将第一数据缓存在第一控制器上,省去先将第一数据转发至工作控制器上,再由工作控制器发送至第一控制器进行缓存的开销,一定程度上减少存储阵列中第一数据转发的次数,提升了存储阵列的性能。
[0088]103、第一控制器将第一数据发送给第一待写入逻辑单元的工作控制器,以使第一待写入逻辑单元的工作控制器缓存第一数据。
[0089]可以理解的是,第一控制缓存了第一数据之后,第一待写入逻辑单元的工作控制器也需要缓存该第一数据,进一步避免了第一数据丢失后,还有备份能够找回第一数据。
[0090]本发明实施例中,当接收第一写请求的控制器不是第一待写入逻辑单元的工作控制器时,直接在第一控制器上缓存第一数据,然后将第一数据发送至第一待写入逻辑单元的工作控制器进行缓存,即:第一待写入逻辑单元的工作控制器不需要转发第一数据,也就是说,取消了将第一数据从第一待写入逻辑单元的工作控制器转发至第一控制器的步骤,从而,一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升了存储阵列的性能。
[0091]请参阅图2,本发明实施例存储阵列中数据镜像方法的另一个实施例包括:
[0092]201、第一控制器接收写第一写请求;
[0093]在本发明实施例中,由于存储阵列为了加快主机的写性能,减少响应时延,主机将写下的数据缓存在存储阵列的控制器,因此,主机向第一控制器发送第一写请求,第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识,第一控制器是存储阵列中的任一个控制器,该存储阵列包括多个控制器;其中,所述第一待写入逻辑单元用于存储所述第一数据。
[0094]202、当第一控制器不是第一待写入逻辑单元的工作控制器时,则第一控制器缓存第一数据;
[0095]在本发明实施例中,与现有技术不同的是,当第一控制器不是第一待写入逻辑单元的工作控制器时,不需要先将第一数据转发至第一待写入逻辑单元的工作控制器上,再由第一待写入逻辑单元的工作控制器发送至第一控制器上进行缓存,而是直接将第一数据缓存在第一控制器上,省去先将第一数据转发至工作控制器上,再由工作控制器发送至第一控制器进行缓存的开销,提升了存储阵列的性能。
[0096]203、第一控制器将第一数据发送给第一待写入逻辑单元的工作控制器,以使第一待写入逻辑单元的工作控制器缓存第一数据;
[0097]可以理解的是,第一控制存储了第一数据之后,第一待写入逻辑单元的工作控制器也需要缓存该第一数据。进一步避免了第一数据丢失后,还有备份能够找回第一数据。
[0098]204、当第一待写入逻辑单元的工作控制器失效时,第一控制器作为第一待写入逻辑单元的工作控制器,则第一控制器从失效的第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在第一控制器的第三数据并且缓存所述第三数据;
[0099]在本发明实施例中,第三数据为失效的第一待写入逻辑单元的工作控制器缓存的第一待写入逻辑单元中除第一数据以外的其他数据。
[0100]205、以第一控制器为起点,第一控制器从哈希环上沿着顺时针方向选取一个或多个控制器作为第三控制器;
[0101]在本发明实施例中,存储阵列中的所有控制器在哈希环上具有固定的位置,为了负载均衡,除了第一待写入逻辑单元的工作控制器缓存所有数据外,其他除第一待写入逻辑单元的工作控制器以外的每个控制器轮流缓存所有数据中的部分数据,例如:第一待写入逻辑单元的工作控制器缓存所有的数据A,其他除第一待写入逻辑单元的工作控制器以外的控制器中,有的缓存数据Al,有的缓存数据A2,即其他除第一待写入逻辑单元的工作控制器以外的每个控制器所缓存的数据的集合为A。本发明实施例中,使用哈希(Hash)算法实现存储阵列在哈希环上的分布,具体根据所有控制器的标识确定每一个控制器在哈希环上的位置。
[0102]206、第一控制器将第三数据发送给第三控制器,以使第三控制器缓存第三数据;
[0103]在本发明实施例中,当第一控制器作为第一待写入逻辑单元的工作控制器时,第一控制器还需要将第三数据发送给第三控制器进行缓存,其中,第三控制可以是一个,也可以是多个。
[0104]207、第一控制器向存储阵列中的所有控制器广播第一消息。
[0105]在本发明实施例中,第一消息用于通知所有存储阵列中的所有控制器缓存第三数据的控制器的信息;其中,第一消息包含有第一待写入逻辑单元的标识和第三控制器的标识。
[0106]可以理解的是,所有控制器监听该第一消息后,可知第三数据缓存在具体某个控制器。
[0107]在本发明实施例中,当接收第一写请求的控制器不是第一待写入逻辑单元的工作控制器时,直接在第一控制器上缓存第一数据,然后将第一数据发送至第一待写入逻辑单元的工作控制器进行缓存,即:第一待写入逻辑单元的工作控制器不需要转发第一数据,也就是说,取消了将第一数据从第一待写入逻辑单元的工作控制器转发至第一控制器的步骤,从而,一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升了存储阵列的性能,当第一待写入逻辑单元的工作控制器失效时,第一控制器作为第一待写入逻辑单元的工作控制器,则第一控制器从失效的第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在第一控制器的第三数据并且缓存所述第三数据,并将第三数据发送给第三控制器,以使第三控制器缓存第三数据,因此,第一控制器与其他控制器重新形成持续的数据镜像关系,使得存储阵列的可靠性得到提升。
[0108]请参阅图3,本发明实施例存储阵列中数据镜像方法的另一个实施例包括:
[0109]301、第一控制器接收第二写请求;
[0110]在本发明实施例中,主机向第一控制器发送第二写请求,第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识,第一控制器是存储阵列中的任一个的控制器,该存储阵列包括多个控制器;其中所述第二待写入逻辑单元用于存储所述第二数据。
[0111]302、当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存述第二数据;
[0112]在上述实施例的基础上,本发明实施例中当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,进一步提升了存储阵列的性能。
[0113]303、第一控制器将第二数据发送给第二控制器,以使第二控制器缓存第二数据。
[0114]需要说明的是,第二控制器接收到第一控制器发送的第二数据后,该第二控制器向第一控制器发送一个数据执行结果,即,第二控制器缓存第二数据。
[0115]在本发明实施例中,第一控制器接收第二写请求,当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,并将第二数据发送给第二控制器,以使第二控制器缓存第二数据,由此可见,本发明实施例当第一控制器是第二待写入逻辑单元的工作控制器时,进一步可以缓存第二数据,并将第二数据发送给第二控制器进行缓存,提升了存储阵列的性能。
[0116]为便于理解,下面以具体的应用场景为例对数据镜像方法进行详细描述,请参阅图4,本发明实施例存储阵列中数据镜像方法的另一个实施例包括:
[0117]401、第一控制器接收第二写请求;
[0118]在本发明实施例中,由于存储阵列为了加快主机的写性能,减少响应时延,主机将写下的数据缓存在存储阵列的控制器,因此主机向第一控制器发送第二写请求,第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识,第一控制器是存储阵列中的任一个控制器,该存储阵列包括多个控制器;其中所述第二待写入逻辑单元用于存储所述第二数据。
[0119]402、当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存述第二数据;
[0120]本发明实施例中当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,进一步提升了存储阵列的性能。
[0121]403、第一控制器获取存储阵列中所有控制器在哈希环上的位置;
[0122]在本发明实施例中,所有控制器在哈希环上的位置根据在存储阵列中所有控制器的标识确定。即每个控制器有唯一的标识,通过识别标识确定控制器在哈希环上的位置。
[0123]在本发明实施例中,存储阵列中的所有控制器在哈希环上具有固定的位置,为了负载均衡,除了第二待写入逻辑单元的工作控制器缓存所有数据外,其他除第二待写入逻辑单元的工作控制器以外的每个控制器轮流缓存所有数据中的部分数据,例如:第二待写入逻辑单元的工作控制器缓存所有的数据A,其他除第二待写入逻辑单元的工作控制器以外的控制器中,有的缓存数据Al,有的缓存数据A2,即其他除第二待写入逻辑单元的工作控制器以外的每个控制器所缓存的数据的集合为A。本发明实施例中,使用哈希算法实现存储阵列在哈希环上的分布,具体根据所有控制器的标识确定每一个控制器在哈希环上的位置。以下实施例中描述的关于控制器在哈希环上的分布方式不再赘述,可参见此处及前面的描述。
[0124]404、以第一控制器为起点,第一控制器从哈希环上沿着顺时针方向选取与第一控制器相邻的控制器作为第二控制器;
[0125]可以理解的是,第一控制缓存了第二数据之后,也需要第二控制器缓存该第二数据,进一步避免了第二数据丢失后,还有备份能够找回第二数据。
[0126]405、第一控制器将第二数据发送给第二控制器,以使第二控制器缓存第二数据;
[0127]需要说明的是,第二控制器接收到第一控制器发送的第二数据后,该第二控制器向第一控制器发送一个数据执行结果,即,第二控制器缓存第二数据。
[0128]406、当第二控制器失效时,以第一控制器为起点,第一控制器从哈希环上沿着顺时针方向选取与第一控制器相邻的控制器作为第四控制器;
[0129]在本发明实施例中,存储阵列中的所有控制器在哈希环上具有固定的位置,为了负载均衡,选取除第二控制器以外的与第一控制器相邻的控制器作为第四控制器。
[0130]407、第一控制器将第二数据发送给第四控制器,以使第四控制器缓存第二数据;
[0131]在本发明实施例中,由于第二控制器失效,则需要另一个控制器取代第二控制器进行缓存第二数据,进一步避免了第二数据丢失后,还有备份能够找回第二数据。
[0132]408、第一控制器向存储阵列中的所有控制器广播第二消息。
[0133]在本发明实施例中,第二消息用于通知存储阵列中的所有控制器缓存第二数据的控制器的信息;其中,第二消息包含有第二待写入逻辑单元的标识和第四控制器的标识。
[0134]本发明实施例中,第一控制器接收第二写请求,当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,并将第二数据发送给第二控制器,以使第二控制器缓存第二数据,该第二控制器是从哈希环上选取,当第二控制器失效时,从哈希环上选取第四控制器,并将第二数据发送给第四控制器,以使第四控制器缓存第二数据,可见,通过从哈希环上选取控制器使得负载均衡,进一步提升了存储阵列的性能。
[0135]请参阅图5,本发明实施例存储阵列中数据镜像方法的另一个实施例包括:
[0136]501、第一控制器接收第二写请求;
[0137]在本发明实施例中,由于存储阵列为了加快主机的写性能,减少响应时延,主机将写下的数据缓存在存储阵列的控制器,因此主机向第一控制器发送第二写请求,第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识,第一控制器是存储阵列中的任一个控制器,该存储阵列包括多个控制器;其中所述第二待写入逻辑单元用于存储所述第二数据。
[0138]502、当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存述第二数据;
[0139]本发明实施例中当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,进一步提升了存储阵列的性能。
[0140]503、第一控制器获取存储阵列中所有控制器在哈希环上的位置;
[0141]在本发明实施例中,所有控制器在哈希环上的位置根据在存储阵列中所有控制器的标识确定。即每个控制器有唯一的标识,通过识别标识确定控制器在哈希环上的位置。
[0142]504、以第一控制器为起点,第一控制器从哈希环上沿着顺时针方向选取与第一控制器相邻的控制器作为第二控制器;
[0143]可以理解的是,第一控制缓存了第二数据之后,也需要第二控制器缓存该第二数据,进一步避免了第二数据丢失后,还有备份能够找回第二数据。
[0144]505、第一控制器将第二数据发送给第二控制器,以使第二控制器缓存第二数据。
[0145]需要说明的是,第二控制器接收到第一控制器发送的第二数据后,该第二控制器向第一控制器发送一个数据执行结果,即,第二控制器缓存第二数据。
[0146]506、当第一控制器缓存的第二数据发生更新时,以第二控制器为起点,第一控制器从哈希环上中沿着顺时针方向选取与第二控制器相邻的控制器作为第五控制器;
[0147]在本发明实施例中,第五控制器是与第二控制器不同的另一个控制器,即第五控制器取代了第二控制器缓存第二数据。
[0148]507、第一控制器将更新后的第二数据发送给第五控制器,以使第五控制器缓存更新后的第二数据;
[0149]可以理解的是,第二数据发生更新时,为了负载均衡,选取第五控制器进一步缓存更新后的第二数据。
[0150]508、第一控制器向存储阵列中的所有控制器广播第三消息。
[0151 ] 在本发明实施例中,第三消息用于通知所有存储阵列中的所有控制器缓存更新后的第二数据的控制器的信息;其中,第三消息包含有第二待写入逻辑单元的标识和第五控制器的标识。
[0152]可以理解的是,第二控制器监听第三消息后,可知第二数据进行了更新,并且更新后的第二数据缓存在第五控制器,则将自身缓存的第二数据删除。
[0153]本发明实施例中,第一控制器接收第二写请求,当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,并将第二数据发送给第二控制器,以使第二控制器缓存第二数据,该第二控制器是从哈希环上选取,当第一控制器缓存的第二数据发生更新时,从哈希环上选取第五控制器,将更新后的第二数据发送给第五控制器,以使第五控制器缓存更新后的第二数据,可见,通过从哈希环上选取控制器使得负载均衡,进一步提升了存储阵列的性能。
[0154]上面实施例中介绍了存储阵列中数据镜像方法,下面进一步介绍存储阵列,该存储阵列包括多个控制器,请参阅图6,其中,第一控制器600的一个实施例包括:
[0155]接收模块601,用于接收写第一写请求,第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据;
[0156]缓存模块602,用于接收模块601接收第一写请求后,当第一控制器不是第一待写入逻辑单元的工作控制器时,缓存第一数据;
[0157]发送模块603,用于缓存模块602缓存第一数据后,将第一数据发送给第一待写入逻辑单元的工作控制器,以使第一待写入逻辑单元的工作控制器缓存第一数据。
[0158]本发明实施例中,当接收第一写请求的控制器不是第一待写入逻辑单元的工作控制器时,直接在第一控制器上缓存第一数据,然后将第一数据发送至第一待写入逻辑单元的工作控制器进行缓存,即:第一待写入逻辑单元的工作控制器不需要转发第一数据,也就是说,取消了将第一数据从第一待写入逻辑单元的工作控制器转发至第一控制器的步骤,从而,一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升了存储阵列的性能。
[0159]请参阅图7,本发明实施例中第一控制器700的另一个实施例包括:
[0160]接收模块701,用于接收写第一写请求,第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据;
[0161]缓存模块702,用于接收模块701接收第一写请求后,当第一控制器不是第一待写入逻辑单元的工作控制器时,缓存第一数据;
[0162]发送模块703,用于缓存模块702缓存第一数据后,将第一数据发送给第一待写入逻辑单元的工作控制器,以使第一待写入逻辑单元的工作控制器缓存第一数据;
[0163]获取模块704,用于当所述第一待写入逻辑单元的工作控制器失效时,所述第一控制器作为所述第一待写入逻辑单元的工作控制器,则所述第一控制器从失效的所述第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在所述第一控制器的第三数据,所述第三数据为失效的所述第一待写入逻辑单元的工作控制器缓存的所述第一待写入逻辑单元中除所述第一数据以外的其他数据;
[0164]所述缓存模块702,还用于在所述获取模块704获取所述第三数据后,缓存所述第三数据;
[0165]选取模块705,用于以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取一个或多个控制器作为第三控制器;
[0166]所述发送模块703,还用于在所述选取模块705选取所述第三控制器后,将所述第三数据发送给所述第三控制器,以使所述第三控制器缓存所述第三数据;
[0167]广播模块706,用于在所述发送模块703将所述第三数据发送给所述第三控制器后,向所述存储阵列中的所有控制器广播第一消息;所述第一消息用于通知所述所有存储阵列中的所有控制器缓存所述第三数据的控制器的信息;
[0168]其中,所述第一消息包含有所述第一待写入逻辑单元的标识和所述第三控制器的标识。
[0169]在本发明实施例中,当接收第一写请求的控制器不是第一待写入逻辑单元的工作控制器时,直接在第一控制器上缓存第一数据,然后将第一数据发送至第一待写入逻辑单元的工作控制器进行缓存,即:第一待写入逻辑单元的工作控制器不需要转发第一数据,也就是说,取消了将第一数据从第一待写入逻辑单元的工作控制器转发至第一控制器的步骤,从而,一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升了存储阵列的性能,当第一待写入逻辑单元的工作控制器失效时,第一控制器作为第一待写入逻辑单元的工作控制器,则第一控制器从失效的第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在第一控制器的第三数据并且缓存所述第三数据,并将第三数据发送给第三控制器,以使第三控制器缓存第三数据,因此,第一控制器与其他控制器重新形成持续的数据镜像关系,使得存储阵列的可靠性得到提升。
[0170]请参阅图8,本发明实施例第一控制器800的另一个实施例包括:
[0171]接收模块801,用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0172]缓存模块802,用于当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,缓存所述第二数据;
[0173]发送模块803,用于在所述缓存模块802缓存所述第二数据后,将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
[0174]在本发明实施例中,第一控制器接收第二写请求,当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,并将第二数据发送给第二控制器,以使第二控制器缓存第二数据,由此可见,本发明实施例当第一控制器是第二待写入逻辑单元的工作控制器时,进一步可以缓存第二数据,并将第二数据发送给第二控制器进行缓存,提升了存储阵列的性能。
[0175]请参阅图9,本发明实施例中第一控制器900的另一个实施例包括:
[0176]接收模块901,用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0177]缓存模块902,用于当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,缓存所述第二数据;
[0178]获取模块903,用于在所述发送模块905将所述第二数据发送给第二控制器前,获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定;
[0179]选取模块904,用于在所述获取模块903获取所述存储阵列中所有控制器在哈希环上的位置后,以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
[0180]发送模块905,用于在所述选取模块904选取所述第二控制器后,将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
[0181]所述选取模块904,还用于当所述第二控制器失效时,以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为第四控制器;
[0182]所述发送模块905,还用于在所述选取模块904选取所述第四控制器后,将所述第二数据发送给所述第四控制器,以使所述第四控制器缓存所述第二数据;
[0183]广播模块906,还用于在所述发送模块905将所述第二数据发送给所述第四控制器后,向所述存储阵列中的所有控制器广播第二消息;所述第二消息用于通知所述所有存储阵列中的所有控制器缓存所述第二数据的控制器的信息;
[0184]其中,所述第二消息包含有所述第二待写入逻辑单元的标识和所述第四控制器的标识。
[0185]本发明实施例中,第一控制器接收第二写请求,当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,并将第二数据发送给第二控制器,以使第二控制器缓存第二数据,该第二控制器是从哈希环上选取,当第二控制器失效时,从哈希环上选取第四控制器,并将第二数据发送给第四控制器,以使第四控制器缓存第二数据,可见,通过从哈希环上选取控制器使得负载均衡,进一步提升了存储阵列的性能。
[0186]请参阅图10,本发明实施例中第一控制器1000的另一个实施例包括:
[0187]接收模块1001,用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0188]缓存模块1002,用于当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,缓存所述第二数据;
[0189]获取模块1003,用于在所述发送模块1005将所述第二数据发送给第二控制器前,获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定;
[0190]选取模块1004,用于在所述获取模块1003获取所述存储阵列中所有控制器在哈希环上的位置后,以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器;
[0191]发送模块1005,用于在所述选取模块1004选取所述第二控制器后,将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据;
[0192]所述选取模块1004,还用于当所述第一控制器缓存的所述第二数据发生更新时,以所述第二控制器为起点,所述第一控制器从所述哈希环上中沿着顺时针方向选取与所述第二控制器相邻的控制器作为第五控制器;
[0193]所述发送模块1005,还用于在所述选取模块1004选取所述第五控制器后,将所述更新后的第二数据发送给所述第五控制器,以使所述第五控制器缓存所述更新后的第二数据;
[0194]广播模块1006,还用于在所述发送模块1005将所述更新后的第二数据发送给所述第五控制器后,向所述存储阵列中的所有控制器广播第三消息;所述第三消息用于通知所述所有存储阵列中的所有控制器缓存所述更新后的第二数据的控制器的信息;
[0195]其中,所述第三消息包含有所述第二待写入逻辑单元的标识和所述第五控制器的标识。
[0196]本发明实施例中,第一控制器接收第二写请求,当第一控制器是第二待写入逻辑单元的工作控制器时,第一控制器缓存第二数据,并将第二数据发送给第二控制器,以使第二控制器缓存第二数据,该第二控制器是从哈希环上选取,当第一控制器缓存的第二数据发生更新时,从哈希环上选取第五控制器,将更新后的第二数据发送给第五控制器,以使第五控制器缓存更新后的第二数据,可见,通过从哈希环上选取控制器使得负载均衡,进一步提升了存储阵列的性能。
[0197]请参阅图11,图11为本发明实施例提供的第一控制器1100结构示意图,其中,可包括至少一个处理器1101 (例如0?11,06111:1^1 ^1-00088111? 1)1111:)、至少一个网络接口或者其它通信接口、存储器1102、至少一个通信总线、至少一个输入装置1103和至少一个输出装置1104用于实现这些装置之间的连接通信。处理器1101用于执行存储器1102中存储的可执行模块,例如计算机程序。存储器1102可能包含高速随机存取存储器(狀^00688 ,也可能还包括非易失的存储器,例如至少一个磁盘存储器。通过至少一个网络接口(可以是有线或者无线)实现该系统网关与至少一个其它网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
[0198]如图11所示,在一些实施方式中,存储器1102中存储了程序指令,程序指令可以被处理器1101执行,处理器1101具体执行以下步骤:
[0199]接收写第一写请求,第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据;
[0200]当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,则所述第一控制器缓存所述第一数据;
[0201]所述第一控制器将所述第一数据发送给所述第一待写入逻辑单元的工作控制器,以使所述第一待写入逻辑单元的工作控制器缓存所述第一数据。
[0202]在一些实施方式中,处理器1101还可以执行以下步骤:
[0203]接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0204]当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,所述第一控制器缓存所述第二数据;
[0205]所述第一控制器将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
[0206]在一些实施方式中,处理器1101还可以执行以下步骤:
[0207]获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定;
[0208]以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
[0209]在一些实施方式中,处理器1101还可以执行以下步骤:
[0210]当所述第一待写入逻辑单元的工作控制器失效时,所述第一控制器作为所述第一待写入逻辑单元的工作控制器,则所述第一控制器从失效的所述第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在所述第一控制器的第三数据并且缓存所述第三数据,所述第三数据为失效的所述第一待写入逻辑单元的工作控制器缓存的所述第一待写入逻辑单元中除所述第一数据以外的其他数据;
[0211]以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取一个或多个控制器作为第三控制器;
[0212]所述第一控制器将所述第三数据发送给所述第三控制器,以使所述第三控制器缓存所述第三数据;
[0213]所述第一控制器向所述存储阵列中的所有控制器广播第一消息;所述第一消息用于通知所述所有存储阵列中的所有控制器缓存所述第三数据的控制器的信息;
[0214]其中,所述第一消息包含有所述第一待写入逻辑单元的标识和所述第三控制器的标识。
[0215]在一些实施方式中,处理器1101还可以执行以下步骤:
[0216]当所述第二控制器失效时,以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为第四控制器;
[0217]所述第一控制器将所述第二数据发送给所述第四控制器,以使所述第四控制器缓存所述第二数据;
[0218]所述第一控制器向所述存储阵列中的所有控制器广播第二消息;所述第二消息用于通知所述所有存储阵列中的所有控制器缓存所述第二数据的控制器的信息;其中,所述第二消息包含有所述第二待写入逻辑单元的标识和所述第四控制器的标识。
[0219]在一些实施例中,处理器1101还可以执行以下步骤:
[0220]当所述第一控制器缓存的所述第二数据发生更新时,以所述第二控制器为起点,所述第一控制器从所述哈希环上中沿着顺时针方向选取与所述第二控制器相邻的控制器作为第五控制器;
[0221]所述第一控制器将所述更新后的第二数据发送给所述第五控制器,以使所述第五控制器缓存所述更新后的第二数据;
[0222]所述第一控制器向所述存储阵列中的所有控制器广播第三消息;所述第三消息用于通知所述所有存储阵列中的所有控制器缓存所述更新后的第二数据的控制器的信息;其中,所述第三消息包含有所述第二待写入逻辑单元的标识和所述第五控制器的标识。
[0223]上面介绍了本发明实施例中第一控制器的实施例,下面介绍本发明实施例中存储阵列的实施例,请参阅图12,本发明实施例中存储阵列1200的一个实施例包括:
[0224]所述存储阵列1200中包括多个控制器,其中,第一控制器用于接收第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据;
[0225]当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,则所述第一控制器用于缓存所述第一数据;
[0226]所述第一控制器用于将所述第一数据发送给所述第一待写入逻辑单元的工作控制器;
[0227]所述第一待写入逻辑单元的工作控制器用于接收所述第一数据并缓存所述第一数据。
[0228]进一步,所述第一控制器还用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据;
[0229]当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,所述第一控制器缓存所述第二数据;
[0230]所述第一控制器将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
[0231]进一步,所述第一控制器还用于获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定;
[0232]以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
[0233]由上可见,本发明实施例中采用在的存储阵列包括多个控制器,其中,第一控制器接收第一写请求,该第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识,当第一控制器不是第一待写入逻辑单元的工作控制器时,则第一控制器缓存第一数据;第一控制器将第一数据发送给第一待写入逻辑单元的工作控制器,以使第一待写入逻辑单元的工作控制器缓存所述第一数据。即:当接收第一写请求的控制器不是第一待写入逻辑单元的工作控制器时,直接在第一控制器上缓存第一数据,然后将第一数据发送至第一待写入逻辑单元的工作控制器进行缓存,即:第一待写入逻辑单元的工作控制器不需要转发第一数据,也就是说,取消了将第一数据从第一待写入逻辑单元的工作控制器转发至第一控制器的步骤,从而,一定程度上减少存储阵列中数据转发的次数,降低存储阵列中控制器的开销,提升了存储阵列的性能。
[0234]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0235]在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0236]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0237]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0238]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括山盘、移动硬盘、只读存储器^01,1^68(1-011171611101^)、随机存取存储器^00688 1611101^)、磁碟或者光盘等各种可以存储程序代码的介质。
[0239]以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【权利要求】
1.一种存储阵列中数据镜像方法,其特征在于,所述存储阵列包括多个控制器,所述方法包括: 第一控制器接收第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据; 当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,则所述第一控制器缓存所述第一数据; 所述第一控制器将所述第一数据发送给所述第一待写入逻辑单元的工作控制器,以使所述第一待写入逻辑单元的工作控制器缓存所述第一数据。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括: 所述第一控制器接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据; 当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,所述第一控制器缓存所述第二数据; 所述第一控制器将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
3.根据权利要求2所述的方法,其特征在于,所述第一控制器将所述第二数据发送给第二控制器之前还包括: 所述第一控制器获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定; 以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括: 当所述第一待写入逻辑单元的工作控制器失效时,所述第一控制器作为所述第一待写入逻辑单元的工作控制器,则所述第一控制器从失效的所述第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在所述第一控制器的第三数据并且缓存所述第三数据,所述第三数据为失效的所述第一待写入逻辑单元的工作控制器缓存的所述第一待写入逻辑单元中除所述第一数据以外的其他数据; 以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取一个或多个控制器作为第三控制器; 所述第一控制器将所述第三数据发送给所述第三控制器,以使所述第三控制器缓存所述第三数据; 所述第一控制器向所述存储阵列中的所有控制器广播第一消息;所述第一消息用于通知所述所有存储阵列中的所有控制器缓存所述第三数据的控制器的信息; 其中,所述第一消息包含有所述第一待写入逻辑单元的标识和所述第三控制器的标识。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括: 当所述第二控制器失效时,以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为第四控制器; 所述第一控制器将所述第二数据发送给所述第四控制器,以使所述第四控制器缓存所述第二数据; 所述第一控制器向所述存储阵列中的所有控制器广播第二消息;所述第二消息用于通知所述所有存储阵列中的所有控制器缓存所述第二数据的控制器的信息;其中,所述第二消息包含有所述第二待写入逻辑单元的标识和所述第四控制器的标识。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括: 当所述第一控制器缓存的所述第二数据发生更新时,以所述第二控制器为起点,所述第一控制器从所述哈希环上中沿着顺时针方向选取与所述第二控制器相邻的控制器作为第五控制器; 所述第一控制器将所述更新后的第二数据发送给所述第五控制器,以使所述第五控制器缓存所述更新后的第二数据; 所述第一控制器向所述存储阵列中的所有控制器广播第三消息;所述第三消息用于通知所述所有存储阵列中的所有控制器缓存所述更新后的第二数据的控制器的信息;其中,所述第三消息包含有所述第二待写入逻辑单元的标识和所述第五控制器的标识。
7.一种存储阵列,其特征在于,所述存储阵列中包括多个控制器,其中,第一控制器包括: 接收模块,用于接收写第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据; 缓存模块,用于当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,缓存所述第一数据; 发送模块,用于在所述缓存模块缓存所述第一数据后,将所述第一数据发送给所述第一待写入逻辑单元的工作控制器,以使所述第一待写入逻辑单元的工作控制器缓存所述第一数据。
8.根据权利要求7所述的存储阵列,其特征在于,所述接收模块,还用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据; 所述缓存模块,还用于当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,缓存所述第二数据; 所述发送模块,还用于在所述缓存模块缓存所述第二数据后,将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
9.根据权利要求8所述的存储阵列,其特征在于,所述第一控制器还包括: 获取模块,用于在所述发送模块将所述第二数据发送给第二控制器前,获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定; 选取模块,用于在所述获取模块获取所述存储阵列中所有控制器在哈希环上的位置后,以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
10.根据权利要求9所述的存储阵列,其特征在于,所述第一控制器还包括广播模块;其中, 所述获取模块,还用于当所述第一待写入逻辑单元的工作控制器失效时,所述第一控制器作为所述第一待写入逻辑单元的工作控制器,则所述第一控制器从失效的所述第一待写入逻辑单元的工作控制器以外的其它控制器获取没有缓存在所述第一控制器的第三数据,所述第三数据为失效的所述第一待写入逻辑单元的工作控制器缓存的所述第一待写入逻辑单元中除所述第一数据以外的其他数据; 所述缓存模块,还用于在所述获取模块获取所述第三数据后,缓存所述第三数据;所述选取模块,还用于以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取一个或多个控制器作为第三控制器; 所述发送模块,还用于在所述选取模块选取所述第三控制器后,将所述第三数据发送给所述第三控制器,以使所述第三控制器缓存所述第三数据; 所述广播模块,用于在所述发送模块将所述第三数据发送给所述第三控制器后,向所述存储阵列中的所有控制器广播第一消息;所述第一消息用于通知所述所有存储阵列中的所有控制器缓存所述第三数据的控制器的信息; 其中,所述第一消息包含有所述第一待写入逻辑单元的标识和所述第三控制器的标识。
11.根据权利要求9所述的存储阵列,其特征在于, 所述选取模块,还用于当所述第二控制器失效时,以所述第一控制器为起点,从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为第四控制器; 所述发送模块,还用于在所述选取模块选取所述第四控制器后,将所述第二数据发送给所述第四控制器,以使所述第四控制器缓存所述第二数据; 所述广播模块,还用于在所述发送模块将所述第二数据发送给所述第四控制器后,向所述存储阵列中的所有控制器广播第二消息;所述第二消息用于通知所述所有存储阵列中的所有控制器缓存所述第二数据的控制器的信息; 其中,所述第二消息包含有所述第二待写入逻辑单元的标识和所述第四控制器的标识。
12.根据权利要求8所述的存储阵列,其特征在于, 所述选取模块,还用于当所述第一控制器缓存的所述第二数据发生更新时,以所述第二控制器为起点,所述第一控制器从所述哈希环上中沿着顺时针方向选取与所述第二控制器相邻的控制器作为第五控制器; 所述发送模块,还用于在所述选取模块选取所述第五控制器后,将所述更新后的第二数据发送给所述第五控制器,以使所述第五控制器缓存所述更新后的第二数据; 所述广播模块,还用于在所述发送模块将所述更新后的第二数据发送给所述第五控制器后,向所述存储阵列中的所有控制器广播第三消息;所述第三消息用于通知所述所有存储阵列中的所有控制器缓存所述更新后的第二数据的控制器的信息; 其中,所述第三消息包含有所述第二待写入逻辑单元的标识和所述第五控制器的标识。
13.一种存储阵列,其特征在于,所述存储阵列中包括多个控制器,其中,第一控制器包括处理器和存储器;所述存储器存储计算机指令,当所述处理器执行所述计算机指令用于执行权利要求1至6任一所述的方法。
14.一种存储阵列,其特征在于,所述存储阵列中包括多个控制器,其中,第一控制器用于接收第一写请求,所述第一写请求包含待缓存的第一数据及第一待写入逻辑单元的标识;其中所述第一待写入逻辑单元用于存储所述第一数据; 当所述第一控制器不是所述第一待写入逻辑单元的工作控制器时,则所述第一控制器用于缓存所述第一数据; 所述第一控制器用于将所述第一数据发送给所述第一待写入逻辑单元的工作控制器; 所述第一待写入逻辑单元的工作控制器用于接收所述第一数据并缓存所述第一数据。
15.根据权利要求14所述的存储阵列,其特征在于,所述第一控制器还用于接收第二写请求,所述第二写请求包含待缓存的第二数据及第二待写入逻辑单元的标识;其中所述第二待写入逻辑单元用于存储所述第二数据; 当所述第一控制器是所述第二待写入逻辑单元的工作控制器时,所述第一控制器缓存所述第二数据; 所述第一控制器将所述第二数据发送给第二控制器,以使所述第二控制器缓存所述第二数据。
16.根据权利要求15所述的存储阵列,其特征在于,所述第一控制器还用于获取所述存储阵列中所有控制器在哈希环上的位置,所述所有控制器在哈希环上的位置根据在所述存储阵列中所有控制器的标识确定; 以所述第一控制器为起点,所述第一控制器从所述哈希环上沿着顺时针方向选取与所述第一控制器相邻的控制器作为所述第二控制器。
【文档编号】G06F11/14GK104461777SQ201410698325
【公开日】2015年3月25日 申请日期:2014年11月26日 优先权日:2014年11月26日
【发明者】杜翔 申请人:华为技术有限公司