CN110392876B - 用于将数据集和其他受管理对象同步地复制到基于云的存储系统的方法 - Google Patents
用于将数据集和其他受管理对象同步地复制到基于云的存储系统的方法 Download PDFInfo
- Publication number
- CN110392876B CN110392876B CN201880017374.0A CN201880017374A CN110392876B CN 110392876 B CN110392876 B CN 110392876B CN 201880017374 A CN201880017374 A CN 201880017374A CN 110392876 B CN110392876 B CN 110392876B
- Authority
- CN
- China
- Prior art keywords
- storage
- storage system
- data
- data set
- storage systems
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003860 storage Methods 0.000 title claims abstract description 4526
- 238000000034 method Methods 0.000 title claims description 593
- 238000004891 communication Methods 0.000 claims description 428
- 230000004044 response Effects 0.000 claims description 145
- 230000003362 replicative effect Effects 0.000 claims description 67
- 238000004590 computer program Methods 0.000 claims description 21
- 230000001360 synchronised effect Effects 0.000 description 556
- 238000012986 modification Methods 0.000 description 208
- 230000004048 modification Effects 0.000 description 208
- 230000010076 replication Effects 0.000 description 188
- 230000015654 memory Effects 0.000 description 185
- 238000012545 processing Methods 0.000 description 138
- 239000002131 composite material Substances 0.000 description 118
- 230000007246 mechanism Effects 0.000 description 116
- 238000011084 recovery Methods 0.000 description 111
- 230000008569 process Effects 0.000 description 101
- 238000007726 management method Methods 0.000 description 89
- 230000008859 change Effects 0.000 description 63
- 239000007787 solid Substances 0.000 description 57
- 238000005192 partition Methods 0.000 description 51
- 230000008520 organization Effects 0.000 description 39
- 238000013507 mapping Methods 0.000 description 38
- 230000002085 persistent effect Effects 0.000 description 32
- 230000009471 action Effects 0.000 description 30
- 238000010586 diagram Methods 0.000 description 26
- 239000003999 initiator Substances 0.000 description 26
- 238000004458 analytical method Methods 0.000 description 24
- 238000000926 separation method Methods 0.000 description 23
- 238000012360 testing method Methods 0.000 description 23
- 238000012546 transfer Methods 0.000 description 23
- 239000000835 fiber Substances 0.000 description 22
- 238000013473 artificial intelligence Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 21
- 238000003491 array Methods 0.000 description 20
- 230000005055 memory storage Effects 0.000 description 20
- 238000012549 training Methods 0.000 description 20
- 230000008901 benefit Effects 0.000 description 17
- 230000009466 transformation Effects 0.000 description 17
- 238000004422 calculation algorithm Methods 0.000 description 16
- 238000013500 data storage Methods 0.000 description 16
- 238000005516 engineering process Methods 0.000 description 15
- 230000000737 periodic effect Effects 0.000 description 15
- 239000004744 fabric Substances 0.000 description 14
- 238000013508 migration Methods 0.000 description 14
- 230000005012 migration Effects 0.000 description 14
- 239000002243 precursor Substances 0.000 description 14
- 238000007405 data analysis Methods 0.000 description 13
- 230000000694 effects Effects 0.000 description 13
- 238000004519 manufacturing process Methods 0.000 description 12
- 210000004556 brain Anatomy 0.000 description 11
- 239000010410 layer Substances 0.000 description 11
- 230000006855 networking Effects 0.000 description 11
- 238000009826 distribution Methods 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 9
- 238000013135 deep learning Methods 0.000 description 9
- 230000000977 initiatory effect Effects 0.000 description 9
- 230000003993 interaction Effects 0.000 description 9
- 238000010801 machine learning Methods 0.000 description 9
- 230000001404 mediated effect Effects 0.000 description 9
- 235000008694 Humulus lupulus Nutrition 0.000 description 8
- 238000013528 artificial neural network Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 8
- 239000003990 capacitor Substances 0.000 description 8
- 230000003111 delayed effect Effects 0.000 description 8
- 230000009977 dual effect Effects 0.000 description 8
- 238000004146 energy storage Methods 0.000 description 8
- 230000001419 dependent effect Effects 0.000 description 7
- 238000012544 monitoring process Methods 0.000 description 7
- 238000013403 standard screening design Methods 0.000 description 7
- 230000008093 supporting effect Effects 0.000 description 7
- 239000000725 suspension Substances 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 238000012790 confirmation Methods 0.000 description 6
- 238000000844 transformation Methods 0.000 description 6
- 230000001131 transforming effect Effects 0.000 description 6
- 230000007704 transition Effects 0.000 description 6
- 125000002015 acyclic group Chemical group 0.000 description 5
- 150000001875 compounds Chemical class 0.000 description 5
- 230000008878 coupling Effects 0.000 description 5
- 238000010168 coupling process Methods 0.000 description 5
- 238000005859 coupling reaction Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000001976 improved effect Effects 0.000 description 5
- 238000002955 isolation Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 230000001052 transient effect Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 230000001133 acceleration Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 4
- 239000000872 buffer Substances 0.000 description 4
- 238000001816 cooling Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 4
- 230000007774 longterm Effects 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 238000000638 solvent extraction Methods 0.000 description 4
- 238000012384 transportation and delivery Methods 0.000 description 4
- 238000012550 audit Methods 0.000 description 3
- 229910052799 carbon Inorganic materials 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000001747 exhibiting effect Effects 0.000 description 3
- 238000002474 experimental method Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000014759 maintenance of location Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000002035 prolonged effect Effects 0.000 description 3
- 238000010926 purge Methods 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 230000026676 system process Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000004138 cluster model Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000013480 data collection Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 238000013136 deep learning model Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 235000019800 disodium phosphate Nutrition 0.000 description 2
- 238000005315 distribution function Methods 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000012010 growth Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 229910052751 metal Inorganic materials 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 241001136782 Alca Species 0.000 description 1
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 238000012896 Statistical algorithm Methods 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000032683 aging Effects 0.000 description 1
- 230000009118 appropriate response Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 239000002041 carbon nanotube Substances 0.000 description 1
- 229910021393 carbon nanotube Inorganic materials 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 238000012411 cloning technique Methods 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 230000008602 contraction Effects 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013481 data capture Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- VTKMMWSAJLCWSM-UHFFFAOYSA-H dialuminum;5-(carbamoylamino)-2-oxo-1,5-dihydroimidazol-4-olate;chloride;tetrahydroxide Chemical compound [OH-].[OH-].[OH-].[OH-].[Al+3].[Al+3].[Cl-].NC(=O)NC1NC(=O)N=C1[O-] VTKMMWSAJLCWSM-UHFFFAOYSA-H 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 239000002355 dual-layer Substances 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000037406 food intake Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000001459 lithography Methods 0.000 description 1
- 230000003137 locomotive effect Effects 0.000 description 1
- 238000007477 logistic regression Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000035755 proliferation Effects 0.000 description 1
- 238000003908 quality control method Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000009987 spinning Methods 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
- 239000007858 starting material Substances 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1658—Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit
- G06F11/1662—Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit the resynchronized component or unit being a persistent storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2038—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant with a single idle spare processing component
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2048—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant where the redundant components share neither address space nor persistent storage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2094—Redundant storage or storage space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2097—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0617—Improving the reliability of storage systems in relation to availability
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using snapshots, i.e. a logical point-in-time copy of the data
Abstract
一种豆荚,所述豆荚包括所述数据集、一组受管理对象和管理操作、用于修改或者读取所述数据集的一组访问操作以及多个存储系统,其中:管理操作可通过所述存储系统中的任一个等效地修改或者查询受管理对象,用于读取或者修改所述数据集的访问操作通过所述存储系统中的任一个等效地操作,每个存储系统将所述数据集的单独的副本作为所述数据集的真子集来存储,所述真子集被存储和通告以供所述存储系统使用,并且通过任何一个存储系统执行和完成的用于修改受管理对象或所述数据集的操作被反映在用于查询所述豆荚的后续管理对象或用于读取所述数据集的后续访问操作中。
Description
附图说明
图1A图示了依照一些实施方式的用于数据存储的第一示例系统。
图1B图示了依照一些实施方式的用于数据存储的第二示例系统。
图1C图示了依照一些实施方式的用于数据存储的第三示例系统。
图1D图示了依照一些实施方式的用于数据存储的第四示例系统。
图2A是依照一些实施例的具有多个存储节点和耦合到每个存储节点以提供网络附连存储的内部存储装置的存储集群的立体图。
图2B是示出依照一些实施例的耦合多个存储节点的互连交换机的框图。
图2C是示出依照一些实施例的存储节点的内容和非易失性固态存储单元中的一个的内容的多级框图。
图2D示出了存储服务器环境,其使用依照一些实施例的一些先前图的存储节点和存储单元的实施方式。
图2E是示出依照一些实施例的控制平面、计算和存储平面、以及与底层物理资源交互的机构的刀片硬件框图。
图2F描绘了依照一些实施例的存储集群的刀片中的弹性软件层。
图2G描绘了依照一些实施例的存储集群的刀片中的机构和存储资源。
图3A阐述了依照本公开的一些实施例的被耦合用于与云服务提供商进行数据通信的存储系统的示图。
图3B阐述了依照本公开的一些实施例的存储系统的示图。
图4阐述了图示根据本公开的一些实施例的支持豆荚(pod)的多个存储系统的框图。
图5阐述了图示根据本公开的一些实施例的支持豆荚的多个存储系统的框图。
图6阐述了图示根据本公开的一些实施例的支持豆荚的多个存储系统的框图。
图7阐述了图示根据本公开的一些实施例的在两个或更多个存储系统之间建立同步复制关系的示例方法的流程图。
图8阐述了图示根据本公开的一些实施例的在两个或更多个存储系统之间建立同步复制关系的附加示例方法的流程图。
图9阐述了图示根据本公开的一些实施例的在两个或更多个存储系统之间建立同步复制关系的附加示例方法的流程图。
图10阐述了图示根据本公开的一些实施例的在两个或更多个存储系统之间建立同步复制关系的附加示例方法的流程图。
图11阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统同步的数据集的I/O操作服务的示例方法的流程图。
图12阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统同步的数据集的I/O操作服务的附加示例方法的流程图。
图13阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统同步的数据集的I/O操作服务的附加示例方法的流程图。
图14阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统同步的数据集的I/O操作服务的附加示例方法的流程图。
图15阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统之间调解的示例方法的流程图。
图16阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统之间调解的示例方法的流程图。
图17阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统之间调解的示例方法的流程图。
图18阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的恢复的示例方法的流程图。
图19阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的恢复的示例方法的流程图。
图20阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的恢复的示例方法的流程图。
图21阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的示例方法的流程图。
图22阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图23阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图24阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图25阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图26阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图27阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图28阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图29阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。
图30阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统的连接的示例方法的流程图。
图31阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统的连接的附加示例方法的流程图。
图32阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统的连接的附加示例方法的流程图。
图33阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统的连接的附加示例方法的流程图。
图34阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统的连接的附加示例方法的流程图。
图35阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统的连接的附加示例方法的流程图。
图36阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统的连接的附加示例方法的流程图。
图37阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。
图38阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。
图39阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。
图40阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。
图41阐述依照本公开的一些实施例的可以作为元数据对象的结构化合集被实现的元数据表示的示图,所述元数据对象一起可以表示存储数据的逻辑卷或逻辑卷的一部分。
图42A阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中使元数据同步的示例方法的流程图。
图42B阐述了图示根据本公开的一些实施例的在同步地复制数据集的存储系统当中使元数据同步的示例方法的流程图。
图43阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。
图44阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。
图45阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。
图46阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。
图47阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。
图48阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中使元数据同步的示例方法的流程图。
具体实施方式
从图1A开始,参考附图描述依照本公开的实施例的用于将数据集和其他受管理对象同步地复制到基于云的存储系统的示例方法、装置和产品。图1A图示了依照一些实施方式的用于数据存储的示例系统。出于图示而非限制的目的,系统100(在本文中也称为“存储系统”)包括许多元件。可以注意到,系统100可以在其他实施方式中包括以相同或不同的方式配置的相同的、更多的、或更少的元件。
系统100包括许多计算设备164A-B。可以将计算设备(在本文中也称为“客户端设备”)具体实现为例如数据中心中的服务器、工作站、个人计算机、笔记本等。计算设备164A-B可以被耦合用于通过存储区域网(“SAN”)158或局域网(“LAN”)160与一个或多个存储阵列102A-B进行数据通信。
SAN 158可以用各种数据通信结构、设备和协议来实现。例如,用于SAN 158的结构可以包括光纤通道、以太网、Infiniband、串行附连小型计算机系统接口(‘SAS’)等。与SAN158一起使用的数据通信协议可以包括高级技术附件(‘ATA’)、光纤通道协议、小型计算机系统接口(‘SCSI’)、互联网小型计算机系统接口(‘iSCSI’)、HyperSCSI、非易失性存储器快速(‘NVMe’)over Fabrics等。可以注意到,SAN 158被提供用于图示而非限制。可以在计算设备164A-B与存储阵列102A-B之间实现其他数据通信耦合。
LAN 160还可以用各种结构、设备和协议来实现。例如,用于LAN 160的结构可以包括以太网(802.3)、无线(802.11)等。用在LAN 160中的数据通信协议可以包括传输控制协议(‘TCP’)、用户数据报协议(‘UDP’)、互联网协议(‘IP’)、超文本传输协议(‘HTTP’)、无线接入协议(‘WAP’)、手持设备传输协议(‘HDTP’)、会话发起协议(‘SIP’)、实时协议(‘RTP’)等。
存储阵列102A-B可以为计算设备164A-B提供持久数据存储。在实施方式中,存储阵列102A可以被包含在机箱(未示出)中,并且存储阵列102B可以被包含在另一机箱(未示出)中。存储阵列102A和102B可以包括一个或多个存储阵列控制器110(在本文中也称为“控制器”)。可以将存储阵列控制器110具体实现为包括计算机硬件、计算机软件、或计算机硬件和软件的组合的自动化计算机器的模块。在一些实施方式中,存储阵列控制器110可以被配置为执行各种存储任务。存储任务可以包括将从计算设备164A-B接收到的数据写入到存储阵列102A-B、从存储阵列102A-B中擦除数据、从存储阵列102A-B中取回数据并向计算设备164A-B提供数据、监视并报告磁盘利用率和性能、执行冗余操作(诸如独立驱动器冗余阵列(‘RAID’)或类似RAID的数据冗余操作)、压缩数据、对数据进行加密等。
可以以各种方式实现存储阵列控制器110,所述各种方式包括作为现场可编程门阵列(‘FPGA’)、可编程逻辑芯片(‘PLC’)、专用集成电路(‘ASIC’)、片上系统(‘SOC’),或包括诸如处理设备、中央处理单元、计算机存储器或各种适配器这样的分立组件的任何计算设备。存储阵列控制器110可以包括例如被配置为经由SAN 158或LAN 160支持通信的数据通信适配器。在一些实施方式中,存储阵列控制器110可以独立地耦合到LAN 160。在实施方式中,存储阵列控制器110可以包括I/O控制器等,其通过中平面(未示出)将用于数据通信的存储阵列控制器110耦合到持久存储资源170A-B(在本文中也称为“存储资源”)。持久存储资源170A-B主要包括任何数量的存储驱动器171A-F(在本文中也称为“存储设备”)和任何数量的非易失性随机存取存储器(‘NVRAM’)设备(未示出)。
在一些实施方式中,持久存储资源170A-B的NVRAM设备可以被配置为从存储阵列控制器110接收要存储在存储驱动器171A-F中的数据。在一些示例中,数据可以源自计算设备164A-B。在一些示例中,将数据写入到NVRAM设备与将数据直接地写入到存储驱动器171A-F相比可以被更快地执行。在实施方式中,存储阵列控制器110可以被配置为利用NVRAM设备作为用于注定要写入到存储驱动器171A-F的数据的快速可访问的缓冲器。相对于存储阵列控制器110将数据直接地写入到存储驱动器171A-F的系统,可以改进使用NVRAM设备作为缓冲器的写入请求的等待时间。在一些实施方式中,NVRAM设备可以用形式为高带宽、低等待时间RAM的计算机存储器来实现。NVRAM设备被称为“非易失性的”,因为NVRAM设备可以接收或者包括在NVRAM设备的主电力丢失之后维持RAM的状态的唯一电源。这样的电源可以是电池、一个或多个电容器等。响应于电力丢失,NVRAM设备可以被配置为将RAM的内容写入到持久存储装置,诸如存储驱动器171A-F。
在实施方式中,存储驱动器171A-F可以指代被配置为持久地记录数据的任何设备,其中“持久地”或“持久”指代设备在失电之后维持所记录的数据的能力。在一些实施方式中,存储驱动器171A-F可以对应于非磁盘存储介质。例如,存储驱动器171A-F可以是一个或多个固态驱动器(‘SSD’)、基于闪速存储器的存储装置、任何类型的固态非易失性存储器、或任何其他类型的非机械存储设备。在其他实施方式中,存储驱动器171A-F可以包括机械或旋转硬盘,诸如硬盘驱动器(‘HDD’)。
在一些实施方式中,存储阵列控制器110可以被配置用于从存储阵列102A-B中的存储驱动器71A-F卸载设备管理责任。例如,存储阵列控制器110可以管理可以描述存储驱动器171A-F中的一个或多个存储器块的状态的控制信息。该控制信息可以指示例如特定存储器块已失效并且不再应该被写入、特定存储器块包含用于存储阵列控制器110的启动代码、已对特定存储器块执行的程序擦除(‘P/E’)循环次数、存储在特定存储器块中的数据的存在时长、被存储在特定存储器块中的数据的类型等。在一些实施方式中,控制信息可以作为元数据用相关存储器块来存储。在其他实施方式中,用于存储驱动器171A-F的控制信息可以被存储在存储驱动器171A-F中的由存储阵列控制器110选择的一个或多个特定存储器块中。所选择的存储器块可以被标记有指示所选择的存储器块包含控制信息的标识符。标识符可以由存储器阵列控制器110与存储驱动器171A-F相结合地利用来快速地标识包含控制信息的存储器块。例如,存储控制器110可以发出用于定位包含控制信息的存储器块的命令。可以注意到,控制信息可以如此大,以致控制信息的各部分可以被存储在多个位置中,例如,控制信息可以出于冗余的目的而被存储在多个位置中,或者控制信息可以以其他方式跨越存储驱动器171A-F中的多个存储器块分布。
在实施方式中,存储阵列控制器110可以通过从存储驱动器171A-F中取回描述存储驱动器171A-F中的一个或多个存储器块的状态的控制信息来从存储阵列102A-B的存储驱动器171A-F卸载设备管理责任。可以例如通过存储阵列控制器110查询存储驱动器171A-F以得到用于特定存储驱动器171A-F的控制信息的位置来执行从存储驱动器171A-F中取回控制信息。存储驱动器171A-F可以被配置为执行使得存储驱动器171A-F能够标识控制信息的位置的指令。指令可以由与存储驱动器171A-F相关联或者以其他方式位于存储驱动器171A-F上的控制器(未示出)执行,并且可以使存储驱动器171A-F扫描每个存储器块的一部分以标识存储用于存储驱动器171A-F的控制信息的存储器块。存储驱动器171A-F可以通过向存储阵列控制器110发送包括用于存储驱动器171A-F的控制信息的位置的响应消息来响应。响应于接收到响应消息,存储阵列控制器110可以发出要读取存储在与用于存储驱动器171A-F的控制信息的位置相关联的地址处的数据的请求。
在其他实施方式中,存储阵列控制器110可以通过响应于接收到控制信息而执行存储驱动器管理操作来进一步从存储驱动器171A-F卸载设备管理责任。存储驱动器管理操作可以包括例如通常由存储驱动器171A-F(例如,与特定存储驱动器171A-F相关联的控制器(未示出))执行的操作。存储驱动器管理操作可以包括例如确保数据不被写入到存储驱动器171A-F内的失效的存储器块、确保数据以实现适当的擦写平衡的方式被写入到存储驱动器171A-F内的存储器块。
在实施方式中,存储阵列102A-B可以实现两个或更多个存储阵列控制器110。例如,存储阵列102A可以包括存储阵列控制器110A和存储阵列控制器110B。在给定实例下,存储系统100的单个存储阵列控制器110(例如,存储阵列控制器110A)可以被指定有主状态(在本文中也称为“主控制器”),而其他存储阵列控制器110(例如,存储阵列控制器110A)可以被指定有辅状态(在本文中也称为“辅控制器”)。主控制器可以具有特定权利,诸如更改持久存储资源170A-B中的数据(例如,将数据写入到持久存储资源170A-B)的权限。主控制器的权利中的至少一些可以代替辅控制器的权利。例如,当主控制器具有权利时辅控制器可能没有更改持久存储资源170A-B中的数据的权限。存储阵列控制器110的状态可以改变。例如,存储阵列控制器110A可以被指定有辅状态,并且存储阵列控制器控制器110B可以被指定有主状态。
在一些实施方式中,主控制器(诸如存储阵列控制器110A)可以用作用于一个或多个存储阵列102A-B的主控制器,并且第二控制器(诸如存储阵列控制器110B)可以用作用于一个或多个存储阵列102A-B的辅控制器。例如,存储阵列控制器110A可以是用于存储阵列102A和存储阵列102B的主控制器,而存储阵列控制器110B可以是用于存储阵列102A和102B的辅控制器。在一些实施方式中,存储阵列控制器110C和110D(也称为“存储处理模块”)可以既不具有主状态也不具有辅状态。作为存储处理模块实现的存储阵列控制器110C和110D可以作为主控制器和辅控制器(例如,分别为存储阵列控制器110A和110B)与存储阵列102B之间的通信接口。例如,存储阵列102A的存储阵列控制器110A可以经由SAN 158向存储阵列102B发送写入请求。该写入请求可以由存储阵列102B的存储阵列控制器110C和110D两者接收。存储阵列控制器110C和110D方便通信,例如,将写入请求发送到适当的存储驱动器171A-F。可以注意到,在一些实施方式中存储处理模块可以用于增加由主控制器和辅控制器控制的存储驱动器的数量。
在实施方式中,存储阵列控制器110经由中平面(未示出)通信地耦合到一个或多个存储驱动器171A-F并且耦合到作为存储阵列102A-B的一部分包括的一个或多个NVRAM设备(未示出)。存储阵列控制器110可以经由一个或多个数据通信链路耦合到中平面并且中平面可以经由一个或多个数据通信链路耦合到存储驱动器171A-F和NVRAM设备。例如,本文描述的数据通信链路通过数据通信链路108A-D共同地图示并且可以包括外围组件互连快速(‘PCIe’)总线。
图1B图示依照一些实施方式的用于数据存储的示例系统。图1B中图示的存储阵列控制器101可以类似于关于图1A所描述的存储阵列控制器110。在一个示例中,存储阵列控制器101可以类似于存储阵列控制器110A或存储阵列控制器110B。出于图示而非限制的目的,存储阵列控制器101包括许多元件。可以注意到,存储阵列控制器101可以在其他实施方式中包括以相同或不同的方式配置的相同的、更多的、或更少的元件。可以注意到,可以在下面包括图1A的元件以帮助图示存储阵列控制器101的特征。
存储阵列控制器101可以包括一个或多个处理设备104和随机存取存储器(‘RAM’)111。处理设备104(或控制器101)表示诸如微处理器、中央处理单元等这样的一个或多个通用处理设备。更具体地,处理设备104(或控制器101)可以是复杂指令集计算(‘CISC’)微处理器、精简指令集计算(‘RISC’)微处理器、甚长指令字(‘VLIW’)微处理器、或实现其他指令集的处理器或实现指令集的组合的处理器。处理设备104(或控制器101)也可以是一个或多个专用处理设备,诸如专用集成电路(‘ASIC’)、现场可编程门阵列(‘FPGA’)、数字信号处理器(‘DSP’)、网络处理器等。
处理设备104可以经由数据通信链路106连接到RAM 111,所述数据通信链路106可以作为诸如双倍数据速率4(‘DDR4’)总线这样的高速存储器总线被具体实现。存储在RAM111中的是操作系统112。在一些实施方式中,指令113被存储在RAM 111中。指令113可以包括用于在直接映射闪存存储系统中执行操作的计算机程序指令。在一个实施例中,直接映射闪存存储系统是直接地并在没有由闪存驱动器的存储控制器执行的地址转换的情况下对闪存驱动器内的数据块进行寻址的系统。
在实施方式中,存储阵列控制器101包括经由数据通信链路105A-C耦合到处理设备104的一个或多个主机总线适配器103A-C。在实施方式中,主机总线适配器103A-C可以是将主机系统(例如,存储阵列控制器)连接到其他网络和存储阵列的计算机硬件。在一些示例中,主机总线适配器103A-C可以是使得存储阵列控制器101能够连接到SAN的光纤通道适配器、使得存储阵列控制器101能够连接到LAN的以太网适配器等。主机总线适配器103A-C可以经由诸如例如PCIe总线这样的数据通信链路105A-C耦合到处理设备104。
在实施方式中,存储阵列控制器101可以包括耦合到扩展器115的主机总线适配器114。扩展器115可以用于将主机系统附连到更大数量的存储驱动器。扩展器115例如可以是SAS扩展器,其在主机总线适配器114作为SAS控制器被具体实现的实施方式中被利用来使得主机总线适配器114能够附连到存储驱动器。
在实施方式中,存储阵列控制器101可以包括经由数据通信链路109耦合到处理设备104的交换机116。交换机116可以是可从单个端点创建多个端点从而使得多个设备能够共享单个端点的计算机硬件设备。交换机116例如可以是PCIe交换机,其耦合到PCIe总线(例如,数据通信链路109)并且向中平面呈现多个PCIe连接点。
在实施方式中,存储阵列控制器101包括用于将存储阵列控制器101耦合到其他存储阵列控制器的数据通信链路107。在一些示例中,数据通信链路107可以是QuickPathInterconnect(QPI)互连。
使用传统闪存驱动器的传统存储系统可以实现跨越作为传统存储系统的一部分的闪存驱动器的过程。例如,存储系统的更高级过程可以发起并控制跨越闪存驱动器的过程。然而,传统存储系统的闪存驱动器可以包括它自己的也执行该过程的存储控制器。因此,对于传统存储系统,可以执行更高级过程(例如,由存储系统发起)和更低级过程(例如,由存储系统的存储控制器发起)两者。
为了解决传统存储系统的各种缺陷,可以通过更高级过程而不是通过更低级过程来执行操作。例如,闪存存储系统可以包括不包括提供该过程的存储控制器的闪存驱动器。因此,闪存存储系统它本身的操作系统可以发起并控制过程。这可以通过直接映射闪存存储系统来实现,所述直接映射闪存存储系统直接地并在没有由闪存驱动器的存储控制器执行的地址转换的情况下对闪存驱动器内的数据块进行寻址。
闪存存储系统的操作系统可以标识和维护跨越闪存存储系统的多个闪存驱动器的分配单元的列表。分配单元可以是整个擦除块或多个擦除块。操作系统可以维护将地址直接地映射到闪存存储系统的闪存驱动器的擦除块的映射或地址范围。
到闪存驱动器的擦除块的直接映射可以用于重写数据和擦除数据。例如,可以对包括第一数据和第二数据的一个或多个分配单元执行操作,其中第一数据将被保留并且第二数据不再被闪存存储系统使用。操作系统可以发起要将第一数据写入到其他分配单元内的新位置并且擦除第二数据以及将分配单元标记为可用于供后续数据使用的过程。因此,过程可以仅由闪存存储系统的更高级操作系统执行,而无需由闪存驱动器的控制器执行附加的更低级过程。
过程仅由闪存存储系统的操作系统执行的优点包括闪存存储系统的闪存驱动器的可靠性增加,因为在过程期间未在执行不必要的或冗余的写入操作。这里新颖性的一个可能点是在闪存存储系统的操作系统处发起并控制过程的构思。另外,可由操作系统跨越多个闪存驱动器控制过程。这与过程由闪存驱动器的存储控制器执行形成对比。
存储系统可由出于失效备援目的而共享一组驱动器的两个存储阵列控制器构成,或者它能由提供利用多个驱动器的存储服务的单个存储阵列控制器构成,或者它能由各自具有一定数量的驱动器或一定量的闪存存储装置的存储阵列控制器的分布式网络构成,其中网络中的存储阵列控制器协作以提供完整的存储服务并且在存储服务的包括存储分配和垃圾收集的各个方面上协作。
图1C图示依照一些实施方式的用于数据存储的第三示例系统117。出于图示而非限制的目的,系统117(在本文中也称为“存储系统”)包括许多元件。可以注意到,系统117可以在其他实施方式中包括以相同或不同的方式配置的相同的、更多的或更少的元件。
在一个实施例中,系统117包括具有单独可寻址的快写存储装置的双外围组件互连(‘PCI’)闪存存储设备118。系统117可以包括存储控制器119。在一个实施例中,存储控制器119可以是CPU、ASIC、FPGA或可以实现根据本公开所必需的控制结构的任何其他电路。在一个实施例中,系统117包括在操作上耦合到存储设备控制器119的各种通道的闪速存储器设备(例如,包括闪速存储器设备120a-n)。闪速存储器设备120a-n可以作为足以允许存储设备控制器119对闪存的各个方面进行编程和取回的闪存页面、擦除块和/或控制元件的可寻址合集被呈现给控制器119。在一个实施例中,存储设备控制器119可以对闪速存储器设备120A-N执行操作,包括存储和取回页面的数据内容,布置和擦除任何块,跟踪与闪速存储器页面、擦除块和单元的使用和重用有关的统计,跟踪并预测闪速存储器内的错误代码和故障,控制与对闪存单元的内容进行编程和取回有关的电压电平等。
在一个实施例中,系统117可以包括RAM 121以存储单独可寻址的快写数据。在一个实施例中,RAM 121可以是一个或多个单独的分立设备。在另一实施例中,RAM 121可以被集成到存储设备控制器119或多个存储设备控制器中。RAM 121也可以被用于其他目的,诸如用于存储设备控制器119中的处理设备(例如,CPU)的临时程序存储器。
在一个实施例中,系统119可以包括储能设备122,诸如可再充电电池或电容器。储能设备122可以存储足以在足够的时间内给存储设备控制器119、一定量的RAM(例如,RAM121)以及一定量的闪速存储器(例如,闪速存储器120a-120n)供电以将RAM的内容写入到闪速存储器的能量。在一个实施例中,如果存储设备控制器检测到外部电力的丢失,则存储设备控制器119可以将RAM的内容写入到闪速存储器。
在一个实施例中,系统117包括两个数据通信链路123a、123b。在一个实施例中,数据通信链路123a、123b可以是PCI接口。在另一实施例中,数据通信链路123a、123b可以基于其他通信标准(例如,HyperTransport、InfiniBand等)。数据通信链路123a、123b可以基于允许从存储系统117中的其他组件到存储设备控制器119的外部连接的非易失性存储器快速(‘NVMe’)或NVMe over fabrics(‘NVMf’)规范。应该注意的是,为了方便数据通信链路可以在本文中被互换地称为PCI总线。
系统117还可以包括外部电源(未示出),其可以通过一个或两个数据通信链路123a、123b来提供,或者其可以被单独地提供。替代实施方式包括专用于在存储RAM 121的内容时使用的单独的闪速存储器(未示出)。存储设备控制器119可以通过PCI总线呈现逻辑设备,所述逻辑设备可以包括可寻址的快写逻辑设备,或存储设备118的逻辑地址空间的不同部分,其可以被表示为PCI存储器或持久存储装置。在一个实施例中,存储到设备中的操作被引导到RAM 121中。在电源故障时,存储设备控制器119可以将存储的与可寻址的快写逻辑存储装置相关联的内容写入到闪速存储器(例如,闪速存储器120a-n)以供长期持久存储。
在一个实施例中,逻辑设备可以包括闪速存储器设备120a-n的一些或所有内容的某种呈现,其中该呈现允许包括存储设备118的存储系统(例如,存储系统117)直接地对闪速存储器页面进行寻址并且通过PCI总线从在存储设备外部的存储系统组件直接地对擦除块进行重新编程。呈现还可以允许一个或多个外部组件控制并取回闪速存储器的其他方面,包括以下各项中的一些或全部:跟踪与跨越所有闪速存储器设备的闪速存储器页面、擦除块和单元的使用和重用有关的统计;跟踪并预测闪速存储器设备内和跨越闪速存储器设备的错误代码和故障;控制与对闪存单元的内容进行编程和取回相关联的电压电平;等。
在一个实施例中,储能设备122可能足以确保完成对闪速存储器设备107a-120n的进行中的操作。储能设备122可以为了那些操作以及为了将快写RAM存储到闪速存储器而给存储设备控制器119和相关联的闪速存储器设备(例如,120a-n)供电。储能设备122可以用于存储由闪速存储器设备120a-n和/或存储设备控制器119保持和跟踪的累积统计和其他参数。单独的电容器或储能设备(诸如靠近或者嵌入在闪速存储器设备本身中的较小电容器)可以被用于本文描述的一些或所有操作。
可以使用各种方案来跟踪并优化储能组件的寿命,诸如随着时间的推移而调整电压电平、部分地使储能设备122放电以测量对应的放电特性等。如果可用能量随着时间的推移而减少,则可以减少可寻址的快写存储装置的有效可用容量以确保可基于当前可用的存储能量安全地写入它。
图1D图示了依照一些实施方式的用于数据存储的第三示例系统124。在一个实施例中,系统124包括存储控制器125a、125b。在一个实施例中,存储控制器125a、125b分别在操作上耦合到双PCI存储设备119a、119b和119c、119d。存储控制器125a、125b可以在操作上耦合(例如,经由存储网络130)到一定数量的主机计算机127a-n。
在一个实施例中,两个存储控制器(例如,125a和125b)提供存储服务,诸如SCSI块存储阵列、文件服务器、对象服务器、数据库或数据分析服务等。存储控制器125a、125b可以通过一定数量的网络接口(例如,126a-d)来向存储系统124外部的主机计算机127a-n提供服务。存储控制器125a、125b可以完全在存储系统124内提供集成服务或应用,从而形成融合存储和计算系统。存储控制器125a、125b可以利用存储设备119a-d内或跨越存储设备119a-d的快写存储器来记录进行中的操作以确保操作在电源故障、存储控制器移除、存储控制器或存储系统关闭、或存储系统124内的一个或多个软件或硬件组件的某个故障时不丢失。
在一个实施例中,控制器125a、125b作为一个或其他PCI总线128a、128b的PCI主控而操作。在另一实施例中,128a和128b可以基于其他通信标准(例如,HyperTransport、InfiniBand等)。其他存储系统实施方式可以将存储控制器125a、125b作为用于PCI总线128a、128b两者的多主控来操作。可替代地,PCI/NVMe/NVMf交换基础设施或结构可以连接多个存储控制器。一些存储系统实施方式可以允许存储设备直接地彼此通信,而不是仅与存储控制器进行通信。在一个实施例中,存储设备控制器119a可以在来自存储控制器125a的指导下操作以根据已被存储在RAM(例如,图1C的RAM 121)中的数据来合成并转移要存储到闪速存储器设备中的数据。例如,在存储控制器已确定了操作已跨越存储系统完全提交之后,或者当设备上的快写存储器已达到某个已用容量时,或者在某个时间量之后,可以转移RAM内容的重新计算版本,以确保改进数据的安全性或者以释放可寻址快写容量以供重用。例如,可以使用此机制来避免通过总线(例如,128a、128b)从存储控制器125a、125b进行二次转移。在一个实施例中,重新计算可以包括压缩数据、附加索引或其他元数据、将多个数据段组合在一起、执行擦除代码计算等。
在一个实施例中,在来自存储控制器125a、125b的指导下,存储设备控制器119a、119b可以操作来在不涉及存储控制器125a、125b的情况下根据存储在RAM(例如,图1C的RAM121)中的数据来计算数据并将数据转移到其他存储设备。此操作可以用于将存储在一个控制器125a中的数据镜像到另一控制器125b,或者它能用于卸载压缩、数据聚合、和/或擦除编码计算以及到存储设备的转移以减少存储控制器或存储控制器接口129a、129b到PCI总线128a、128b上的负载。
存储设备控制器119可以包括用于实现高可用性原语以供由存储系统的在双PCI存储设备118外部的其他部分使用的机制。例如,可以提供保留或排除原语,使得在具有提供高可用存储服务的两个存储控制器的存储系统中,一个存储控制器可以防止另一个存储控制器访问或者继续访问存储设备。例如,在一个控制器检测到另一个控制器未正常运行或者两个存储控制器之间的互连它本身可能未正常运行的情况下,能使用这个。
在一个实施例中,与具有单独可寻址的快写存储装置的双PCI直接映射存储设备一起使用的存储系统包括将擦除块或擦除块组作为用于代表存储服务存储数据或者用于存储与存储服务相关联的元数据(例如,索引、日志等)或者用于存储系统它本身的适当管理的分配单元来管理的系统。闪存页面(其大小可以是几千字节)可以在数据到达时或者在存储系统将在长时间间隔(例如,高于定义的时间阈值)内保持数据时被写入。为了更快地提交数据,或者为了减少对闪速存储器设备的写入次数,存储控制器可以首先将数据写入到一个或多个存储设备上的单独可寻址的快写存储装置中。
在一个实施例中,存储控制器125a、125b可以依照存储设备的存在时长和预期剩余寿命或者基于其他统计来发起对存储设备(例如,118)内和跨越存储设备(例如,118)的擦除块的使用。存储控制器125a、125b可以依照不再需要的页面来发起存储设备之间的垃圾收集和数据迁移以及管理闪存页面和擦除块寿命并且管理总体系统性能。
在一个实施例中,存储系统124可以利用镜像和/或擦除编码方案作为将数据存储到可寻址的快写存储装置中的一部分和/或作为将数据写入到与擦除块相关联的分配单元中的一部分。可以跨越存储设备以及在擦除块或分配单元内或者在单个存储设备上的闪速存储器设备内并跨越单个存储设备上的闪速存储器设备使用擦除代码,以针对单个或多个存储设备故障提供冗余或者以保护免受由闪速存储器操作产生或者由闪速存储器单元的降级产生的闪速存储器页面的内部损坏。可以使用各种级别下的镜像和擦除编码来从单独地或相结合地发生的多种类型的故障中恢复。
参考图2A至图2G所描绘的实施例图示了存储集群,所述存储集群存储用户数据,诸如源自一个或多个用户或客户端系统或在存储集群外部的其他源的用户数据。存储集群使用元数据的擦除编码和冗余副本来跨越在一机箱内或者跨越多个机箱收容的存储节点分发用户数据。擦除编码指代数据保护或重构的方法,其中数据被跨越一组不同的位置(诸如磁盘、存储节点或地理位置)存储。闪速存储器是可以与实施例集成的一种类型的固态存储器,但是实施例可以被扩展到其他类型的固态存储器或其他存储介质,包括非固态存储器。存储位置和工作负载的控制跨越集群对等系统中的存储位置分布。诸如调解各个存储节点之间的通信、检测存储节点何时已变得不可用以及跨越各个存储节点使I/O(输入和输出)平衡等这样的任务都是在分布式基础上进行处理。在一些实施例中,数据按照支持数据恢复的数据片段或条带跨越多个存储节点展开或分布。可独立于输入和输出模式在集群内重新指派数据的所有权。在下面更详细地描述的这种架构允许集群中的存储节点失效,同时系统保持工作,因为数据可从其他存储节点重构并因此保持可用于输入和输出操作。在各种实施例中,存储节点可以被称为集群节点、刀片、或服务器。
存储集群可以被包含在机箱(即,收容一个或多个存储节点的外壳)内。用于向每个存储节点提供电力的机制(诸如电力分配总线)和通信机制(诸如启用存储节点之间的通信的通信总线)被包括在机箱内。根据一些实施例,存储集群可以作为一个位置中的独立系统而运行。在一个实施例中,机箱包含可以被独立地启用或者禁用的电力分配总线和通信总线两者的至少两个实例。内部通信总线可以是以太网总线,然而,诸如PCIe、InfiniBand等的其他技术是同样适合的。机箱为外部通信总线提供端口,以便直接地或者通过交换机使得能实现多个机箱之间的通信,并且使得能实现与客户端系统的通信。外部通信可以使用诸如以太网、InfiniBand、光纤通道等这样的技术。在一些实施例中,外部通信总线将不同的通信总线技术用于机箱间和客户端通信。如果在机箱内或者在机箱之间部署交换机,则交换机可以作为多个协议或技术之间的转换。当多个机箱被连接以定义存储集群时,该存储集群可以由客户端使用诸如网络文件系统(‘NFS’)、公共互联网文件系统(‘CIFS’)、小型计算机系统接口(‘SCSI’)或超文本传输协议(‘HTTP’)这样的专有接口或标准接口来访问。来自客户端协议的转换可以发生在交换机、机箱外部通信总线处或者在每个存储节点内。在一些实施例中,多个机箱可以通过聚合器交换机彼此耦合或连接。可以将经耦合或连接的机箱的一部分和/或全部指定为存储集群。如上面所讨论的,每个机箱可具有多个刀片,每个刀片具有介质访问控制(‘MAC’)地址,但是在一些实施例中,存储集群被呈现给外部网络好像具有单个集群IP地址和单个MAC地址。
每个存储节点可以是一个或多个存储服务器并且每个存储服务器连接到一个或多个非易失性固态存储器单元,其可以被称为存储单元或存储设备。一个实施例在每个存储节点中并且在一个至八个非易失性固态存储器单元之间包括单个存储服务器,但是这一个示例不意在为限制性的。存储服务器可以包括处理器、DRAM以及用于内部通信总线和针对电力总线中的每一条的电力分配的接口。在一些实施例中,在存储节点内部,接口和存储单元共享通信总线,例如PCI Express。非易失性固态存储器单元可以通过存储节点通信总线来直接地访问内部通信总线接口,或者请求存储节点访问总线接口。在一些实施例中,非易失性固态存储器单元包含嵌入式CPU、固态存储控制器、以及一定量的固态大容量存储装置,例如,在2-32太字节(‘TB’)之间。嵌入式易失性存储介质(诸如DRAM)和能量储备装置被包括在非易失性固态存储器单元中。在一些实施例中,能量储备装置是在电力丢失的情况下使得能够将DRAM内容的子集转移到稳定存储介质的电容器、超级电容器、或电池。在一些实施例中,非易失性固态存储器单元由存储类存储器构造,所述存储类存储器诸如取代DRAM并使得能实现减少电力保持装置的相变或磁阻随机存取存储器(‘MRAM’)。
存储节点和非易失性固态存储装置的许多特征之一是在存储集群中主动地重建数据的能力。存储节点和非易失性固态存储装置可确定存储集群中的存储节点或非易失性固态存储装置何时不可达,而与是否存在读取涉及该存储节点或非易失性固态存储装置的数据的尝试无关。存储节点和非易失性固态存储装置然后合作以在至少部分新的位置中恢复和重建数据。这构成主动重建,因为系统在无需等待直到从采用存储集群的客户端系统发起的读取访问需要数据为止的情况下重建数据。在下面讨论存储存储器及其操作的这些和进一步的细节。
图2A是依照一些实施例的存储集群161的立体图,其中多个存储节点150和内部固态存储器耦合到每个存储节点以提供网络附连存储或存储区域网。网络附连存储、存储区域网、或存储集群、或其他存储存储器能按照物理组件以及由此提供的存储存储器的量两者的灵活且可重新配置的布置包括一个或多个存储集群161,每个存储集群161具有一个或多个存储节点150。存储集群161被设计为装配在机架中,并且可针对存储存储器视需要而定设置和填充一个或多个机架。存储集群161具有机箱138,所述机箱138具有多个插槽142。应该领会的是,机箱138可以被称为壳体、外壳或机架单元。在一个实施例中,机箱138具有十四个插槽142,但是容易地设计其他数量的插槽。例如,一些实施例具有四个插槽、八个插槽、十六个插槽、三十二个插槽或其他适合数量的插槽。在一些实施例中每个插槽142可容纳一个存储节点150。机箱138包括可被利用来将机箱138安装在机架上的挡板148。风扇144提供用于冷却存储节点150及其部件的空气循环,但是能使用其他冷却组件,或者能设计没有冷却组件的实施例。交换结构146将机箱138内的存储节点150耦合在一起并耦合到网络以便与存储器通信。在本文描绘的实施例中,出于说明性目的在交换结构146和风扇144左边的插槽142被示出为被存储节点150占据,然而在交换结构146和风扇144右边的插槽142是空的并且可用于插入存储节点150。此配置是一个示例,并且一个或多个存储节点150能按照各种另外的布置占据插槽142。在一些实施例中存储节点布置不必是顺序的或相邻的。存储节点150是热可插拔的,意味着存储节点150可被插入到机箱138中的插槽142中,或者从插插槽142移除,而不用停止或者关闭系统。在从插槽142插入或者移除存储节点150时,系统自动地重新配置以便识别并适应变化。在一些实施例中,重新配置包括恢复冗余和/或使数据或负载重新平衡。
每个存储节点150可具有多个组件。在这里所示的实施例中,存储节点150包括由CPU 156(即,处理器)、耦合到CPU 156的存储器154、以及耦合到CPU 156的非易失性固态存储装置152填充的印刷电路板159,但是能在另外的实施例中使用其他安装件和/或组件。存储器154具有由CPU 156执行的指令和/或由CPU 156操作的数据。如在下面进一步说明的,非易失性固态存储装置152包括闪存,或者在另外的实施例中,包括其他类型的固态存储器。
参考图2A,存储集群161是可扩展的,意味着容易地添加具有非统一存储大小的存储容量,如上所述。一个或多个存储节点150可被插入到每个机箱中或者从每个机箱移除并且存储集群在一些实施例中自我配置。插入存储节点150(无论是在交付时还是稍后添加时被安装在机箱中)都可具有不同的大小。例如,在一个实施例中存储节点150可具有4TB的任何倍数,例如,8TB、12TB、16TB、32TB等。在另外的实施例中,存储节点150能具有其他存储量或容量的任何倍数。每个存储节点150的存储容量被广播,并且影响如何条带化数据的决定。为了最大存储效率,实施例可在条带中自我配置尽可能宽,经受在机箱内丢失多达一个或多达两个非易失性固态存储单元152或存储节点150情况下的连续操作的预定要求。
图2B是示出耦合多个存储节点150的通信互连171A-F和电力分配总线172的框图。返回参考图2A,在一些实施例中通信互连171A-F可被包括在交换结构146中或者利用交换结构146来实现。在一些实施例中,在多个存储集群161占据机架的情况下,通信互连171A-F可被包括在机架交换机的顶部中或者通过机架交换机的顶部来实现。如图2B中所图示的,存储集群161被包封在单个机箱138内。外部端口176通过通信互连171A-F耦合到存储节点150,然而外部端口174直接地耦合到存储节点。外部电源端口178耦合到电力分配总线172。存储节点150可以包括如参考图2A所描述的非易失性固态存储装置152的变化量和不同容量。另外,一个或多个存储节点150可以是如图2B中所图示的仅计算存储节点。机构168被实现在非易失性固态存储装置152上,例如作为存储在存储器中的列表或其他数据结构。在一些实施例中机构被存储在非易失性固态存储装置152内并且通过在非易失性固态存储装置152的控制器或其他处理器上执行的软件来支持。在另一个实施例中,机构168被实现在存储节点150上,例如作为存储在存储器154中并通过在存储节点150的CPU 156上执行的软件来支持的列表或其他数据结构。在一些实施例中机构168控制数据被存储在非易失性固态存储装置152中的方式和位置。此控制帮助确定哪一种类型的擦除编码方案被应用于数据,以及哪些存储节点150具有数据的哪些部分。每个机构168可以被指派给非易失性固态存储装置152。在各种实施例中,每个机构可以控制由文件系统、由存储节点150、或者由非易失性固态存储装置152指派给数据的inode号、段号、或其他数据标识符的范围。
在一些实施例中每一条数据和每一条元数据在系统中具有冗余。另外,每一条数据和每一条元数据有所有者,其可以被称为机构。如果该机构是不可达的,例如由于存储节点的故障,则存在如何查找该数据或该元数据的连续计划。在各种实施例中,存在机构168的冗余副本。在一些实施例中,机构168与存储节点150和非易失性固态存储装置152有关系。覆盖数据的一系列数据段号或其他标识符的每个机构168可以被指派给具体非易失性固态存储装置152。在一些实施例中针对所有这些范围的机构168分布在存储集群的非易失性固态存储装置152之上。每个存储节点150具有网络端口,所述网络端口提供对该存储节点150的(一个或多个)非易失性固态存储装置152的访问。数据可被存储在与段号相关联的段中,并且该段号在一些实施例中是用于配置RAID(独立磁盘冗余阵列)条带的间接手段。因此,机构168的指派和使用因此建立数据的间接手段。依照一些实施例,间接手段可以被称为间接地(在这种情况下经由机构168)引用数据的能力。段标识一组非易失性固态存储装置152以及可将数据包含到该一组非易失性固态存储装置152中的本地标识符。在一些实施例中,本地标识符是到设备中的偏移并且可以由多个段顺序地重用。在其他实施例中本地标识符对于具体段是唯一的并且从不重用。非易失性固态存储装置152中的偏移被应用于定位数据以便(以RAID条带的形式)写入到非易失性固态存储装置152或者从非易失性固态存储装置152读取。数据被跨越非易失性固态存储装置152的多个单元条带化,所述多个单元可以包括或者不同于具有用于特定数据段的机构168的非易失性固态存储装置152。
如果在数据的特定段所位于的位置中有变化(例如,在数据移动或数据重构期间),则应该在具有该机构168的该非易失性固态存储装置152或存储节点150处查阅用于该数据段的机构168。为了定位特定条数据,实施例计算数据段的散列值或者应用inode号或数据段号。此操作的输出指向具有用于该特定条数据的机构168的非易失性固态存储装置152。在一些实施例中此操作有两个阶段。第一阶段将实体标识符(ID)(例如,段号、inode号或目录号)映射到机构标识符。此映射可以包括诸如散列或位掩码这样的计算。第二阶段是将机构标识符映射到特定非易失性固态存储装置152,这可以通过显式映射来完成。该操作是可重复的,使得当计算被执行时,计算的结果可重复且可靠地指向具有该机构168的特定非易失性固态存储装置152。该操作可以包括可达存储节点的集合作为输入。如果可达非易失性固态存储单元的集合改变则最佳的集合改变。在一些实施例中,所存留的值是当前指派(其总是为真)并且所计算出的值是集群将试图重新配置针对的目标指派。此计算可以用于在存在可达且构成相同集群的一组非易失性固态存储装置152的情况下为机构确定最佳的非易失性固态存储装置152。计算还确定对等非易失性固态存储装置152的有序集合,其还将记录机构到非易失性固态存储装置映射,使得即使所指派的非易失性固态存储装置不可达也可以确定机构。如果具体机构168在一些实施例中不可用,则可以查阅重复或替代机构168。
参考图2A和图2B,存储节点150上的CPU 156的许多任务中的两个是分解写入的数据,并重组读取的数据。当系统已确定了数据将被写入时,用于该数据的机构168被如上定位。当已经确定了用于数据的段ID时,写入请求被转发到当前确定为根据段确定的机构168的主机的非易失性固态存储装置152。非易失性固态存储装置152和对应的机构168驻留在上面的存储节点150的主机CPU 156然后对数据进行分解或者分片并且将该数据发出到各种非易失性固态存储装置152。所发送的数据被依照擦除编码方案作为数据条带被写入。在一些实施例中,请求拉出数据,而在其他实施例中,数据被推送。相反地,当数据被读取时,如上所述定位用于包含数据的段ID的机构168。非易失性固态存储装置152和对应的机构168驻留在上面的存储节点150的主机CPU 156从由机构指向的非易失性固态存储装置和对应的存储节点请求数据。在一些实施例中数据被作为数据条带从闪存存储装置读取。存储节点150的主机CPU 156然后重组所读取的数据,根据适当的擦除编码方案来校正任何错误(若存在的话),并且将经重组的数据转发到网络。在另外的实施例中,可在非易失性固态存储装置152中处理这些任务中的一些或全部。在一些实施例中,段主机通过从存储装置请求页面并且然后将数据发送到做出原始请求的存储节点来请求将数据发送到存储节点150。
在一些系统中,例如在UNIX风格文件系统中,数据用索引节点或inode处理,所述索引节点或inode指定在文件系统中表示对象的数据结构。例如,对象可能是文件或目录。元数据可以伴随对象,作为诸如权限数据和创建时间戳这样的属性以及其他属性。能将段号指派给文件系统中的这种对象的全部或一部分。在其他系统中,数据段用在别处指派的段号处理。出于讨论的目的,分发的单元是实体,并且实体可以是文件、目录或段。也就是说,实体是由存储系统存储的数据或元数据的单元。实体被分组成称作机构的集合。每个机构均有机构所有者,其是有更新机构中的实体的排他权利的存储节点。换句话说,存储节点包含机构,并且机构又包含实体。
段依照一些实施例是数据的逻辑容器。段是介质地址空间之间的地址空间,并且物理闪存位置(即,数据段号)在此地址空间中。段还可以包含元数据,这使得数据冗余能够被恢复(重写到不同的闪存位置或设备),而无需更高级软件的参与。在一个实施例中,段的内部格式包含客户端数据和介质映射以确定该数据的位置。通过在适用的情况下将段分解成许多数据和奇偶校验分片,每个数据段被保护,例如,免受存储器和其他故障。数据和奇偶校验分片依照擦除编码方案跨越耦合到主机CPU 156(见图2E和图2G)的非易失性固态存储装置152分布,即条带化。在一些实施例中术语段的使用指代容器及其在段的地址空间中的位置。依照一些实施例术语条带的使用指代与段相同的一组分片并且包括分片如何连同冗余或奇偶校验信息一起被分发。
一系列地址空间变换跨越整个存储系统发生。在顶部是链接到inode的目录条目(文件名)。Inode指向介质地址空间,其中数据被以逻辑方式存储。介质地址可以通过一系列间接介质来映射以分散大文件的负载,或者实现像重复删除或快照这样的数据服务。介质地址可以通过一系列间接介质来映射以分散大文件的负载,或者实现像重复删除或快照这样的数据服务。段地址然后被转换成物理闪存位置。依照一些实施例物理闪存位置具有受系统中的闪存量约束的地址范围。介质地址和段地址是逻辑容器,并且在一些实施例中使用128位或更大的标识符以便实际上是无限的,其中重用的可能性被计算为比系统的预期寿命长。在一些实施例中以分层方式分配来自逻辑容器的地址。最初,可以为每个非易失性固态存储单元152指派地址空间的范围。在此指派的范围内,非易失性固态存储装置152能够在不用与其他非易失性固态存储装置152同步的情况下分配地址。
数据和元数据通过针对变化工作负载模式和存储设备而优化的一组底层存储布局来存储。这些布局并入多个冗余方案、压缩格式和索引算法。这些布局中的一些存储关于机构和机构主控的信息,然而其他布局存储文件元数据和文件数据。冗余方案包括在单个存储设备(诸如NAND闪存芯片)中容忍损坏比特的纠错码、容忍多个存储节点的故障的纠删码以及容忍数据中心或区域故障的复制方案。在一些实施例中,在单个存储单元内使用低密度奇偶校验(‘LDPC’)码。在一些实施例中,在存储集群内使用里德-所罗门编码,并且在一些实施例中在存储网格内使用镜像。可以使用有序日志结构化索引(诸如日志结构化合并树)来存储元数据,并且可以不在日志结构化布局中存储大数据。
为了跨越实体的多个副本维持一致性,存储节点通过计算隐式地同意两件事:(1)包含实体的机构,以及(2)包含机构的存储节点。将实体指派给机构可通过将实体伪随机地指派给机构、通过基于在外部产生的密钥将实体分成范围或者通过将单个实体放置到每个机构中来完成。伪随机方案的示例是线性散列和在可扩展散列下的复制(‘RUSH’)系列散列,包括在可扩展散列下的受控复制(‘CRUSH’)。在一些实施例中,伪随机指派被仅用于将机构指派给节点。因为节点集可改变。机构集不能改变,所以可在这些实施例中应用任何主观功能。一些放置方案将机构自动地放置在存储节点上,然而其他放置方案依靠机构到存储节点的显式映射。在一些实施例中,利用伪随机方案来从每个机构映射到一组候选机构所有者。与CRUSH有关的伪随机数据分发函数可以将机构指派给存储节点并创建指派了机构的列表。每个存储节点具有伪随机数据分发函数的副本,并且可达到用于分发并且稍后查找或者定位机构的相同计算。在一些实施例中这些伪随机方案中的每一个均要求存储节点的可达集合作为输入以便推断出相同的目标节点。一旦已将实体放置在机构中,就可以将该实体存储在物理设备上,使得预期故障不会导致意外的数据丢失。在一些实施例中,重新平衡算法试图将所有实体的副本存储在相同布局中的机构内并且存储在在同一组机器上。
预期故障的实施例包括设备故障、被盗机器、数据中心火灾和区域灾难,诸如核或地质事件。不同的故障导致不同级别的可接受的数据丢失。在一些实施例中,被盗存储节点既不影响系统的安全性也不影响系统的可靠性,然而取决于系统配置,区域事件能导致不丢失数据、几秒或几分钟的更新丢失或甚至完全数据丢失。
在实施例中,为了存储冗余而放置数据独立于为了数据一致性而放置机构。在一些实施例中,包含机构的存储节点不包含任何持久存储装置。替代地,存储节点连接到不包含机构的非易失性固态存储单元。存储节点与非易失性固态存储单元之间的通信互连由多种通信技术构成并且具有非统一性能和容错特性。在一些实施例中,如上面所提及的,非易失性固态存储单元经由PCI express连接到存储节点,存储节点使用以太网底板在单个机箱内连接在一起,并且机箱被连接在一起以形成存储集群。在一些实施例中存储集群使用以太网或光纤信道来连接到客户端。如果多个存储集群被配置到存储网格中,则使用互联网或其他远程联网链路(诸如“地铁规模”链路或不遍历互联网的专用链路)来连接多个存储集群。
机构所有者具有修改实体、将实体从一个非易失性固态存储单元迁移到另一非易失性固态存储单元以及添加和删除实体的副本的排他权利。这允许维护底层数据的冗余。当机构所有者失效、将要退役、或者过载时,机构被转移到新的存储节点。瞬态故障使确保所有无故障机器在新的机构位置上达成一致变得有意义。由于瞬态故障而出现的模糊性可通过诸如Paxos这样的共识协议、热温失效备援方案自动地实现,由远程系统管理员或者由本地硬件管理员经由手动干预(诸如通过以物理方式从集群移除失效的机器或者按压失效的机器上的按钮)实现。在一些实施例中,使用共识协议,并且失效备援是自动的。如果在太短的时间段内发生太多的故障或复制事件,则系统进入自我保存模式并且暂停复制和数据移动活动,直到管理员依照一些实施例进行干预为止。
当在存储节点之间转移机构并且机构所有者更新其机构中的实体时,系统在存储节点与非易失性固态存储单元之间转移消息。关于持久消息,具有不同目的的消息具有不同的类型。取决于消息的类型,系统维持不同的定序和耐久性保证。随着持久消息被处理,消息被暂时存储在多种耐久和非耐久存储硬件技术中。在一些实施例中,消息被存储在RAM、NVRAM中和在NAND闪存设备上,并且使用各种协议以便高效地利用每个存储介质。等待时间敏感的客户端请求可以存留在复制的NVRAM中,然后稍后存留在NAND中,然而后台重新平衡操作被直接地存留到NAND。
持久消息在被发送之前被持久地存储。这允许系统不管故障和组件替换都继续为客户端请求服务。尽管许多硬件组件包含对系统管理员、制造商、硬件供应链和持续监视质量控制基础设施可见的唯一标识符,但是在基础设施之上运行的应用虚拟化地址。这些虚拟化地址不会在存储系统的使用期期间改变,而不管组件故障和替换。这允许在无需重新配置或中断客户端请求处理的情况下随着时间的推移而替换存储系统的每个组件,即,系统支持非中断升级。
在一些实施例中,虚拟化地址被以足够的冗余存储。连续监视系统使硬件和软件状态与硬件标识符相关联。这允许检测并预测由于有故障的组件和制造细节而导致的故障。在一些实施例中通过从关键路径移除组件,监视系统还使得能够在故障发生之前主动地转移机构和实体远离受影响设备。
图2C是示出存储节点150的内容和存储节点150的非易失性固态存储装置152的内容的多级框图。在一些实施例中通过网络接口控制器(‘NIC’)202来向存储节点150传送数据并从存储节点150传送数据。如上面所讨论的,每个存储节点150具有CPU 156和一个或多个非易失性固态存储装置152。在图2C中向下移动一个级别,每个非易失性固态存储装置152具有相对快的非易失性固态存储器,诸如非易失性随机存取存储器(‘NVRAM’)204和闪速存储器206。在一些实施例中,NVRAM 204可以是不需要编程/擦除周期的组件(DRAM、MRAM、PCM),并且可以是可支持比读取存储器更频繁地写入的存储器。在图2C中向下移动到另一级别,NVRAM 204在一个实施例中被实现为由能量储备218后援的高速易失性存储器,诸如动态随机存取存储器(DRAM)216。能量储备218提供足够的电力来使DRAM 216保持被供电足够长以便内容在电源故障的情况下被转移到闪速存储器206。在一些实施例中,能量储备218是电容器、超级电容器、电池、或其他设备,其供应足以使得能够在断电的情况下将DRAM 216的内容转移到稳定存储介质的能量的适合供应。闪速存储器206被实现为多个闪存管芯222,其可以被称为闪存管芯222的封装或闪存管芯222的阵列。应该领会的是,能按每封装单个管芯、每封装多个管芯(即多芯片封装)、在混合封装中、作为印刷电路板或其他基板上的裸芯片、作为胶囊管芯等以任何数量的方式封装闪存管芯222。在所示的实施例中,非易失性固态存储装置152具有控制器212或其他处理器,以及耦合到控制器212的输入输出(I/O)端口210。I/O端口210耦合到闪存存储节点150的CPU 156和/或网络接口控制器202。闪存输入输出(I/O)端口220耦合到闪存管芯222,并且直接存储器存取单元(DMA)214耦合到控制器212、DRAM 216和闪存管芯222。在所示的实施例中,I/O端口210、控制器212、DMA单元214和闪存I/O端口220被实现在可编程逻辑器件(‘PLD’)208(例如,现场可编程门阵列(FPGA))上。在此实施例中,每个闪存管芯222具有页面(被组织为十六kB(千字节)页面224)以及可用来将数据写入到闪存管芯222或者从闪存管芯222读取数据的寄存器226。在另外的实施例中,代替或除了闪存管芯222内图示的闪速存储器之外还使用其他类型的固态存储器。
在如本文所公开的各种实施例中,存储集群161通常可与存储阵列对比。存储节点150是创建存储集群161的合集的一部分。每个存储节点150拥有一片数据以及提供该数据所需要的计算。多个存储节点150协作以存储和取回数据。如通常在存储阵列中使用的存储存储器或存储设备较少涉及处理和操纵数据。存储阵列中的存储存储器或存储设备接收用于读取、写入、或者擦除数据的命令。存储阵列中的存储存储器或存储设备不知道嵌入有它们的更大系统或者数据意指什么。存储阵列中的存储存储器或存储设备可包括各种类型的存储存储器,诸如RAM、固态驱动器、硬盘驱动器等。本文描述的存储单元152具有同时地有效并且为多个目的服务的多个接口。在一些实施例中,存储节点150的某个功能性被转移到存储单元152中,从而将存储单元152变换成存储单元152和存储节点150的组合。将计算(相对于存储数据)放置到存储单元152中使这种计算更接近于数据它本身。各种系统实施例具有带不同能力的存储节点层的层次。相比之下,在存储阵列中,控制器拥有并知道关于控制器在架子或存储设备中管理的所有数据的一切。在存储集群161中,如本文所描述的,多个存储单元152和/或存储节点150中的多个控制器以各种方式合作(例如,用于擦除编码、数据分片、元数据通信和冗余、存储容量扩展或收缩、数据恢复等)。
图2D图示了存储服务器环境,其使用图2A至图2C的存储节点150和存储单元152的实施例。在此版本中,每个存储单元152具有诸如控制器212(参见图2C)这样的处理器、FPGA(现场可编程门阵列)、闪速存储器206、以及位于机箱138(参见图2A)中的PCIe(外围组件互连快速)板上的NVRAM 204(其是超级电容器支持的DRAM 216,参见图2B和图2C)。存储单元152可以被实现为包含存储装置的单个板,并且可以是机箱内部的最大可容忍的故障域。在一些实施例中,多达两个存储单元152可以失效并且设备将继续而没有数据丢失。
在一些实施例中物理存储装置基于应用使用被划分成命名区域。NVRAM 204是存储单元152DRAM 216中的保留存储器的连续块,并且由NAND闪存支持。NVRAM 204在逻辑上被划分成两个作为线轴写入的多个存储器区域(例如,spool_region)。NVRAM 204线轴内的空间由每个机构168独立地管理。每个设备向每个机构168提供一定量的存储空间。该机构168进一步管理该空间内的寿命和分配。线轴的示例包括分布式事务或观念。当存储单元152的主电源失效时,板上超级电容器提供短持续时间的电力保持。在此保持间隔期间,NVRAM 204的内容被刷新到闪速存储器206。在下一次上电时,从闪速存储器206恢复NVRAM204的内容。
至于存储单元控制器,逻辑“控制器”的责任分布在包含机构168的刀片中的每一个之上。逻辑控制的这种分布在图2D中被示出为主机控制器242、中间层控制器244和(一个或多个)存储单元控制器246。控制平面和存储平面的管理被独立地处理,但是各部分可以物理上共同位于同一刀片上。每个机构168有效地用作独立控制器。每个机构168提供它自己的数据和元数据结构、它自己的后台工作者,并且维护它自己的生命周期。
图2E是示出控制平面254、计算平面256和存储平面258、以及与底层物理资源交互的机构168的刀片252硬件框图,从而在图2D的存储服务器环境中使用图2A至图2C的存储节点150和存储单元152的实施例。控制平面254被分割成许多机构168,其可使用计算平面256中的计算资源来在刀片252中的任一个上运行。存储平面258被分割成一组设备,其中的每一个提供对闪存206和NVRAM 204资源的访问。
在图2E的计算平面256和存储平面258中,机构168与底层物理资源(即,设备)交互。从机构168的视角来看,其资源在所有物理设备上方被条带化。从设备的视角来看,它向所有机构168提供资源,而不管机构碰巧在何处运行。每个机构168已分配或者已被分配存储单元152中的存储存储器的一个或多个分区260,例如闪速存储器206和NVRAM 204中的分区260。每个机构168使用属于它的那些分配的分区260,以用于写入或者读取用户数据。机构可与系统的不同量的物理存储装置相关联。例如,一个机构168能在一个或多个存储单元152中比在一个或多个其他机构168具有更大数量的分区260或更大大小的分区260。
图2F描绘依照一些实施例的存储集群的刀片252中的弹性软件层。在弹性结构中,弹性软件是对称的,即,每个刀片的计算模块270运行图2F中描绘的三个相同层的过程。存储管理器274执行来自其他刀片252的对存储在本地存储单元152、NVRAM 204和闪存206中的数据和元数据的读取和写入请求。机构168通过向所对应的数据或元数据驻留在其存储单元152上的刀片252发出必要的读取和写入来履行客户端请求。端点272解析从交换结构146监督软件接收到的客户端连接请求,将客户端连接请求中继到负责履行的机构168,并且将机构168的响应中继到客户端。对称的三层结构使得能实现存储系统的高度并发性。在这些实施例中弹性高效地且可靠地横向扩展。另外,弹性实现独特的横向扩展技术,其不管客户端访问模式都使工作跨越所有资源均匀地平衡,并且通过消除对于通常因常规的分布式锁定而发生的刀片间协调的大量需要来使并发性最大化。
仍然参考图2F,在刀片252的计算模块270中运行的机构168执行履行客户端请求所需要的内部操作。弹性的一个特征是机构168是无状态的,即,它们将活动数据和元数据缓存在它们自己的刀片252的DRAM中以便于快速访问,但是机构将每一更新存储在其在三个单独的刀片252上的NVRAM 204分区中直到更新已被写入到闪存206为止。在一些实施例中对NVRAM 204的所有存储系统写入一式三份到三个单独的刀片252上的分区。利用三镜像NVRAM 204及受奇偶校验和里德-所罗门RAID校验和保护的持久存储装置,存储系统可在两个刀片252的并发故障中存活,而不会丢失数据、元数据、或对任何一个的访问。
因为机构168是无状态的,所以它们可在刀片252之间迁移。每个机构168具有唯一标识符。在一些实施例中,NVRAM 204和闪存206分区与机构168的标识符相关联,而不与它们正在上面运行的刀片252相关联。因此,当机构168迁移时,机构168继续从其新位置管理相同的存储分区。当在存储集群的实施例中安装新刀片252时,系统通过以下步骤来自动地重新平衡负载:对新刀片252的存储装置进行分区以供由系统的机构168使用、将所选机构168迁移到新刀片252、在新刀片252上启动端点272并且将它们包括在交换结构146的客户端连接分配算法中。
从其新位置,被迁移的机构168将其NVRAM 204分区的内容存留在闪存206上,处理来自其他机构168的读取和写入请求,并且履行端点272引导到它们的客户端请求。类似地,如果刀片252失效或者被移除,则系统在其系统的剩余刀片252当中重新分配其机构168。经重新分配的机构168继续从其新位置执行其原始功能。
图2G描绘依照一些实施例的存储集群的刀片252中的机构168和存储资源。每个机构168排他地负责每个刀片252上的闪存206和NVRAM 204的分区。机构168独立于其他机构168管理其分区的内容和完整性。机构168压缩传入数据并将它暂时保存在其NVRAM 204分区中,然后联合、RAID保护、并将存储装置的各段中的数据存留在其闪存206分区中。当机构168将数据写入到闪存206时,存储管理器274执行必要的闪存转换以优化写入性能并使介质寿命最大化。在后台中,机构168“垃圾收集”,或者通过覆写数据来回收被客户废弃的数据占用的空间。应该领会的是,由于机构168的分区是不相交的,所以不需要分布式锁定来执行客户端和写入或者执行后台功能。
本文描述的实施例可以利用各种软件、通信和/或联网协议。另外,可以调整硬件和/或软件的配置以适应各种协议。例如,实施例可以利用活动目录(Active Directory),其是在WINDOWSTM环境中提供认证、目录、策略、以及其他服务的基于数据库的系统。在这些实施例中,LDAP(轻量级目录访问协议)是用于查询和修改诸如Active Directory这样的目录服务提供商中的项目的一个示例应用协议。在一些实施例中,网络锁管理器(‘NLM’)被用作与网络文件系统(‘NFS’)协同工作以通过网络来提供系统V样式的咨询文件和记录锁定的设施。服务器消息块(‘SMB’)协议(其一个版本也被称为公共互联网文件系统(‘CIFS’))可以与本文讨论的存储系统集成。SMP作为通常用于提供对文件、打印机、和串行端口的共享访问以及网络上的各节点之间的混杂通信的应用层网络协议来操作。SMB也提供认证过程间通信机制。AMAZONTM S3(简单存储服务)是通过Amazon Web Services提供的web服务,并且本文描述的系统可以通过web服务接口(REST(代表性状态转移)、SOAP(简单对象访问协议)、和BitTorrent)与Amazon S3对接。RESTful API(应用编程接口)分解事务以创建一系列小模块。每个模块解决事务的特定底层部分。尤其针对对象数据利用这些实施例提供的控制或权限可以包括访问控制列表(‘ACL’)的利用。ACL是附加到对象的权限的列表并且ACL指定哪些用户或系统过程被授予对对象的访问,以及在给定对象上允许什么操作。对于为网络上的计算机提供标识和定位系统并且跨越互联网路由业务的通信协议,系统可以利用互联网协议版本6(‘IPv6’)以及IPv4。在联网系统之间路由分组可以包括等价多路径路由(‘ECMP’),其是转发到单个目的地的下一跳分组可在多个“最佳路径”上发生的路由策略,所述多个“最佳路径”在路由度量计算中位于顶部位置。可与多数路由协议相结合地使用多路径路由,因为它是限于单个路由器的每跳决策。软件可以支持多租户,这是软件应用的单个实例为多个客户服务的架构。每个客户可以被称为租户。在一些实施例中,租户可以被给予定制应用的一些部分的能力,但是可能不能定制应用的代码。实施例可以维护审计日志。审计日志是记录计算系统中的事件的文档。除了记录什么资源被访问了之外,审计日志条目还通常包括目的地和源地址、时间戳、以及用户登录信息以便符合各种法规。实施例可以支持各种密钥管理策略,诸如加密密钥旋转。另外,系统可以支持动态超级用户密码或动态地改变密码的某个变体。
图3A阐述依照本公开的一些实施例的被耦合用于与云服务提供商302进行数据通信的存储系统306的示图。尽管被不太详细地描绘,然而图3A中描绘的存储系统306可以类似于上面参考图1A至图1D和图2A至图2G所描述的存储系统。在一些实施例中,图3A中描绘的存储系统306可以作为包括不平衡活动/主动控制器的存储系统、作为包括平衡活动/主动控制器的存储系统、作为包括每个控制器的资源的不到全部被利用使得每个控制器具有可以用于支持失效备援的保留资源的活动/主动控制器的存储系统、作为包括完全活动/主动控制器的存储系统、作为包括数据集隔离控制器的存储系统、作为包括具有前端控制器和后端集成存储控制器的双层架构的存储系统、作为包括双控制器阵列的横向扩展集群的存储系统、以及这样的实施例的组合被具体实现。
在图3A中描绘的示例中,存储系统306经由数据通信链路304耦合到云服务提供商302。数据通信链路304可以作为专用数据通信链路、作为通过使用诸如广域网(‘WAN’)或局域网(‘LAN’)这样的一个或多个数据通信网络来提供的数据通信通路或者作为能够在存储系统306与云服务提供商302之间传输数字信息的某种其他机制被具体实现。这样的数据通信链路304可以是完全有线的、完全无线的、或有线和无线数据通信通路的某种聚合。在这样的示例中,可以使用一种或多种数据通信协议来经由数据通信链路304在存储系统306与云服务提供商302之间交换数字信息。例如,可以使用手持设备传输协议(‘HDTP’)、超文本传输协议(‘HTTP’)、互联网协议(‘IP’)、实时传输协议(‘RTP’)、传输控制协议(‘TCP’)、用户数据报协议(‘UDP’)、无线应用协议(‘WAP’)或其他协议来经由数据通信链路304在存储系统306与云服务提供商302之间交换数字信息。
图3A中描绘的云服务提供商302可以例如作为通过经由数据通信链路304共享计算资源来向云服务提供商302的用户提供服务的系统和计算环境被具体实现。云服务提供商302可以提供对诸如计算机网络、服务器、存储装置、应用和服务等这样的可配置计算资源的共享池的按需访问。可以用最少管理努力将可配置资源的共享池快速地提供并释放给云服务提供商302的用户。通常,云服务提供商302的用户不知道由云服务提供商302利用来提供服务的确切的计算资源。尽管在许多情况下可以经由互联网访问这样的云服务提供商302,然而本领域的读者将认识到,抽象通过任何数据通信链路来向用户提供服务的共享资源的使用的任何系统可以被认为是云服务提供商302。
在图3A中描绘的示例中,云服务提供商302可以被配置为通过实现各种服务模型来向存储系统306和存储系统306的用户提供各种服务。例如,云服务提供商302可以被配置为通过实现云服务提供商302将诸如虚拟机和其他资源这样的计算基础设施作为服务提供给订户的基础设施即服务(‘IaaS’)服务模型来向存储系统306和存储系统306的用户提供服务。另外,云服务提供商302可以被配置为通过实现云服务提供商302向应用开发者提供开发环境的平台即服务(‘PaaS’)服务模型来向存储系统306和存储系统306的用户提供服务。这样的开发环境可以包括例如操作系统、编程语言执行环境、数据库、web服务器、或可以由应用开发者利用来在云平台上开发和运行软件解决方案的其他组件。此外,云服务提供商302可以被配置为通过实现云服务提供商302向存储系统306和存储系统306的用户提供应用软件、数据库、以及用于运行应用的平台的软件即服务(‘SaaS’)服务模型来向存储系统306和存储系统306的用户提供服务,从而给存储系统306和存储系统306的用户提供按需软件并且消除在本地计算机上安装并运行应用的需要,这可以简化应用的维护和支持。云服务提供商302可以被进一步配置为通过实现云服务提供商302提供可用于保证对应用、数据源、或其他资源的访问的认证服务的认证即服务(‘AaaS’)服务模型来向存储系统306和存储系统306的用户提供服务。云服务提供商302还可以被配置为通过实现云服务提供商302提供对其存储基础设施的访问以供由存储系统306和存储系统306的用户使用的存储即服务模型来向存储系统306和存储系统306的用户提供服务。读者应领会的是,云服务提供商302可以被配置为通过实现附加服务模型来向存储系统306和存储系统306的用户提供附加服务,因为上述的服务模型仅出于说明性目的而被包括,而决不表示对可以由云服务提供商302提供的服务的限制或关于可以由云服务提供商302实现的服务模型的限制。
在图3A中描绘的示例中,云服务提供商302可以例如作为私有云、作为公用云、或者作为私有云和公用云的组合被具体实现。在云服务提供商302作为私有云被具体实现的实施例中,云服务提供商302可以专用于向单个组织提供服务而不是向多个组织提供服务。在云服务提供商302作为公用云被具体实现的实施例中,云服务提供商302可以向多个组织提供服务。公用云和私有云部署模型可以不同并且可以具有各种优点和缺点。例如,由于公用云部署涉及跨越不同的组织共享计算基础设施,所以对具有安全关注、任务关键工作负载、正常运行时间要求需求等的组织来说,这样的部署可能不是理想的。虽然私有云部署可解决这些问题中的一些,但是私有云部署可能要求本地部署职员来管理私有云。在再一替代实施例中,云服务提供商302可以作为私有云和公用云服务与混合云部署的混合物被具体实现。
尽管在图3A中未显式地描绘,然而读者应领会的是,附加硬件组件和附加软件组件可能有必要方便将云服务递送到存储系统306和存储系统306的用户。例如,存储系统306可以耦合到(或者甚至包括)云存储网关。这样的云存储网关可以例如作为与存储系统306一起本地部署的基于硬件的或基于软件的器具被具体实现。这样的云存储网关可以作为正在存储阵列306上执行的本地应用与被存储阵列306利用的远程的、基于云的存储装置之间的桥接器来操作。通过使用云存储网关,组织可以将主iSCSI或NAS移动到云服务提供商302,从而使得组织能够节省其本地部署存储系统上的空间。这样的云存储网关可以被配置为模拟磁盘阵列、基于块的设备、文件服务器,或可将SCSI命令、文件服务器命令、或其他适当的命令转换成方便与云服务提供商302进行通信的REST空间协议的其他存储系统。
为了使得存储系统306和存储系统306的用户能够利用由云服务提供商302提供的服务,可以发生云迁移过程,在所述云迁移过程期间来自组织的本地系统(或甚至来自另一云环境)的数据、应用、或其他元素被移动到云服务提供商302。为了将数据、应用、或其他元素成功地迁移到云服务提供商302的环境,可以利用诸如云迁移工具这样的中间件来跨接云服务提供商302的环境与组织的环境之间的间隙。这样的云迁移工具还可以被配置为解决与将大量数据迁移到云服务提供商302相关联的潜在高网络成本和长转移时间,以及解决与通过数据通信网络到云服务提供商302的敏感数据相关联的安全关注。为了进一步使得存储系统306和存储系统306的用户能够利用由云服务提供商302提供的服务,还可以使用云编排器来布置和协调自动化任务以寻求创建合并过程或工作流程。这样的云编排器可以执行诸如配置各种组件(无论那些组件是云组件还是本地部署组件)以及管理这样的组件之间的互连这样的任务。云编排器可简化组件间通信和连接以确保链路被正确地配置和维护。
在图3A中描绘的示例中,并且如上面简要地描述的,云服务提供商302可以被配置为通过使用SaaS服务模型(其中云服务提供商302向存储系统306和存储系统306的用户提供应用软件、数据库、以及用于运行应用的平台)来向存储系统306和存储系统306的用户提供服务,从而给存储系统306和存储系统306的用户提供按需软件并且消除在本地计算机上安装和运行应用的需要,这可以简化应用的维护和支持。这样的应用可以依照本公开的各种实施例采取许多形式。例如,云服务提供商302可以被配置为向存储系统306和存储系统306的用户提供对数据分析应用的访问。这样的数据分析应用可以被例如配置为接收由存储系统306打电话回家的遥测数据。这样的遥测数据可以描述存储系统306的各种操作特性并且可以被分析,例如,以确定存储系统306的健康状况,以标识正在存储系统306上执行的工作负荷,以预测存储系统306何时将耗尽各种资源,以推荐配置变更、硬件或软件升级、工作流迁移、或可以改进存储系统306的操作的其他动作。
云服务提供商302还可以被配置为向存储系统306和存储系统306的用户提供对虚拟化计算环境的访问。这样的虚拟化计算环境可以例如作为虚拟机或其他虚拟化计算机硬件平台、虚拟存储设备、虚拟化计算机网络资源等被具体实现。这样的虚拟化环境的示例可包括被创建来模拟实际计算机的虚拟机、使逻辑桌面与物理机器分离的虚拟化桌面环境、允许统一访问不同类型的具体文件系统的虚拟化文件系统以及许多其他示例。
为了进一步说明,图3B阐述依照本公开的一些实施例的存储系统306的示图。尽管被不太详细地描绘,然而图3B中描绘的存储系统306可以类似于上面参考图1A至图1D和图2A至图2G所描述的存储系统,因为该存储系统可以包括许多上述的组件。
图3B中描绘的存储系统306可以包括可以以许多形式具体实现的存储资源308。例如,在一些实施例中存储资源308可包括纳米RAM或利用沉积在基板上的碳纳米管的另一形式的非易失性随机存取存储器。在一些实施例中,存储资源308可以包括3D交叉点非易失性存储器(其中位存储基于体电阻的变化),结合可堆叠的交叉网格化数据存取阵列。在一些实施例中,存储资源308可以包括闪速存储器,包括单级单元(‘SLC’)NAND闪存、多级单元(‘MLC’)NAND闪存、三级单元(‘TLC’)NAND闪存、四级单元(‘QLC’)NAND闪存等。在一些实施例中,存储资源308可以包括非易失性磁阻随机存取存储器(‘MRAM’),包括自旋转移扭矩(‘STT’)MRAM,其中数据通过使用磁存储元件来存储。在一些实施例中,示例存储资源308可以包括非易失性相变存储器(‘PCM’),其可以具有在单个单元中保持多个位的能力,因为单元可实现许多不同的中间状态。在一些实施例中,存储资源308可以包括允许光子量子信息的存储和取回的量子存储器。在一些实施例中,示例存储资源308可以包括电阻随机存取存储器(‘ReRAM’),其中数据通过改变跨越介电固态材料的电阻来存储。在一些实施例中,存储资源308可以包括存储类存储器(‘SCM’),其中可以使用亚光刻图案化技术、每单元多个位、设备的多个层等来以高密度制造固态非易失性存储器。读者应领会的是,上述的存储系统可以利用其他形式的计算机存储器和存储设备,包括DRAM、SRAM、EEPROM、通用存储器、以及许多其他形式。可以以各种形状因数具体实现图3A中描绘的存储资源308,所述各种形状因数包括但不限于双列直插存储器模块(‘DIMM’)、非易失性双列直插存储器模块(‘NVDIMM’)、M.2、U.2、以及其他形状因数。
图3B中描绘的示例存储系统306可以实现各种存储架构。例如,依照本公开的一些实施例的存储系统可以利用块存储装置,其中数据被存储于块中,并且每个块基本上作为单独的硬盘驱动器。依照本公开的一些实施例的存储系统可以利用对象存储装置,其中数据作为对象被管理。每个对象可以包括数据它本身、可变量的元数据、以及全局唯一标识符,其中可在多个级别(例如,设备级别、系统级别、接口级别)下实现对象存储装置。依照本公开的一些实施例的存储系统利用文件存储装置,在该文件存储装置中数据被存储在分层结构中。这样的数据可以被保存在文件和文件夹中,并且呈现给存储它的系统和以相同格式取回它的系统两者。
图3B中描绘的示例存储系统306可以作为可通过使用纵向扩展模型来添加附加存储资源、可通过使用横向扩展模型来添加附加存储资源、或者通过其某种组合来添加附加存储资源的存储系统被具体实现。在纵向扩展模型中,可以通过添加附加存储设备来添加附加存储装置。然而,在横向扩展模型中,可以将附加存储节点添加到存储节点集群,其中这样的存储节点可包括附加处理资源、附加联网资源等。
图3B中描绘的存储系统306还包括可以用于方便存储系统306内的组件之间的数据通信以及存储系统306与位于存储系统306外部的计算设备之间的数据通信的通信资源310。通信资源310可以被配置为利用各种不同的协议和数据通信结构来方便存储系统内的组件以及位于存储系统外部的计算设备之间的数据通信。例如,通信资源310可包括光纤通道(‘FC’)技术,诸如可通过FC网络来传输SCSI命令的FC结构和FC协议。通信资源310还可包括用来封装并通过以太网网络发送FC帧的FC over Ethernet(‘FCoE’)技术。通信资源310还可包括利用交换结构拓扑来方便通道适配器之间的传输的InfiniBand(‘IB’)技术。通信资源310还可包括可以用来访问经由PCI express(‘PCIe’)附连的非易失性存储介质的NVMExpress(‘NVMe’)技术和NVMe over fabrics(‘NVMeoF’)技术。通信资源310还可包括用于利用串行附连SCSI(‘SAS’)来访问存储系统306内的存储资源308的机制、用于将存储系统306内的存储资源308连接到存储系统306内的主机总线适配器的串行ATA(‘SATA’)总线接口、用于提供对存储系统306内的存储资源308的块级访问的互联网小型计算机系统接口(‘iSCSI’)技术、以及可用于方便存储系统306内的组件之间的数据通信以及存储系统306与位于存储系统306外部的计算设备之间的数据通信的其他通信资源。
图3B中描绘的存储系统306还包括可用于在存储系统306内执行计算机程序指令并执行其他计算任务的处理资源312。处理资源312可以包括出于某种特定目的而定制的一个或多个专用集成电路(‘ASIC’)以及一个或多个中央处理单元(‘CPU’)。处理资源312还可以包括一个或多个数字信号处理器(‘DSP’)、一个或多个现场可编程门阵列(FPGA)、一个或多个片上系统(‘SoC’)、或其他形式的处理资源312。存储系统306可以利用存储资源312来执行各种任务,包括但不限于支持软件资源314的执行,将在下面对此进行更详细的描述。
图3B中描绘的存储系统306还包括当由存储系统306内的处理资源312执行时可以执行各种任务的软件资源314。软件资源314可以包括例如计算机程序指令的一个或多个模块,所述计算机程序指令当由存储系统306内的处理资源312执行时可用于执行各种数据保护技术以保存被存储在存储系统内的数据的完整性。读者应领会的是,这样的数据保护技术可以例如由在存储系统内的计算机硬件上执行的系统软件、由云服务提供商、或者以其他方式执行。这样的数据保护技术可包括例如使不再主动地使用的数据被移动到单独的存储设备或单独的存储系统以用于长期保留的数据存档技术、用来将存储在存储系统中的数据拷贝并存储在不同的位置中以在存储系统内的设备故障或某种其他形式的灾难情况下避免数据丢失的数据备份技术、用来将存储在存储系统中的数据复制到另一存储系统使得可以经由多个存储系统访问该数据的数据复制技术、用来在各个时间点捕获存储系统内的数据的状态的数据快照技术、可以用来创建数据和数据库的重复副本的数据和数据库克隆技术、以及其他数据保护技术。通过使用这样的数据保护技术,可以满足业务连续性和灾难恢复目标,因为存储系统的故障可能不会导致存储在存储系统中的数据的丢失。
软件资源314还可以包括用于实现软件定义存储(‘SDS’)的软件。在这样的示例中,软件资源314可以包括计算机程序指令的一个或多个模块,所述计算机程序指令当被执行时,可用于独立于底层硬件的数据存储的基于策略的提供和管理。这样的软件资源314可以用于实现存储虚拟化以使存储硬件与管理存储硬件的软件分离。
软件资源314还可以包括用于方便并优化针对存储系统306中的存储资源308的I/O操作的软件。例如,软件资源314可以包括执行诸如例如数据压缩、数据重复删除等这样的各种数据减少技术的软件模块。软件资源314可以包括智能地将I/O操作分组在一起以方便更好地使用底层存储资源308的软件模块、执行数据迁移操作以从存储系统内迁移的软件模块、以及执行其他功能的软件模块。这样的软件资源314可以作为一个或多个软件容器或者以许多其他方式被具体实现。
读者应领会的是,可以将图3B中描绘的各种组件分组到一个或多个优化的计算程序包中作为融合基础设施。这样的融合基础设施可以包括可被多个应用共享并且使用策略驱动过程来以集体方式管理的计算机、存储装置和联网资源的池。这样的融合基础设施可以使存储系统306内的各种组件之间的兼容性问题最小化,同时还降低与存储系统306的建立和操作相关联的各种成本。这样的融合基础设施可以用融合基础设施参考架构、用独立器具、用软件驱动超级融合方法(例如,超级融合基础设施)或者以其他方式实现。
读者应领会的是,图3B中描绘的存储系统306可以用于支持各种类型的软件应用。例如,存储系统306可以用于通过向如下应用提供存储资源来支持这样的应用:人工智能(‘AI’)应用、数据库应用、DevOps项目、电子设计自动化工具、事件驱动软件应用、高性能计算应用、模拟应用、高速数据捕获和分析应用、机器学习应用、媒体制作应用、媒体服务应用、图片存档和通信系统(‘PACS’)应用、软件开发应用、虚拟现实应用、增强现实应用以及许多其他类型的应用。
上述的存储系统可以操作来支持各式各样的应用。鉴于存储系统包括计算资源、存储资源和各式各样的其他资源的事实,存储系统可以很好地适于支持资源密集的应用,诸如例如AI应用。这样的AI应用可以使得设备能够感知它们的环境并且采取使它们在某个目标上成功的机会最大化的动作。这样的AI应用的示例可包括IBM Watson、MicrosoftOxford、Google DeepMind、Baidu Minwa等。上述的存储系统还可以很好地适于支持资源密集的其他类型的应用,诸如例如机器学习应用。机器学习应用可以执行各种类型的数据分析以使分析模型构建自动化。使用根据数据迭代地学习的算法,机器学习应用可使得计算机能够在不用被显式地编程的情况下学习。
除了已经描述的资源之外,上述的存储系统还可以包括图形处理单元(‘GPU’),有时被称为视觉处理单元(‘VPU’)。这样的GPU可以作为快速地操纵并更改存储器以加速在帧缓冲器中打算输出到显示设备的图像的创建的专门电子电路被具体实现。这样的GPU可以被包括在作为上述的存储系统的一部分的计算设备中的任一个中,包括作为存储系统的许多单独可扩展的组件中的一个,其中这样的存储系统的单独可扩展的组件的其他示例可包括存储组件、存储器组件、计算组件(例如,CPU、FPGA、ASIC)、联网组件、软件组件等。除了GPU之外,上述的存储系统还可以包括用在神经网络处理的各个方面中的神经网络处理器(‘NNP’)。这样的NNP可以被使用代替GPU(或者除了GPU之外),并且还可以是独立可扩展的。
如上所述,本文描述的存储系统可以被配置为支持人工智能应用、机器学习应用、大数据分析应用和许多其他类型的应用。这类应用的快速增长正在受到三种技术驱动:深度学习(DL)、GPU处理器和大数据。深度学习是利用受到人类大脑启发的大规模并行神经网络的计算模型。不是专家手工制作软件,而是深度学习模型通过从许多示例中学习来编写它自己的软件。GPU是具有数千个内核的现代处理器,非常适于运行松散地表示人类大脑的并行性质的算法。
深度神经网络中的进步已点燃了用于数据科学家用人工智能(AI)挖掘其数据的算法和工具的新浪潮。利用改进的算法、更大的数据集和各种框架(包括用于跨越一系列任务进行机器学习的开源软件库),数据科学家正在处理像自动驾驶车辆、自然语言处理等等一样的新用例。然而,训练深度神经网络要求高质量输入数据和大量计算两者。GPU是能够同时地对大量数据进行处理的大规模并行处理器。当被组合成多GPU集群时,可能要求高吞吐量流水线来将输入数据从存储装置馈送到计算引擎。深度学习不仅仅构建和训练模型。还存在必须为让数据科学团队成功所必需的尺度、迭代和实验而设计的完整数据流水线。
数据是现代AI和深度学习算法的心脏。在训练可开始之前,必须被解决的一个问题围绕收集对训练准确的AI模型来说至关重要的标记数据。可能要求全规模AI部署来连续地收集、清理、变换、标记和存储大量数据。添加附加高质量数据点直接地转换为更准确的模型和更好的见解。数据样本可以经历一系列处理步骤,包括但不限于:1)将数据从外部源摄取到训练系统中并以原始形式存储数据;2)以便于训练的格式清理和变换数据,包括将数据样本链接到适当的标签,3)探索参数和模型,从而用较小的数据集快速地测试,并且迭代以在最有希望的模型上收敛以推送到生产集群中,4)执行训练阶段以选择输入数据的随机批次,包括新样本和较旧样本两者,并且将那些提供给生产GPU服务器以供计算以更新模型参数,以及5)评估包括使用在训练中未使用的数据的保留部分来在保持数据上评估模型准确性。这个生命周期可以适用于任何类型的并行化机器学习,而不仅仅是神经网络或深度学习。例如,标准机器学习框架可能依赖于CPU而不是GPU,但是数据摄取和训练工作流程可以是相同的。读者应领会的是,单个共享存储数据集线器中心在整个生命周期中创建协调点,而在摄取、预处理和训练阶段之间无需额外的数据副本。所摄取的数据很少用于仅一个目的,并且共享存储给予训练多个不同的模型或者将传统分析应用于数据的灵活性。
读者应领会的是,AI数据流水线中的每级可以具有来自数据集线器(例如,存储系统或存储系统的合集)的变化要求。横向扩展存储系统必须对于访问类型和模式的所有方式递送无与伦比的性能—从小元数据到重至大文件、从随机访问模式到顺序访问模式以及从低并发性到高并发性。上述的存储系统可以用作理想的AI数据集线器,因为系统可以为非结构化工作负载服务。在第一级中,数据被理想地摄取并存储到后面级将使用的相同数据集线器上,以便避免过度的数据拷贝。接下来的两个步骤可在可选地包括GPU的标准计算服务器上完成,然后在第四和最后级中,在强大的GPU加速服务器上运行完全训练生产作业。通常,在同一数据集上操作的实验流水线旁边有生产流水线。进一步地,GPU加速服务器可被独立地用于不同的模型或者接合在一起以在一个更大的模型上训练,甚至横跨多个系统以进行分布式训练。如果共享存储层缓慢,则必须将数据拷贝到用于每个阶段的本地存储装置,从而导致浪费时间将数据暂存到不同的服务器上。用于AI训练流水线的理想数据集线器递送类似于在本地存储在服务器节点上的数据的性能,同时还具有使得所有流水线级能够并发地操作的简单性和性能。
数据科学家致力于通过各式各样的方法来改进被训练模型的有用性:更多的数据、更好的数据、更智能的训练和更深的模型。在许多情况下,将有数据科学家团队共享相同的数据集并且并行工作以产生新的且改进的训练模型。通常,有数据科学家团队在这些阶段内并发地在相同的共享数据集上工作。数据处理、实验和全面训练的多个并发工作负载使存储层上的多种访问模式的需求分层。换句话说,存储装置不仅可满足大文件读取,而且还必须对付大小文件读取和写入的混合。最后,随着多个数据科学家探索数据集和模型,以其本机格式存储数据以提供用于每个用户以唯一方式变换、清理和使用数据的灵活性可能是至关重要的。上述的存储系统可以给数据集归属的自然共享存储装置提供数据保护冗余(例如,通过使用RAID6)以及作为用于多个开发者和多个实验的公共访问点所必需的性能。使用上述的存储系统可以避免为本地工作仔细地拷贝数据的子集的需要,从而节省工程和GPU加速服务器使用时间两者。随着原始数据集和期望的变换不断地更新和改变,这些副本成为不断增长的重负。
读者应领会的是,深度学习为什么已成功激增的根本原因是具有更大的数据集大小的模型的持续改进。相比之下,经典的机器学习算法(例如逻辑回归)在较小的数据集大小下在准确性方面停止改进。因此,计算资源和存储资源的分离还可以允许每个层的独立缩放,从而避免在一起管理两者时固有的许多复杂性。随着数据集大小增长或者新的数据集被考虑,横向扩展存储系统必须能够容易地扩展。类似地,如果需要更多的并发训练,则可添加附加GPU或其他计算资源,而无需担心其内部存储装置。此外,由于由存储系统提供的随机读取带宽、存储系统随机地读取小文件(50KB)高速率(意味着不要求额外的努力来聚合单独的数据点以制作更大的存储友好的文件)的能力、存储系统随着数据集增长或吞吐量要求增长而缩放容量和性能的能力、存储系统支持文件或对象的能力、存储系统针对大文件或小文件调谐性能(即,不需要用户供应文件系统)的能力、存储系统甚至在生产模型训练期间也支持硬件和软件的非自动升级的能力并且由于许多其他原因,上述的存储系统可以使AI系统的构建、操作和增长变得更容易。
存储层的小文件性能可能是至关重要的,因为许多类型的输入(包括文本、音频或图像)将作为小文件在本机存储。如果存储层未很好地处理小文件,则将要求额外的步骤来预处理样本并将它们分组到更大的文件中。在依靠SSD作为缓存层的自旋磁盘之上构建的存储装置可能达不到所需的性能。由于用随机输入批次进行训练产生更准确的模型,所以必须可以全性能访问整个数据集。SSD高速缓存仅为数据的小子集提供高性能并且在隐藏自旋驱动器的等待时间方面效率低。
读者应领会的是,上述的存储系统可以被配置为支持(在数据的类型当中)区块链的存储。可以将这样的区块链具体实现为称作块的记录的连续增长列表,所述记录使用密码学来链接和保护。区块链中的每个块可以包含作为到先前块的链接的散列指针、时间戳、事务数据等。区块链可以被设计为抵抗数据的修改并且可用作开放分布式分类账,其可以高效地且以可验证和永久的方式记录两方之间的事务。这使区块链变得潜在地适合于记录事件、医疗记录和其他记录管理活动,诸如身份管理、事务处理等。
读者应进一步领会的是,在一些实施例中,上述的存储系统可以与其他资源配对以支持上述的应用。例如,一个基础设施能包括形式为专门使用图形处理单元(‘GPGPU’)上的通用计算来加速深度学习应用的服务器和工作站的主计算,所述应用被互连到计算引擎中以训练用于深度神经网络的参数。每个系统可以具有以太网外部连接、InfiniBand外部连接、某种其他形式的外部连接或其某种组合。在这样的示例中,GPU可被分组以用于单个大训练或者独立地使用来训练多个模型。基础设施还能包括诸如上述的那些存储系统这样的存储系统以提供例如横向扩展全闪存文件或对象存储,通过所述横向扩展全闪存文件或对象存储,可经由诸如NFS、S3等这样的高性能协议来访问数据。基础设施还可包括例如经由用于冗余的MLAG端口信道中的端口连接到存储和计算的冗余架顶式以太网交换机。基础设施还能包括形式为白盒服务器的附加计算,可选地具有GPU,以用于数据摄取、预处理和模型调试。读者应领会的是,附加基础设施也是可能的。
读者应领会的是,上述的系统可能更适合于上面相对于其他系统所描述的应用,其他系统可以包括例如部署在服务器节点中的分布式直接附连存储(DDAS)解决方案。这样的DDAS解决方案可以被构建用于处理大的不太顺序的访问,但是可能不太能够处理小的随机访问。读者应进一步领会的是,可以利用上述的存储系统来为上述的应用提供平台,所述平台对于基于云的资源的利用而言是优选的,因为存储系统可以被包括在在特征集和性能方面更安全的、更在本地且在内部管理的、更鲁棒的现场或屋内基础设施中,或者另外对于作为平台的一部分以支持上述的应用的基于云的资源的利用而言是优选的。例如,在诸如IBM的Watson这样的平台上构建的服务可能要求商业企业将个体用户信息(诸如金融交易信息或可识别患者记录)分发到其他机构。因此,由于各种各样的技术原因以及由于各种商业原因,AI即服务的基于云的提供与由诸如上述的存储系统这样的存储系统所支持的在内部管理和提供的AI即服务相比可能是不太所希望的。
读者应领会的是,上述的存储系统单独或者与其他计算机器协调可以被配置为支持其他AI相关工具。例如,存储系统可以利用像ONXX一样的工具或使得更容易转移在不同的AI框架中编写的模型的其他开放神经网络交换格式。同样地,存储系统可以被配置为支持像Amazon的Gluon一样的工具,Amazon的Gluon允许开发人员对深度学习模型进行原型设计、构建和训练。
读者应进一步领会的是,还可以将上述的存储系统部署为边缘解决方案。这样的边缘解决方案可以适当用于通过在数据源附近在网络的边缘处执行数据处理来优化云计算系统。边缘计算可远离集中点将应用、数据和计算能力(即,服务)推向网络的逻辑极端。通过使用诸如上述的存储系统这样的边缘解决方案,可以使用由这样的存储系统提供的计算资源来执行计算任务,可以使用存储系统的存储资源来存储数据,并且可以通过使用存储系统的各种资源(包括联网资源)来访问基于云的服务。通过在边缘解决方案上执行计算任务、将数据存储在边缘解决方案上并且通常利用边缘解决方案,可以避免昂贵的基于云的资源的消耗,并且实际上,相对于对基于云的资源的更重依赖可以经历性能改进。
虽然许多任务可以从边缘解决方案的利用中受益,但是一些特定用途可以特别适合于部署在这样的环境中。例如,像无人机、自主汽车、机器人等一样的设备可能要求极其快速的处理—如此快,事实上,以致将数据发送直到云环境并返回以接收数据处理支持可能简直太慢。同样地,像通过使用各种各样的数据生成传感器来生成大量信息的机车和燃气轮机一样的机器可以从边缘解决方案的快速数据处理能力中受益。作为附加示例,诸如连接的摄像机这样的一些IoT设备可能不很适合于基于云的资源的利用,因为(不仅从隐私角度、安全性角度或金融角度来看)由于涉及的大量数据而简单地将数据发送到云可能是不切实际的。因此,依靠数据处理、存储或通信的许多任务可以更好地适合于包括诸如上述的存储系统这样的边缘解决方案的平台。
考虑仓库、配送中心或类似位置中的库存管理的具体示例。大型库存、仓储、运送、订单履行、制造或其他操作在库存货架上具有大量库存,并且具有产生大量数据的高分辨率数码相机。所有这种数据都可以被带入图像处理系统,这可以将数据量减少到小量数据。所有小数据都可以被存储在本地部署存储装置中。在设施的边缘处的本地部署存储装置可以耦合到云,用于外部报告、实时控制和云存储。可以用图像处理的结果来执行库存管理,使得库存可在货架上进行跟踪并且用新产品或相关的已停产/过时产品等进行补货、移动、运送、修改。上述场景是用于上述的可配置处理和存储系统的实施例的主要候选。适合于图像处理的仅计算刀片和卸载刀片可能与卸载FPGA或(一个或多个)卸载定制刀片上的深入学习的组合能从所有数码相机接受大量数据,并且产生小量数据。所有小数据然后能由存储节点存储,从而与存储单元一起操作的无论哪种组合类型的存储刀片最好地处理数据流。这是存储及功能加速和集成的一个示例。取决于与云的外部通信需要和云中的外部处理,并且取决于网络连接和云资源的可靠性,能按突发工作负载和可变传导性可靠性针对存储和计算管理来调整系统的大小。另外,取决于其他库存管理方面,系统能被配置用于混合边缘/云环境中的调度和资源管理。
上述的存储系统还可以被优化以用在大数据分析中。大数据分析通常可以被描述为检查大且不同的数据集以揭露可帮助组织做出更明智的商业决策的隐藏模式、未知相关性、市场趋势、客户偏好和其他有用信息的过程。大数据分析应用使得数据科学家、预测建模者、统计人员和其他分析专业人员能够分析增长量的结构化事务数据,加上常常未被常规的商业智能(BI)和分析程序开发的其他形式的数据。作为该过程的一部分,可以将诸如例如互联网点击流数据、web服务器日志、社交媒体内容、来自客户电子邮件和调查响应的文本、移动电话呼叫细节记录、IoT传感器数据和其他数据这样的半结构化和非结构化数据转换为结构化形式。大数据分析是一种形式的高级分析,其涉及具有诸如由高性能分析系统技术支持的预测模型、统计算法和假设分析这样的元素的复杂应用。
上述的存储系统还可以支持(包括实现为系统接口)响应于人类语音而执行任务的应用。例如,存储系统可以支持执行智能个人助理应用,诸如例如Amazon的Alexa、AppleSin、Google Voice、Samsung Bixby、Microsoft Cortana等。虽然前一句中描述的示例利用话音作为输入,但是上述的存储系统还可以支持聊天机器人、谈话机器人、饶舌虫,或被配置为经由听觉或文本方法进行对话的人工会话实体或其他应用。同样地,存储系统可以实际上执行这样的应用以使诸如系统管理员这样的用户能够经由语音与存储系统交互。这样的应用通常能够进行话音交互、音乐回放、制作待办事项列表、设置闹钟、流播客、播放有声读物以及提供天气、交通和其他实时信息,诸如新闻,但是在依照本公开的实施例中,这样的应用可以被用作各种系统管理操作的接口。
上述的存储系统还可以实现用于在自我驱动存储的愿景上递送的AI平台。这样的AI平台可以被配置为通过收集和分析大量存储系统遥测数据点来递送全局预测智能以使得能实现轻松的管理、分析和支持。事实上,这样的存储系统可以能够预测容量和性能两者,以及生成关于工作负载部署、交互和优化的智能建议。这样的AI平台可以被配置为对照问题指纹的库来扫描所有传入存储系统遥测数据,以在它们影响客户环境之前实时地预测和解决事变,并且捕获与用于预测性能负载的性能有关的数百个变量。
为了进一步说明,图4阐述了图示依照本公开的一些实施例的支持豆荚的多个存储系统(402,404,406)的框图。尽管被不太详细地描绘,然而图4中描绘的存储系统(402,404,406)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图4中描绘的存储系统(402,404,406)可以包括与上述的存储系统相同、更少或附加的组件。
在图4中描绘的示例中,存储系统(402,404,406)中的每一个均被描绘为具有至少一个计算机处理器(408,410,412)、计算机存储器(414,416,418)和计算机存储装置(420,422,424)。尽管在一些实施例中计算机存储器(414,416,418)和计算机存储装置(420,422,424)可以是相同的硬件设备的一部分,然而在其他实施例中计算机存储器(414,416,418)和计算机存储装置(420,422,424)可以是不同的硬件设备的一部分。计算机存储器(414,416,418)与计算机存储装置(420,422,424)之间的区别在此特定示例中可以是计算机存储器(414,416,418)物理上接近于计算机处理器(408,410,412)并且可以存储由计算机处理器(408,410,412)执行的计算机程序指令,然而计算机存储装置(420,422,424)作为用于存储用户数据、描述用户数据的元数据等的非易失性存储装置被具体实现。参考图1A中的上述示例,例如,用于特定存储系统(402,404,406)的计算机处理器(408,410,412)和计算机存储装置(414,416,418)可以驻留在控制器(110A-110D)中的一个或多个内,然而附连存储设备(171A-171F)可以用作特定存储系统(402,404,406)内的计算机存储装置(420,422,424)。
在图4中描绘的示例中,根据本公开的一些实施例所描绘的存储系统(402,404,406)可以附连到一个或多个豆荚(430,432)。图4中描绘的豆荚(430,432)中的每一个均可包括数据集(426,428)。例如,三个存储系统(402,404,406)已附连到的第一豆荚(430)包括第一数据集(426),然而两个存储系统(404,406)已附连到的第二豆荚(432)包括第二数据集(428)。在这样的示例中,当特定存储系统附连到豆荚时,该豆荚的数据集被拷贝到特定存储系统,然后随着数据集被修改而保持最新。可从豆荚中移除存储系统,从而导致数据集在已移除的存储系统上不再保持最新。在图4中描绘的示例中,对豆荚来说活动的任何存储系统(它是非故障豆荚的最新的工作非故障成员)可接收并处理要修改或者读取豆荚的数据集的请求。
在图4中描绘的示例中,每个豆荚(430,432)还可以包括一组受管理对象和管理操作,以及用于修改或者读取与特定豆荚(430,432)相关联的数据集(426,428)的一组访问操作。在这样的示例中,管理操作可以通过这些存储系统中的任一个等效地修改或者查询受管理对象。同样地,用于读取或者修改数据集的访问操作可以通过这些存储系统中的任一个等效地操作。在这样的示例中,虽然每个存储系统将数据集的单独的副本作为所述数据集的真子集来存储,所述真子集被存储和通告以供存储系统使用,但是通过任何一个存储系统执行和完成的用于修改受管理对象或数据集的操作却被反映在用于查询豆荚的后续管理对象或用于读取数据集的后续访问操作中。
读者应领会的是,豆荚可以实现比仅仅集群同步地复制的数据集更多的能力。例如,豆荚可用于实现租户,由此数据集被以某种方式彼此安全地隔离。豆荚还可用于实现虚拟阵列或虚拟存储系统,其中每个豆荚被呈现为网络(例如,存储区域网或互联网协议网络)上具有单独的地址的唯一存储实体。在实现虚拟存储系统的多存储系统豆荚的情况下,与该豆荚相关联的所有物理存储系统可以以某种方式使它们呈现为相同的存储系统(例如,好像多个物理存储系统没有不同于进入到单个存储系统中的多个网络端口)。
读者应领会的是,豆荚也可以是管理的单位,表示卷、文件系统、对象/分析暂存器、快照和其他管理实体的合集,其中对任何一个存储系统做出管理变化(例如,针对豆荚的数据集的某个部分的名称变化、属性变化、管理导出或权限)被自动地反映到与该豆荚相关联的所有活动的存储系统。另外,豆荚还可能是数据收集和数据分析的单位,其中性能和容量度量被以针对豆荚跨越所有活动的存储系统聚合或者针对每个豆荚单独地调出数据收集和分析的方式呈现,或者可能针对每个豆荚呈现每个附连存储系统对传入内容和性能的贡献。
可以将用于豆荚成员资格的一个模型定义为存储系统的列表以及该列表的子集,其中存储系统被认为对豆荚来说同步。如果存储系统至少在对于与豆荚相关联的数据集的最后写入副本具有相同的空闲内容的恢复内,则它可以被认为对豆荚来说同步。空闲内容是在任何进行中的修改已完成而不用处理新修改之后的内容。有时这被称为“崩溃可恢复的”一致性。豆荚的恢复执行在将并发更新应用于豆荚中的同步存储系统时合并差异的过程。恢复可在完成已向豆荚的各个成员请求但是未向任何请求者发信号通知已成功地完成的并发修改时解决存储系统之间的任何不一致。被列举为豆荚成员但是未被列举为对豆荚来说同步的存储系统可被描述为与豆荚“分离”。被列举为豆荚成员、对豆荚来说同步并且当前可用于针对豆荚主动地为数据服务的存储系统对豆荚来说“联机”。
豆荚的每个存储系统成员可以具有它自己的成员资格的副本,包括它最后知道哪些存储系统同步以及它最后知道哪些存储系统包括豆荚成员的整个集合。为了对豆荚来说联机,存储系统必须将它自己认为对豆荚来说同步并且必须在与它认为对豆荚来说同步的所有其他存储系统进行通信。如果存储系统不能确定它同步并在与同步的所有其他存储系统进行通信,则它必须停止针对该豆荚处理新传入请求(或者必须因错误或异常而完成它们),直到可确定它同步并在与同步的所有其他存储系统进行通信。第一存储系统可以断定应该分离第二配对的存储系统,这将允许第一存储系统继续,因为它现在与现在在列表中的所有存储系统同步。但是,必须防止第二存储系统可替代地断定应该分离第一存储系统并且同时第二存储系统继续操作。这将导致“裂脑”状况,其可导致不可调和的数据集、数据集损坏或应用损坏以及其他危险。
在存储系统正在正常地运行、然后注意到丢失的通信的同时,在它当前正在从某个先前故障中恢复的同时,在它正在重新启动或者从暂时断电或恢复的通信中断重新开始的同时,在它由于无论什么原因或者在这些或其他种类的事件的任何组合期间或之后正在将操作从一组存储系统控制器切换到另一组的同时,可出现需要确定如何在不与配对的存储系统进行通信时继续进行的情形。事实上,任何时候与豆荚相关联的存储系统不能与所有已知的非分离成员进行通信,该存储系统可以简短地等待,直到通信可被建立、脱机并继续等待为止,或者可通过某种手段来确定在没有由于非通信存储系统结束替代视图而引发脑裂的风险的情况下分离非通信存储系统然后继续是安全的。如果安全分离可足够快地发生,则存储系统可在仅仅是短延迟情况下并在对于可向剩余的联机存储系统发出请求的应用不会导致应用中断情况下保持对豆荚来说联机。
这种情形的一个示例是当存储系统可能知道它过时时。例如,当第一存储系统被首次添加到已经与一个或多个存储系统相关联的豆荚时,或者当第一存储系统重新连接到另一存储系统并且发现另一存储系统已经将第一存储系统标记为分离时,那个可发生。在这种情况下,第一存储系统将简单地等待直到它连接到对豆荚来说同步的某个其他组存储系统。
此模型对于存储系统如何被添加到豆荚或同步豆荚成员列表或者从豆荚或从同步豆荚成员列表中移除需要某种程度的考虑。由于每个存储系统将具有它自己的列表的副本,并且由于两个独立存储系统不能在确切相同的时间更新其本地副本,并且由于本地副本完全在重新启动时或者在各种故障场景中可用,所以必须注意确保瞬时不一致不会引起问题。例如,如果一个存储系统对豆荚来说同步并且添加了第二存储系统,然后如果第二存储系统被更新为首先首先将两个存储系统列举为同步,然后如果两个存储系统存在故障和重新启动,则第二个可以启动并等待以连接到第一存储系统,同时第一个可能不知道它应该或者可能等待第二存储系统。如果第二存储系统然后通过经历分离它的过程来对无法与第一存储系统连接做出响应,则它可能成功完成第一存储系统不知道的过程,从而产生裂脑。因此,可能有必要确保存储系统不会不恰当地不同意它们是否可能选择在它们不在通信的情况下经历分离过程。
用于确保存储系统不会不恰当地不同意它们是否可能选择在它们不在通信的情况下经历分离过程的一个方式是为了确保在针对豆荚向同步成员列表添加新存储系统时,新存储系统首先存储它是分离成员(并且可能它正在被添加为同步成员)。然后,现有的同步存储系统可在新存储系统在本地存储那个相同事实之前在本地存储新存储系统是同步豆荚成员。如果在新存储系统存储其同步状态之前存在一组重新启动或网络中断,则原始存储系统可能由于非通信而分离新存储系统,但是新存储系统将等待。从豆荚中移除通信存储系统可能需要这种变化的相反版本:首先正被移除的存储系统存储它不再同步,然后将保持的存储系统存储正被移除的存储系统不再同步,然后所有存储系统删除正从其豆荚成员资格列表中删除的存储系统。取决于实施方式,中间持续的分离状态可能不是必需的。是否在成员资格列表的本地副本中需要小心可能取决于存储系统用于监视彼此或者用于验证其成员资格的模型。如果共识模型被用于两者,或者如果使用外部系统(或外部分布式或集群系统)来存储和验证豆荚成员资格,则在本地存储的成员资格列表中的不一致可能无关紧要。
当通信失效或者豆荚中的一个或多个存储系统失效时,或者当存储系统启动(或者失效备援到辅控制器)并且不能与用于豆荚的配对的存储系统进行通信并且是时候让一个或多个存储系统决定分离一个或多个配对的存储系统时,必须采用某种算法或机制来决定这样做是安全的并且在分离时坚持到底。解决分离的一个手段是使用多数(或群体)模型以得到成员资格。利用三个存储系统,只要两个正在通信,它们就可同意分离不在通信的第三存储系统,但是第三存储系统本身不能选择分离其他两个存储系统中的任何一个。当存储系统通信不一致时可出现混淆。例如,存储系统A可能正在与存储系统B而不是C进行通信,然而存储系统B可能正在与A和C两者进行通信。所以,A和B能分离C,或者B和C能分离A,但是可能需要豆荚成员之间的更多的通信以搞清楚这一点。
在添加和移除存储系统时需要注意群体成员模型。例如,如果添加了第四存储系统,则存储系统的“多数”那时在那里。从三个存储系统(其中多数需要两个)到包括第四存储系统的豆荚(其中多数需要三个)的转变可能要求类似于先前描述的模型以便将存储系统小心地添加到同步列表。例如,第四存储系统可以在附连状态下启动但是在它从不会对群体进行投票的情况下仍未附连。一旦在那种状态下,原始三个豆荚成员能各自被更新以知道第四成员以及用于三个存储系统分离第四个的新要求。从豆荚中移除存储系统可能在更新其他豆荚成员之前类似地将该存储系统移动到在本地存储的“分离”状态。针对此的变体方案是使用诸如PAXOS或RAFT这样的分布式共识机制来实现任何成员资格变化或者处理分离请求。
管理成员资格转变的另一手段是使用在存储系统本身外部的外部系统来处理豆荚成员资格。为了变得对豆荚来说联机,存储系统必须首先联系外部豆荚成员资格系统以验证它对豆荚来说同步。对豆荚来说联机的任何存储系统然后应该保持与豆荚成员系统通信,并且应该在它丢失通信的情况下等待或者脱机。能使用各种集群工具(诸如OracleRAC、Linux HA、VERITAS Cluster Server、IBM的HACMP或其他工具)来将外部豆荚成员资格管理器实现为高度可用的集群。外部豆荚成员资格管理器还能使用诸如Etcd或Zookeeper这样的分布式配置工具,或诸如Amazon的DynamoDB这样的可靠分布式数据库。
在图4中描绘的示例中,根据本公开的一些实施例所描绘的存储系统(402,404,406)可以接收用于读取数据集(426,428)的一部分的请求并且在本地处理用于读取数据集的一部分的请求。读者应领会的是,尽管用于修改(例如,写入操作)数据集(426,428)的请求要求豆荚中的存储系统(402,404,406)之间的协调,然而当数据集(426,428)应该跨越豆荚中的所有存储系统(402,404,406)一致时,对用于读取数据集(426,428)的一部分的请求做出响应不要求存储系统(402,404,406)之间的类似协调。因此,接收读取请求的特定存储系统可以通过读取被存储在存储系统的存储设备内的数据集(426,428)的一部分来在本地为读取请求服务,而无需与豆荚中的其他存储系统中进行同步通信。由一个存储系统针对复制集群中的复制数据集接收的读取请求预期在绝对多数情况下避免任何通信,至少当由正在名义上也在运行的集群内运行的存储系统接收到时。应该简单地通过从集群数据集的本地副本读取来正常地处理这样的读取,而无需与集群中的其他存储系统进行进一步交互。
读者应领会的是,存储系统可以采取步骤来确保读取一致性,使得读取请求将不管哪一个存储系统处理读取请求都返回相同的结果。例如,针对由集群中的任何一组存储系统接收到的任何一组更新的结果得到的集群数据集内容应该跨越集群是一致的,至少在任何时候更新是空闲的(所有先前的修改操作已被指示为完成并且尚未以任何方式接收并处理了新的更新请求。更具体地说,跨越一组存储系统的集群数据集的实例可仅作为仍然尚未完成的更新的结果而不同。这意味着,例如,在其卷块范围中重叠的任何两个写入请求或者写入请求和重叠快照、比较并写入或虚拟块范围拷贝的任何组合必须在数据集的所有副本上产生一致的结果。两个操作不应该产生结果,好像它们在一个存储系统上按照一个次序发生,而在复制集群中的另一存储系统上按照不同的次序发生。
此外,可使读取请求变得时间次序一致。例如,如果在复制集群上接收到并完成一个读取请求并且该读取然后后面是对由复制集群接收到的重叠地址范围的另一读取请求以及在一个或两个读取以任何方式在时间和卷地址范围上与由复制集群接收到的修改请求重叠的情况下(无论任何读取或修改是由复制集群中的相同的存储系统还是不同的存储系统接收到),然后如果第一读取反映更新的结果并且然后第二读取也应该反映该更新的结果,而不是可能返回更新之前的数据。如果第一读取不反映更新,则第二读取可反映或者不反映更新。这确保在两个读取请求之间用于数据段的“时间”不能向后滚动。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)还可以检测与其他存储系统中的一个或多个的数据通信中断并且确定特定存储系统是否应该保持在豆荚中。由于各种原因可能发生与其他存储系统中的一个或多个的数据通信中断。例如,因为这些存储系统中的一个已失效了,因为网络互连已失效了,或者由于某种其他原因,可能发生与其他存储系统中的一个或多个的数据通信中断。同步复制集群的一个重要的方面是确保任何故障处理不会导致不可恢复的不一致或响应中的任何不一致。例如,如果网络在两个存储系统之间失效了,则这些存储系统中的至多一个可针对豆荚继续处理新近传入的I/O请求。并且,如果一个存储系统继续处理,则另一个存储系统不能处理任何新的完成请求,包括读取请求。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)还可以响应于检测到与其他存储系统中的一个或多个的数据通信中断而确定特定存储系统是否应该保持在豆荚中。如上面所提及的,为了作为豆荚的一部分“联机”,存储系统必须将它自己认为对豆荚来说同步并且必须正在与它认为对豆荚来说同步的所有其他存储系统进行通信。如果存储系统不能确定它同步并且正在与同步的所有其他存储系统进行通信,则它可以停止处理用于访问数据集(426,428)的新传入请求。因此,例如,通过确定它是否可与它认为对豆荚来说同步的所有其他存储系统进行通信(例如,经由一个或多个测试消息),通过确定它认为对豆荚来说同步的所有其他存储系统是否也认为存储系统附连到豆荚,通过特定存储系统必须确认它可与它认为对豆荚来说同步的所有其他存储系统进行通信并且它认为对豆荚来说同步的所有其他存储系统也认为存储系统附连到豆荚的两个步骤的组合,或者通过某种其他机制,存储系统可以确定特定存储系统是否应该作为豆荚的一部分保持联机。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)还可以响应于确定特定存储系统应该保持在豆荚中而使特定存储系统上的数据集保持对管理和数据集操作可访问。例如,通过接受用于访问被存储在存储系统上的数据集(426,428)的版本的请求并处理这样的请求,通过接受并处理由主机或授权管理员发出的与数据集(426,428)相关联的管理操作,通过接受并处理由其他存储系统中的一个发出的与数据集(426,428)相关联的管理操作,或者以某种其他方式,存储系统可以使特定存储系统上的数据集(426,428)保持对管理和数据集操作可访问。
在图4中描绘的示例中,例如,通过拒绝用于访问被存储在存储系统上的数据集(426,428)的版本的请求,通过拒绝由主机或其他授权管理员发出的与数据集(426,428)相关的管理操作,通过拒绝由豆荚中的其他存储系统中的一个发出的与数据集(426,428)相关联的管理操作,或者以某种其他方式,所描绘的存储系统(402,404,406)然而可以响应于确定特定存储系统不应该保持在豆荚中而使特定存储系统上的数据集(426,428)对管理和数据集操作不可访问。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)还可以检测到与其他存储系统中的一个或多个的数据通信中断已被修复并且使特定存储系统上的数据集对管理和数据集操作可访问。例如,通过从其他存储系统中的一个或多个接收消息,存储系统可以检测到与其他存储系统中的一个或多个的数据通信中断已被修复。响应于检测到与其他存储系统中的一个或多个的数据通信中断已被修复,一旦先前分离的存储系统已与保持附连到豆荚的存储系统重新同步,存储系统就可以使特定存储系统上的数据集(426,428)对管理和数据集操作可访问。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)也可以从豆荚脱机,使得特定存储系统不再允许管理和数据集操作。所描绘的存储系统(402,404,406)可以从豆荚脱机,使得特定存储系统由于各种原因而不再允许管理和数据集操作。例如,由于存储系统它自己的某个故障,因为正在存储系统上发生更新或某个其他维护,由于通信故障,或者由于许多其他原因,所描绘的存储系统(402,404,406)也可以从豆荚脱机。在这样的实施例中,所描绘的存储系统(402,404,406)可以随后更新特定存储系统上的数据集以包括对数据集的所有更新,因为特定存储系统脱机并且返回与豆荚一起联机,使得特定存储系统允许管理和数据集操作,如将在下面包括的重新同步部分中更详细地描述的。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)还可以标识用于异步地接收数据集的目标存储系统,其中目标存储系统不是同步地复制数据集而跨越的所述多个存储系统中的一个。这样的目标存储系统可以将备用存储系统表示为利用同步地复制的数据集的某个存储系统等。事实上,可利用同步复制来分发更靠近服务器的某个机架的数据集的副本,以得到更好的本地读取性能。一种这样的情况是被对称地复制到位于数据中心或园区中心的较大存储系统并且那些较大的存储系统为了可靠性被更小心地管理或者连接到外部网络以用于异步复制或备用服务的较小的架顶式存储系统。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)还可以标识未被任何其他存储系统异步地复制到目标存储系统的数据集的一部分并且将未被任何其他存储系统异步地复制到目标存储系统的数据集的部分异步地复制到目标存储系统,其中,两个或更多个存储系统将整个数据集共同地复制到目标存储系统。以这样的方式,可以在豆荚的成员之间分割与异步地复制特定数据集相关联的工作,使得豆荚中的每个存储系统仅负责将数据集的子集异步地复制到目标存储系统。
在图4中描绘的示例中,所描绘的存储系统(402,404,406)也可以从豆荚分离,使得从豆荚分离的特定存储系统不再被包括在同步地复制数据集所跨越的存储系统的集合中。例如,如果图4中的存储系统(404)从图4中图示的豆荚(430)分离,则豆荚(430)将仅包括存储系统(402,406)作为将同步地复制被包括在豆荚(430)中的数据集(426)所跨越的存储系统。在这样的示例中,使存储系统与豆荚分离还能包括从与豆荚分离了的特定存储系统中移除数据集。继续图4中的存储系统(404)与图4中图示的豆荚(430)分离了的示例,能从存储系统(404)中删除或者以其他方式移除被包括在豆荚(430)中的数据集(426)。
读者应领会的是,存在由豆荚模型启用的可进一步支持的许多独特的管理能力。另外,豆荚模型它本身引入可通过实施方式解决的一些问题。例如,当存储系统对豆荚来说脱机但是正在以其他方式运行时,诸如因为互连失效了并且用于豆荚的另一存储系统在调解中胜出,可以仍然存在访问脱机豆荚在脱机存储系统上的数据集的期望或需要。一个解决方案可以是简单地在某种分离模式下启用豆荚并允许数据集被访问。然而,该解决方案可能是危险的并且该解决方案可在存储系统复得通信时使豆荚的元数据和数据更难以协调。此外,仍然可能存在用于主机访问脱机的存储系统以及仍然联机的存储系统的单独的路径。在那种情况下,即使两个存储系统不再保持同步主机也可能向它们发出I/O,因为主机看到目标端口按相同的标识符报告音量并且主机I/O驱动程序假定它看到到相同音量的附加路径。这可产生相当破坏性的数据损坏,因为即使主机假定两个存储系统是一致的,发出到两个存储系统的读取和写入也不再一致。作为这种情况的变体,在集群应用(诸如共享存储集群数据库)中,在一个主机上运行的集群应用可能正在读取或者写入到一个存储系统,而在另一主机上运行的同一集群应用可能正在读取或者写入到“分离的”存储系统,但是集群应用的两个实例在它们各自看到的数据集对于完成写入完全一致的推测下正在彼此之间通信。由于它们不一致,所以违反了该推测并且应用的数据集(例如,数据库)可快速地结束被损坏。
用于解决这两个问题的一个方式是允许将脱机豆荚或可能脱机豆荚的快照拷贝到具有新卷的新豆荚,所述新卷具有足够新的身份,使得主机I/O驱动程序和集群应用不会将所拷贝的卷混淆为与另一存储系统上的静止联机卷相同。由于每个豆荚维护与另一存储系统上的豆荚数据集的副本崩溃一致但可能稍微不同的数据集的完整副本,并且由于每个豆荚具有对豆荚内容进行操作所需的所有数据和元数据的独立副本,所以直截了当的问题是将豆荚中的一些或全部卷或快照的虚拟副本制作到新豆荚中的新卷。在逻辑盘区图实施方式中,例如,全部需要的是在新豆荚中定义新卷,所述新卷从所拷贝的与豆荚的卷或快照相关联的豆荚引用逻辑盘区图,并且同时逻辑盘区图被标记为写时拷贝。应该将新卷视为新卷,类似于拷贝到新卷的卷快照可能被实现的方式。卷可以具有相同的管理名称,但是在新豆荚命名空间内。但是,它们应该具有不同的底层标识符以及与原始卷不同的逻辑单元标识符。
在一些情况下可以使用虚拟网络隔离技术(例如,通过在IP网络的情况下创建虚拟LAN或者在光纤通道网络的情况下创建虚拟SAN),使得可确保呈现给一些接口的卷的隔离以不可从可能也看到原始卷的主机网络接口或主机SCSI启动器端口访问。在这样的情况下,给卷的副本提供与原始卷相同的SCSI或其他存储标识符可能是安全的。例如,在应用期望看到特定一组存储标识符以便在重新配置中没有过度负担的情况下起作用的情况下,能使用这个。
还能在活动故障上下文外部使用本文描述的技术中的一些来测试用于处理故障的准备就绪。准备就绪测试(有时称为“消防演习”)通常是灾难恢复配置所需要的,其中频繁且重复的测试被认为是确保灾难恢复计划的多数或所有方面都是正确的并且说明应用、数据集的任何最近变化或设备中的变化的必要性。准备就绪测试对于当前的生产操作(包括复制)而言应该是非破坏性的。在许多情况下实际上不能在活动配置上调用真实操作,但是接近的一个良好方式是使用存储操作来制作生产数据集的副本,然后可能把那与虚拟联网的使用联系起来,以创建包含认为是必需在灾难的情况下成功地提出的重要应用所必需的所有数据的隔离环境。在预期执行灾难恢复准备就绪测试过程的站点(或站点的合集)内提供同步地复制的(或甚至异步地复制的)数据集的这样的副本并且然后在该数据集上启动重要应用以确保它可启动并起作用是一很好的工具,因为它帮助确保在灾难恢复计划中不省去应用数据集的重要部分。在必要且实用的情况下,这能与可能又与物理或虚拟机的隔离合集耦合的虚拟隔离网络耦合,以尽可能接近真实世界灾难恢复接管场景。实际上将豆荚(或豆荚组)拷贝到另一豆荚作为豆荚数据集的时间点映像立即创建包含所有拷贝的元素并且然后可与原始豆荚基本上相同地进行操作的隔离数据集,以及与原始豆荚分开地对单个站点(或几个站点)允许隔离。进一步地,这些是快速操作并且它们可以被容易地拆卸和重复,从而允许测试和期望一样经常重复。
能做出一些增强功能以进一步往完美灾难恢复测试走去。例如,结合隔离网络,能将SCSI逻辑单元标识或其他类型的标识拷贝到目标豆荚中,使得测试服务器、虚拟机和应用看到相同的标识。进一步地,服务器的管理环境能被配置为对来自虚拟网络的特定虚拟集的请求做出响应以对请求和对原始豆荚名称的操作做出响应,所以脚本不要求使用具有对象名称的替代“测试”版本的测试变体。在可在测试期间使用将在灾难接管的情况下接管的主机侧服务器基础设施的情况下,可使用另一个增强功能。这包括灾难恢复数据中心完全备有替代服务器基础设施的情况,所述服务器基础设施在被灾难指示这样做之前通常不会被使用。它还包括该基础设施可以被用于非关键操作的情况(例如,对生产数据运行分析,或者仅支持可能重要但在需要更多关键功能的情况下可被暂停的应用开发或其他功能)。具体地,可设置主机定义和配置以及将使用它们的服务器基础设施,因为它们将用于实际的灾难恢复接管事件并且作为灾难恢复接管测试的一部分进行测试,其中被测试卷从用于提供数据集的快照的虚拟豆荚副本连接到这些主机定义。从所涉及的存储系统的观点来看,当实际的灾难接管事件被触发时可重用用于测试的这些主机定义和配置以及在测试期间使用的卷到主机连接配置,从而大大地使测试配置与将在灾难恢复接管的情况下使用的真实配置之间的配置差异最小化。
在一些情况下将卷从第一豆荚移出并移到包括仅仅那些卷的新的第二豆荚中可能是有意义的。然后可单独地调整豆荚成员资格及高可用性和恢复特性,并且然后可使两个结果得到的豆荚数据集的管理彼此隔离。可在一个方向上做的操作在另一个方向上也应该是可能的。在某一时刻,取两个豆荚并将它们合并成一个使得原始两个豆荚中的每一个中的卷现在将针对存储系统成员资格及高可用性和恢复特性和事件跟踪彼此可能是有意义的。通过依靠针对较早部分中讨论的用于豆荚的变化调解或群体属性所建议的特性,可安全地并且在对运行应用的中断相当小或没有的情况下完成这两个操作。利用调解,例如,可使用由以下步骤构成的序列来改变用于豆荚的调解器:豆荚中的每个存储系统被改变为取决于第一调解器和第二调解器两者并且每个存储系统然后被改变为仅取决于第二调解器。如果在序列的中间发生故障,则一些存储系统可能取决于第一调解器和第二调解器,但是在任何情况下都不会恢复并且故障处理导致一些存储系统仅取决于第一调解器而其他存储系统仅取决于第二调解器。可通过暂时取决于对第一群体模型和第二群体模型两者获胜以便继续进行恢复来类似地处理群体。这可以产生非常短的时间段,其中豆荚在面对故障时的可用性取决于附加资源,从而降低潜在可用性,但是此时间段非常短并且可用性的降低常常非常少。利用调解,如果调解器参数的变化仅仅是用于调解的密钥的变化并且所使用的调解服务是相同的,则可用性的潜在降低甚至更少,因为它现在仅取决于对相同服务的两次调用与对该服务的一次调用的关系,而不是对两个单独的服务的单独的调用。
读者将注意到,改变群体模型可能相当复杂。在存储系统将参与第二群体模型但是不取决于在该第二群体模型中获胜的情况下可能需要附加步骤,其然后后面是也取决于第二群体模型的步骤。这可能有必要说明如下事实:如果仅一个系统已处理变化以取决于群体模型,则它从来不会赢得群体,因为从来不会有多数。在适当的位置利用此模型以便改变高可用性参数(调解关系、群体模型、接管偏好),我们可为这些操作创建安全程序以将一豆荚分成两个或者将两个豆荚联合成一个。这可能要求添加一种其他能力:将第二豆荚链接到第一豆荚以得到高可用性,使得如果两个豆荚包含兼容的高可用性参数,则链接到第一豆荚的第二豆荚可取决于第一豆荚以用于确定并激发分离相关处理和操作、脱机和同步状态以及恢复和重新同步动作。
为了将一豆荚分成两个,这是将一些卷移动到重新创建的豆荚中的操作,可以形成分布式操作,其可被描述为:形成我们将先前在第一豆荚中的一组卷移动到其中的第二豆荚,将高可用性参数从第一豆荚拷贝到第二豆荚中以确保它们兼容用于链接,并且将第二豆荚链接到第一豆荚以得到高可用性。此操作可以被编码为消息并且应该由容器中的每个存储系统实现,使得存储系统确保操作完全发生在该存储系统上或者在处理被故障中断的情况下根本不会发生。一旦用于两个豆荚的所有同步存储系统都已处理此操作,这些存储系统就然后可处理后续操作,所述后续操作改变第二豆荚,使得它不再被链接到第一豆荚。与用于豆荚的高可用性特性的其他变化一样,这涉及首先使每个同步存储系统变化依靠前一个模型(该模型是高可用性被链接到第一豆荚)和新模型(该模型是它自己的现在独立的高可用性)两者。在调解或群体的情况下,这意味着处理了此变化的存储系统将首先取决于被实现为适于第一豆荚的调解或群体并且将附加地取决于在第二豆荚可在对于群体要求调解或测试的故障之后继续进行之前针对第二豆荚实现的新的单独的调解(例如,新的调解密钥)或群体。与改变群体模型的先前描述一样,中间步骤可以将存储系统设置为在存储系统参与的步骤之前参与针对第二豆荚的群体并且取决于针对第二豆荚的群体。一旦所有同步存储系统已处理变化以取决于用于针对第一豆荚和第二豆荚两者的调解或群体的新参数,分割就完成。
将第二豆荚联合到第一豆荚中基本上相反地操作。首先,通过具有存储系统的相同列表并且通过具有兼容的高可用性模型,必须调整第二豆荚以与第一豆荚兼容。这可以涉及某一组步骤,诸如在本文中其他地方描述来添加或者移除存储系统或者改变调解器和群体模型的那些步骤。取决于实施方式,可能仅有必要达成存储系统的相同列表。联合通过在每个同步存储系统上处理操作以将第二豆荚链接到第一豆荚以得到高可用性来继续进行。处理该操作的每个存储系统然后将取决于第一个豆荚以得到高可用性,然后取决于第二豆荚以得到高可用性。一旦用于第二豆荚的所有同步存储系统已处理该操作,则存储系统然后将各自处理后续操作以消除第二豆荚与第一豆荚之间的链接,将卷从第二豆荚迁移到第一豆荚中,并且删除第二豆荚。可以贯穿这些操作保存主机或应用数据集访问,只要实施方式允许通过标识适当地指导对卷的主机或应用数据集修改或读取操作即可,并且只要标识被保存为适于存储协议或存储模型即可(例如,只要在SCSI的情况下保存了用于卷的逻辑单元标识符和用于访问卷的目标端口的用途即可)。
在豆荚之间迁移卷可以呈现问题。如果这些豆荚具有相同的一组同步成员资格存储系统,则直截了当的是:暂时挂起对正被迁移的卷的操作,将对那些卷的操作的控制切换到用于新豆荚的控制软件和结构,然后重新开始操作。这除了允许非常短暂的操作挂起之外还允许对于应用具有连续正常运行时间的无缝迁移,前提是网络和端口在豆荚之间适当地迁移。取决于实施方式,挂起操作可能甚至不是必需的,或者可以是在系统内部以致操作的挂起没有影响。在具有不同的同步成员资格集的豆荚之间拷贝卷是更大的问题。如果用于副本的目标豆荚具有来自源豆荚的同步成员的子集,则这不是太大的问题:可足够安全地丢弃成员存储系统,而不必做更多的工作。但是,如果目标豆荚将同步成员存储系统添加到源豆荚之上的卷,则必须使所添加的存储系统同步以包括卷的内容,然后才能使用它们。在被同步之前,这让所拷贝的卷与已经同步的卷明显不同,因为故障处理不同并且来自尚未同步的成员存储系统的请求处理将不工作或者必须被转发或者不会一样快,因为读取将必须遍历互连。另外,内部实施方式将必须处理同步并准备好进行故障处理的一些卷以及不同步的其他卷。
存在与操作在面对故障时的可靠性有关的其他问题。协调卷在多存储系统豆荚之间的迁移是分布式操作。如果豆荚是故障处理和恢复的单元,并且如果调解或群体或无论什么手段用于避免裂脑情形,则将卷从具有用于故障处理、恢复、调解和群体的特定一组状态及配置和关系的一个豆荚切换到另一豆荚,然后豆荚中的存储系统必须小心协调与针对任何卷的那种处理有关的变化。操作不能被以原子方式在存储系统之间分发,但是必须被以某种方式分级。调解和群体模型基本上给豆荚提供用于实现分布式事务原子性的工具,但是在不添加到实施方式的情况下,这可能不扩展到豆荚间操作。
甚至对于共享相同的第一和第二存储系统的两个豆荚考虑甚至卷从第一豆荚到第二豆荚的简单迁移。在某一时刻存储系统将协调以定义卷现在位于第二豆荚中并且不再位于第一豆荚中。如果不存在针对跨越用于两个豆荚的存储系统的事务原子性的固有机制,则朴素实施方式能在导致故障处理以使存储系统与两个豆荚分离的网络故障时让卷留在第一存储系统上的第一豆荚和第二存储系统上的第二豆荚中。如果豆荚单独地确定哪一个存储系统成功分离另一个,则结果可能是同一存储系统为两个豆荚分离另一个存储系统,在此情况下卷迁移恢复的结果应该是一致的,否则它能导致不同的存储系统为两个豆荚分离另一个。如果第一存储系统为第一豆荚分离第二存储系统并且第二存储系统为第二豆荚分离第一存储系统,则恢复可能导致卷被恢复到第一存储系统上的第一豆荚并进入到第二存储系统上的第二豆荚中,同时卷然后运行并被导出到两个存储系统上的主机和存储应用。如果替代地第二存储系统为第一豆荚分离第一存储系统并且第一存储器为第二豆荚分离第二存储系统,则恢复可能导致卷被第一存储系统从第二豆荚丢弃并且卷被第二存储系统从第一豆荚丢弃,从而导致卷完全消失。如果卷正在其之间迁移的豆荚位于不同组存储系统中,则事情可能变得甚至更复杂。
对这些问题的解决方案可以是使用中间豆荚以及先前描述的用于分割和联合豆荚的技术。此中间豆荚可能从来未被呈现为与存储系统相关联的可见受管理对象。在此模型中,首先使用先前描述的分割操作来将要从第一豆荚移动到第二豆荚的卷从第一豆荚分割成新的中间豆荚。然后可通过必要时从豆荚添加或者移除存储系统来调整用于中间豆荚的存储系统成员以与存储系统的成员资格匹配。随后,可将中间豆荚与第二豆荚联合。
为了进一步说明,图5阐述了图示根据本公开的一些实施例的可以由支持豆荚的存储系统(402,404,406)执行的步骤的流程图。尽管被不太详细地描绘,然而图5中描绘的存储系统(402,404,406)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B、图4所描述的存储系统或其任何组合。事实上,图5中描绘的存储系统(402,404,406)可以包括与上述的存储系统相同、更少、附加的组件。
在图5中描绘的示例方法中,存储系统(402)可以附连(508)到豆荚。用于豆荚成员资格的模型可以包括存储系统的列表和该列表的子集,其中存储系统被假定为对豆荚来说同步。如果存储系统至少在对于与豆荚相关联的数据集的最后写入副本具有相同的空闲内容的恢复内,则它对豆荚来说同步。空闲内容是在任何进行中的修改已完成而没有新修改的处理之后的内容。有时这被称为“崩溃可恢复的”一致性。被列举为豆荚成员但是未被列举为对豆荚来说同步的存储系统可被描述为与豆荚“分离”。被列举为豆荚成员、对豆荚来说同步并且当前可用于针对豆荚主动地为数据服务的存储系统对豆荚来说“联机”。
在图5中描绘的示例方法中,存储系统(402)可以附连(508)到豆荚,例如,通过使数据集(426)的其在本地存储的版本以及数据集(426)的被存储在联机的豆荚中的其他存储系统(404,406)上的最新版本同步,如上所述。在这样的示例中,为了让存储系统(402)附接(508)到豆荚,可能需要更新在本地存储在豆荚中的存储系统(402,404,406)中的每一个内的豆荚定义以便让存储系统(402)附连(508)到豆荚。在这样的示例中,豆荚的每个存储系统成员可以具有它自己的成员资格的副本,包括它最后知道哪些存储系统同步,以及它最后知道哪些存储系统包括豆荚成员的整个集合。
在图5中描绘的示例方法中,存储系统(402)还可以接收(510)用于读取数据集(426)的一部分的请求并且存储系统(402)可以在本地处理(512)用于读取数据集(426)的一部分的请求。读者应领会的是,尽管用于修改(例如,写入操作)数据集(426)的请求要求豆荚中的存储系统(402,404,406)之间的协调,然而当数据集(426)应该跨越豆荚中的所有存储系统(402,404,406)一致时,对用于读取数据集(426)的一部分的请求做出响应不要求存储系统(402,404,406)之间的类似协调。因此,接收到读取请求的特定存储系统(402)可以通过读取被存储在存储系统(402)的存储设备内的数据集(426)的一部分来在本地为读取请求服务,而无需与豆荚中的其他存储设备(404,406)进行同步通信。由一个存储系统接收到的对复制集群中的复制数据集的读取请求预期在绝对多数情况下避免任何通信,至少当由正在名义上也在运行的集群内运行的存储系统接收到时。应该简单地通过从集群数据集的本地副本读取来正常地处理这样的读取,而不要求与集群中的其他存储系统进一步交互。
读者应领会的是,存储系统可以采取步骤来确保读取一致性,使得读取请求将不管哪一个存储系统处理读取请求都返回相同的结果。例如,由集群中的任何一组存储系统接收的任何一组更新的结果得到的集群数据集内容应该跨越集群一致,至少在任何时候更新是空闲的(所有先前的修改操作都已被指示为完成并且尚未以任何方式接收并处理了新的更新请求)。更具体地,跨越一组存储系统的集群数据集的实例可仅作为仍然尚未完成的更新的结果而不同。这意味着,例如,在其卷块范围中重叠的任何两个写入请求或者写入请求和重叠快照、比较并写入或虚拟块范围拷贝的任何组合必须在数据集的所有副本上产生一致的结果。两个操作不能产生结果,好像它们在一个存储系统上按照一个次序发生,而在复制集群中的另一存储系统上按照不同的次序发生。
此外,读取请求可以是时间次序一致的。例如,如果在复制集群上接收到一个读取请求并已完成而且该读取然后后面是对由复制集群接收的重叠地址范围的另一读取请求并且在一个或两个读取以任何方式在时间和卷地址范围上与由复制集群接收到的修改请求重叠的情况下(无论任何读取或修改是由复制集群中的相同的存储系统还是不同的存储系统接收到),然后如果第一读取反映更新的结果,则第二读取也应该反映该更新的结果,而不是可能返回更新之前的数据。如果第一读取不反映更新,则第二读取可反映或者不反映更新。这确保在两个读取请求之间用于数据段的“时间”不能向后滚动。
在图5中描绘的示例方法中,存储系统(402)还可以检测(514)与其他存储系统(404,406)中的一个或多个的数据通信中断。由于各种原因可能发生与其他存储系统(404,406)中的一个或多个的数据通信中断。例如,因为存储系统(402,404,406)中的一个已失效了,因为网络互连已失效了,或者由于某种其他原因,可能发生与其他存储系统(404,406)中的一个或多个的数据通信中断。同步复制集群的一个重要的方面是确保任何故障处理不会导致不可恢复的不一致或响应中的任何不一致。例如,如果网络在两个存储系统之间失效了,则这些存储系统中的至多一个可继续处理新近传入的I/O请求。并且,如果一个存储系统继续处理,则另一个存储系统不能处理任何新的完成请求,包括读取请求。
在图5中描绘的示例方法中,存储系统(402)还可以确定(516)特定存储系统(402)是否应该作为豆荚的一部分保持联机。如上面所提及的,为了作为豆荚的一部分“联机”,存储系统必须认为它自己对豆荚来说同步并且必须与它认为对豆荚来说同步的所有其他存储系统进行通信。如果存储系统不能确定它同步并在与同步的所有其他存储系统进行通信,则它可以停止处理用于访问数据集(426)的新传入请求。因此,例如,通过确定它是否可与它认为对豆荚来说同步的所有其他存储系统(404,406)进行通信(例如,经由一个或多个测试消息),通过确定它认为对豆荚来说同步的所有其他存储系统(404,406)是否也认为存储系统(402)附连到豆荚,通过特定存储系统(402)必须确认它可与它认为对豆荚来说同步的所有其他存储系统(404,406)进行通信并且它认为对豆荚同步的所有其他存储系统(404,406)也认为存储系统(402)附连到豆荚的两个步骤的组合,或者通过某种其他机制,存储系统(402)可以确定(516)特定存储系统(402)是否应该作为豆荚的一部分保持联机。
在图5中描绘的示例方法中,存储系统(402)还可以响应于肯定地(518)确定特定存储系统(402)应该作为豆荚的一部分保持联机,使特定存储系统(402)上的数据集(426)保持(522)对管理和数据集操作可访问。例如,通过接受用于访问被存储在存储系统(402)上的数据集(426)的版本的请求并处理这样的请求,通过接受并处理由主机或授权管理员发出的与数据集(426)相关联的管理操作,通过接受并处理由豆荚中的其他存储系统(404,406)中的一个发出的与数据集(426)相关联的管理操作,或者以某种其他方式,存储系统(402)可以使特定存储系统(402)上的数据集(426)保持(522)对管理和数据集操作可访问。
在图5中描绘的示例方法中,存储系统(402)还可以响应于确定特定存储系统不应该(520)作为豆荚的一部分保持联机,使特定存储系统(402)上的数据集(426)变得(524)对管理和数据集操作不可访问。例如,通过拒绝用于访问被存储在存储系统(402)上的数据集(426)的版本的请求,通过拒绝由主机或其他授权管理员发出的与数据集(426)相关联的管理操作,通过拒绝由豆荚中的其他存储系统(404,406)中的一个发出的与数据集(426)相关联的管理操作,或者以某种其他方式,存储系统(402)可以使特定存储系统(402)上的数据集(426)变得(524)对管理和数据集操作不可访问。
在图5中描绘的示例方法中,存储系统(402)还可以检测到(526)与其他存储系统(404,406)中的一个或多个的数据通信中断已被修复。例如,通过从其他存储系统(404,406)中的一个或多个接收消息,存储系统(402)可以检测到(526)与其他存储系统(404,406)中的一个或多个的数据通信中断已被修复。响应于检测到(526)与其他存储系统(404,406)中的一个或多个的数据通信中断已被修复,存储系统(402)可以使特定存储系统(402)上的数据集(426)变得(528)对管理和数据集操作可访问。
读者应领会的是,图5中描绘的示例描述了各种动作被描绘为在某种次序内发生但是不要求排序的实施例。此外,可以存在存储系统(402)仅执行所描述的动作的子集的其他实施例。例如,存储系统(402)可以执行以下步骤:检测(514)与其他存储系统(404,406)中的一个或多个的数据通信中断,确定(516)特定存储系统(402)是否应该保持在豆荚中,使特定存储系统(402)上的数据集(426)保持(522)对管理和数据集操作可访问,或者使特定存储系统(402)上的数据集(426)变得(524)对管理和数据集操作不可访问,而不用首先接收(510)用于读取数据集(426)的一部分的请求并且在本地处理(512)用于读取数据集(426)的一部分的请求。此外,存储系统(402)可以检测到(526)与其他存储系统(404,406)中的一个或多个的数据通信中断已被被修复并且使特定存储系统(402)上的数据集(426)变得(528)对管理和数据集操作可访问,而无需首先接收(510)用于读取数据集(426)的一部分的请求并且在本地处理(512)用于读取数据集(426)的一部分的请求。事实上,在所有实施例中都不显式地要求本文描述的步骤作为用于执行本文描述的其他步骤的先决条件。
为了进一步说明,图6阐述了图示根据本公开的一些实施例的可以由支持豆荚的存储系统(402,404,406)执行的步骤的流程图。尽管被不太详细地描绘,然而图6中描绘的存储系统(402,404,406)可以类似于上面参考图1A至图1D、图2A至图2G、图3A至图3B、图4所描述的存储系统或其任何组合。事实上,图6中描绘的存储系统(402,404,406)可以包括与上述的存储系统相同、更少、附加的组件。
在图6中描绘的示例方法中,存储系统(402,404)中的两个或更多个可以各自标识(608)用于异步地接收数据集(426)的目标存储系统(618)。用于异步地接收数据集(426)的目标存储系统(618)可以例如作为位于与作为特定豆荚的成员的存储系统(402,404)中的任何一个不同的数据中心的备用存储系统、作为由云服务提供商提供的云存储装置或者以许多其他方式被具体实现。读者应领会的是,目标存储系统(618)不是同步地复制数据集(426)所跨越的所述多个存储系统(402,404)中的一个,并且因此,目标存储系统(618)最初不是包括数据集(426)的最新本地副本。
在图6中描绘的示例方法中,存储系统(402,404)中的两个或更多个可以各自还标识(610)未被作为包括数据集(426)的豆荚的成员的其他存储系统中的任一个异步地复制到目标存储系统(618)的数据集(426)的一部分。在这样的示例中,存储系统(402,404)可以各自将未被其他存储系统中的任一个异步地复制到目标存储系统的数据集(426)的一部分异步地复制(612)到目标存储系统(618)。考虑第一存储系统(402)负责将数据集(426)的第一部分(例如,地址空间的前半部分)异步地复制到目标存储系统(618)的示例。在这样的示例中,第二存储系统(404)将负责将数据集(426)的第二部分(例如,地址空间的后半部分)异步地复制到目标存储系统(618),使得两个或更多个存储系统(402,404)将整个数据集(426)共同地复制到目标存储系统(618)。
读者应领会的是,通过使用豆荚,如上所述,可以将两个存储系统之间的复制关系从数据被异步地复制的关系切换到数据被同步地复制的关系。例如,如果存储系统A被配置为将数据集异步地复制到存储系统B,从而创建包括数据集的豆荚,则作为成员的存储系统A和作为成员的存储系统B可数据被异步地复制的关系切换到数据被同步地复制的关系。同样地,通过使用豆荚,可以将两个存储系统之间的复制关系从数据被同步地复制的关系切换到数据被异步地复制的关系。例如,如果创建了包括数据集的豆荚,则作为成员的存储系统A和作为成员的存储系统B通过仅仅取消伸展豆荚(以移除作为成员的存储系统A或者以移除作为成员的存储系统B),可立即将在存储系统之间同步地复制数据的关系切换到数据被异步地复制的关系。以这样的方式,存储系统可以按需在异步复制与同步复制之间来回切换。
可通过依靠用于同步复制和异步复制两者的类似技术的实施方式来方便这种切换。例如,如果用于同步地复制的数据集的重新同步依靠如用于异步复制的相同或兼容的机制,则切换到异步复制在概念上与丢弃同步状态并让关系留在类似于“永久恢复”模式的状态下相同。同样地,从异步复制切换到同步复制可通过“追赶”并变得同步来操作,就像当在交换系统成为同步豆荚成员情况下完成重新同步时所做的那样。
可替代地,或者附加地,如果同步复制和异步复制都依靠类似或相同的公共元数据、或用于表示并标识逻辑盘区或存储块标识的公共模型、或用于表示内容可寻址存储块的公共模型,则可利用通用性的这些方面来显著地减少可能需要在切换到同步复制和异步复制并从同步复制和异步复制切换时转移的内容。进一步地,如果数据集被从存储系统A异步地复制到存储系统B,并且系统B进一步地将该数据集异步地复制到存储系统C,则内容可寻址存储块的公共元数据模型、公共逻辑盘区或块标识或共同表示可显著地减少使得能实现存储系统A与存储系统C之间的同步复制所需的数据转移。
读者应进一步领会的是,通过使用豆荚,如上所述,可以使用复制技术来执行除复制数据以外的任务。事实上,因为豆荚可以包括一组受管理对象,所以可以使用豆荚和本文描述的复制技术来执行像迁移虚拟机一样的任务。例如,如果虚拟机A正在存储系统A上执行,则通过创建包括虚拟机A作为受管理对象的豆荚,可以将作为成员的存储系统A、作为成员的存储系统B、虚拟机A以及任何关联的映像和定义迁移到存储系统B,此时能简单地销毁豆荚,能更新成员资格,或者必要时可以采取其他动作。
为了进一步说明,图7阐述了图示根据本公开的一些实施例的在两个或更多个存储系统(714,724,728)之间建立同步复制关系的示例方法的流程图。尽管被不太详细地描绘,然而图7中描绘的存储系统(714,724,728)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图7中描绘的存储系统(714,724,728)可以包括与上述的存储系统相同、更少、附加的组件。
图7中描绘的示例方法包括针对数据集(712)标识(702)将同步地复制到数据集(712)所跨越的多个存储系统(714,724,728)。图7中描绘的数据集(712)可以例如作为特定卷的内容、作为卷的特定片的内容或者作为一个或多个数据元素的任何其他合集被具体实现。可以跨越多个存储系统(714,724,728)使数据集(712)同步,使得每个存储系统(714,724,728)保留数据集(712)的本地副本。在本文描述的示例中,这样的数据集(712)被跨越存储系统(714,724,728)同步地复制,使得可通过具有性能特性的存储系统(714,724,728)中的任一个来访问数据集(712),使得集群中的任何一个存储系统不比集群中的任何其他存储系统基本上更佳地操作,至少只要集群和正被访问的特定存储系统在名义上运行。在这样的系统中,应该对驻留在每个存储系统(714,724,728)上的数据集的副本做出对数据集(712)的修改,使得访问存储系统(714,724,728)中的任一个上的数据集(712)将产生一致的结果。例如,发出给数据集的写入请求必须在所有存储系统(714,724,728)上被服务或者在存储系统(714,724,728)上都未被服务。同样地,必须在所有存储系统(714,724,728)上以相同的次序执行一些组的操作(例如,针对数据集内的相同位置的两个写入操作),使得驻留在每个存储系统(714,724,728)上的数据集的副本最终是相同的。不需要在确切相同的时间进行对数据集(712)的修改,而是一些动作(例如,发出写入请求针对数据集的确认、使得能实现对以在所有存储系统上仍然尚未完成的写入请求作为目标的数据集内的位置的读取访问)可以被延迟,直到每个存储系统(714,724,728)上的数据集(712)的副本已被修改为止。
在图7中描绘的示例方法中,例如,通过检查使数据集(712)与名义上存储该数据集(712)的一个或多个存储系统(714,724,728)相关联的豆荚定义或类似的数据结构,可以执行针对数据集(712)标识(702)将同步地复制数据集(712)所跨越的多个存储系统(714,724,728)。‘豆荚(pod)’(当在这里并贯穿本申请的剩余部分使用该术语时)可以作为表示数据集、一组受管理对象和管理操作、用于修改或者读取数据集的一组访问操作、以及多个存储系统的管理实体被具体实现。这样的管理操作可以通过存储系统中的任一个等效地修改或者查询受管理对象,其中用于读取或者修改数据集的访问操作通过这些存储系统中的任一个等效地操作。每个存储系统可以将数据集的单独的副本作为所述数据集的真子集来存储,所述真子集被存储和通告以供存储系统使用,其中通过任何一个存储系统执行和完成的用于修改受管理对象或数据集的操作被反映在用于查询豆荚的后续管理对象或用于读取数据集的后续访问操作中。可以在通过引用并入本文的先前提交的临时专利申请no.62/518,071中找到有关‘豆荚’的附加细节。在这样的示例中,豆荚定义可以包括至少数据集(712)和同步地复制数据集(712)所跨越的一组存储系统(714,724,728)的标识。这样的豆荚可以封装许多(可能是可选的)属性中的一些,包括对称访问、副本的灵活添加/移除、高可用性数据一致性、在与数据集的关系上跨越存储系统的统一用户管理、受管理主机访问、应用集群等。可将存储系统添加到豆荚,从而导致豆荚的数据集(712)被拷贝到该存储系统并且然后随着数据集(712)被修改而保持最新。还可从豆荚中移除存储系统,从而导致数据集(712)在已移除的存储系统上不再保持最新。在这样的示例中,可以随着存储系统被添加到特定豆荚并且从特定豆荚中移除而更新豆荚定义或类似的数据结构。
图7中描绘的示例方法还包括配置(704)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的一个或多个数据通信链路(716,718,720)。在图6中描绘的示例方法中,豆荚中的存储系统(714,724,728)必须彼此通信既用于高带宽数据转移又用于集群、状态和管理通信。这些不同类型的通信能通过相同的数据通信链路(716,718,720),或者在替代实施例中,这些不同类型的通信能通过单独的数据通信链路(716,718,720)。在双控制器存储系统的集群中,每个存储系统中的两个控制器应该具有与用于任何配对的存储系统(即,豆荚中的任何其他存储系统)的两个控制器进行通信的标称能力。
在主/辅控制器设计中,用于主动复制的所有集群通信可以在主控制器之间运行直到发生故障为止。在这样的系统中,可以在主控制器与辅控制器之间或者在不同的存储系统上的辅控制器之间发生一些通信,以便验证这样的实体之间的数据通信链路是工作的。在其他情况下,虚拟网络地址可能用于限制数据中心间网络链路所需的配置,或者简化存储系统的集群方面的设计。在活动/主动控制器设计中,集群通信可能从一个存储系统的所有活动控制器运行到任何配对的存储系统中的一些或所有活动控制器,或者它们可能通过公共交换机来过滤,或者它们可能使用虚拟网络地址来简化配置,或者它们可能使用某种组合。在横向扩展设计中,可以使用两个或更多个公共网络交换机,使得存储系统内的所有横向扩展存储控制器连接到网络交换机以便处理数据业务。交换机可能或者可能不会使用这些技术来限制暴露的网络地址的数量,使得配对的存储系统不需要被配置有所有存储控制器的网络地址。
在图7中描绘的示例方法中,例如,通过将存储系统(716,718,720)配置为通过数据通信网络经由定义的端口通信,通过将存储系统(716,718,720)配置为通过存储系统(716,718,720)中的两个之间的点对点数据通信链路来通信,或者以各种方式,可以执行配置(704)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的一个或多个数据通信链路(716,718,720)。如果要求安全通信,则可能需要某种形式的密钥交换,或者能通过诸如SSH(Secure SHell)、SSL或围绕公钥或Diffie-Hellman密钥交换或合理的替代方案而构建的某种其他服务或协议这样的某种服务来完成或者引导通信。也能通过以某种方式绑定到客户身份的某种供应商提供的云服务来调解安全通信。可替代地,被配置为在客户设施上运行(诸如在虚拟机或容器中运行)的服务能用于调解复制存储系统(716,718,720)之间的安全通信所必需的密钥交换。读者应领会的是,包括多于两个存储系统的豆荚可能需要多数或所有单独的存储系统之间的通信链路。在图6中描绘的示例中,图示了三个数据通信链路(716,718,720),但是在其他实施例中可以存在附加数据通信链路。
读者应领会的是,将同步地复制数据集(712)所跨越的存储系统(714,724,728)之间的通信为一些数量的目的服务。一个目的例如是作为I/O处理的一部分将数据从一个存储系统(714,724,728)递送到另一存储系统(714,724,728)。例如,处理写入通常要求将写入内容和写入的一些描述递送到用于豆荚的任何配对的存储系统。通过存储系统(714,724,728)之间的数据通信所服务的另一目的可以是传送配置变更和分析数据以便处理创建、扩展、删除或者重命名卷、文件、对象桶等。通过存储系统(714,724,728)之间的数据通信所服务的另一目的可以是执行在检测并处理存储系统和互连故障时涉及的通信。这种类型的通信可能是时间关键的并且可能需要被优先考虑以确保当大量写入业务被突然转储在数据中心互连上时它不会卡在长网络队列延迟后面。
读者应进一步领会的是,不同类型的通信可以按照各种组合使用相同的连接或不同的连接,并且可以使用相同的网络或不同的网络。进一步地,一些通信可以被加密和保护,然而其他通信可能未被加密。在一些情况下,数据通信链路能用于将I/O请求(直接地作为请求本身或者作为I/O请求表示的操作的逻辑描述)从一个存储系统转发到另一存储系统。例如,在一个存储系统对豆荚来说具有最新且同步的内容并且另一存储系统对豆荚来说当前没有最新且同步的内容的情况下,能使用这个。在这样的情况下,只要数据通信链路正在运行,就可将请求从不是最新且同步的存储系统转发到最新且同步的存储系统。
图7中描绘的示例方法还包括在所述多个存储系统(714,724,728)之间交换(706)用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)。在图6中描绘的示例方法中,用于特定存储系统(714,724,728)的定时信息(710,722,726)可以例如作为存储系统(714,724,728)内的时钟的值被具体实现。在替代实施例中,用于特定存储系统(714,724,728)的定时信息(710,722,726)可以作为用作时钟值的代理的值被具体实现。可以将用作时钟值的代理的值包括在在存储系统之间交换的令牌中。用作时钟值的代理的这样的值可以例如作为特定存储系统(714,724,728)或存储系统控制器可在内部记录为已在特定时间被发送的顺序号被具体实现。在这样的示例中,如果向后接收到令牌(例如,顺序号),则可找到所关联的时钟值并将它用作用于确定有效租期是否仍然适当的基础。在图6中描绘的示例方法中,例如,通过每个存储系统(714,724,728)在周期性基础上、按需、在建立租期之后的预定时间量内、在租期被设置为期满之前的预定时间量内、作为发起或者重新建立同步复制关系的尝试的一部分或者以某种其他方式向豆荚中的每个其他存储系统(714,724,728)发送定时信息,可以执行在所述多个存储系统(714,724,728)之间交换(706)用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)。
图7中描绘的示例方法还包括按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期,所述同步复制租期标识同步复制关系有效的时间段。在图7中描绘的示例方法中,同步复制关系被形成为在这些很大程度上独立的暂存器之间复制某个数据集(712)的一组存储系统(714,724,728),其中每个存储系统(714,724,728)具有它自己的副本以及它自己的对用于定义存储对象、用于将对象映射到物理存储装置、用于重复删除、用于定义内容到快照的映射等的相关数据结构的单独的内部管理。同步复制关系可特定于特定数据集,使得特定存储系统(714,724,728)可以与多于一个同步复制关系相关联,其中每个同步复制关系通过所描述的数据集来区分并且可以进一步由不同的一组附加成员存储系统构成。
在图7中描绘的示例方法中,可以以各种不同的方式按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期。在一个实施例中,存储系统可以通过利用用于所述多个存储系统(714,724,728)中的每一个的定时信息(710,722,726)来协调时钟来建立(708)同步复制租期。在这样的示例中,一旦针对存储系统(714,724,728)中的每一个协调了时钟,存储系统就可以建立(708)延长超过已协调的时钟值达预定时间段的同步复制租期。例如,如果用于每个存储系统(714,724,728)的时钟被协调为值X,则存储系统(714,724,728)可以各自被配置为建立在X+2秒之前有效的同步复制租期。
在替代实施例中,可以在仍然实现定时保证的同时避免在存储系统(714,724,728)之间协调时钟的需要。在这样的实施例中,每个存储系统(714,724,728)内的存储控制器可以具有本地单调增加的时钟。可以通过每个控制器将其时钟值连同它从另一个存储控制器接收到的最后时钟值一起发送到其他存储控制器来在存储控制器(诸如一个存储系统中的与配对的存储系统中的主控制器进行通信的主控制器)之间建立(708)同步复制租期。当特定控制器从另一控制器接收回其时钟值时,它将一些商定的租期间隔添加到该接收到的时钟值并且使用那个来建立(708)其本地的同步复制租期。以这样的方式,可以按照从另一存储系统接收到的本地时钟的值计算出同步复制租期。
考虑第一存储系统(714)中的存储控制器正在与第二存储系统(724)中的存储控制器进行通信的示例。在这样的示例中,假定用于第一存储系统(714)中的存储控制器的单调增加时钟的值是1000毫秒。进一步假定第一存储系统(714)中的存储控制器向第二存储系统(724)中的存储控制器发送指示其在消息被生成时的时钟值为1000毫秒的消息。在这样的示例中,假定在第一存储系统(714)中的存储控制器向第二存储系统(724)中的存储控制器发送指示其在消息被生成时的时钟值为1000毫秒的消息之后500毫秒,第一存储系统(714)中的存储控制器从第二存储系统(724)中的存储控制器接收到指示如下的消息:1)第二存储系统(724)中的存储控制器中的单调增加时钟的值在消息被生成时处于5000毫秒的值下,并且2)由第二存储系统(724)接收到的第一存储系统(714)中的存储控制器中的单调增加时钟的最后值是1000毫秒。在这样的示例中,如果商定的租期间隔是2000毫秒,则第一存储系统(714)将建立(708)在用于第一存储系统(714)中的存储控制器的单调增加时钟处于3000毫秒的值下之前有效的同步复制租期。如果第一存储系统(714)中的存储控制器到用于第一存储系统(714)中的存储控制器的单调增加时钟达到3000毫秒的值时未从第二存储系统(724)中的存储控制器接收到包括用于第一存储系统(714)中的存储控制器的单调增加时钟的更新值的消息,则第一存储系统(714)会将同步复制租期视为已期满并且可以采取如在下面更详细地描述的各种动作。读者应领会的是,在豆荚中的剩余的存储系统(724,728)内的存储控制器可以类似地反应并且执行对同步复制租期的类似跟踪和更新。本质上,接收控制器可确保网络和配对的控制器正在该时间间隔期间某处运行,并且可确保已配对的控制器接收到它在该时间间隔期间某处发送的消息。在没有时钟方面的任何协调的情况下,接收控制器不能确切地知道网络和已配对的控制器正在该时间间隔中哪里运行,并且不能确切地知道在发送其时钟值时或者在接收回其时钟时是否存在队列延迟。
在由两个存储系统构成的豆荚中,每个存储系统具有一简单的主控制器,其中主控制器正在交换时钟作为其集群通信的一部分,每个主控制器可使用活动租期来约束不确凿地知道已配对的控制器何时正在运行。在变得不确定时(当控制器的连接的活动租期已期满时),它可开始发送指示不确定并且必须在可再次重新开始活动租期之前重新建立适当地同步的连接的消息。如果网络正在一个方向上工作但是在另一个方向上工作不正常,则可以接收到这些消息并且可能未接收到响应。这可以是通过配对的控制器的连接未在正常地运行的第一指示,因为由于丢失消息和队列延迟的不同组合,它自己的活动租期可能仍然尚未期满。结果,如果接收到这样的消息,则也应该认为它自己的活动租期期满了,并且它应该开始发送它自己的尝试协调使活动租期的连接和重新开始同步的消息。在那发生并且新的一组时钟交换可成功之前,控制器都不可认为其活动租期是有效的。
在此模型中,控制器可在开始了发送重新建立消息之后等待租期间隔秒,并且如果它尚未接收到响应,则可确保已配对的控制器当机或者已配对的控制器自己的用于连接的租期将已期满。为了处理少量的时钟漂移,它可以等待稍长于租期间隔(即,重新建立租期)。当控制器收到重新建立消息时,它能认为重新建立租期立即期满,而不是等待(因为它知道发送控制器的活动租期已期满),但是在消息丢失是例如通过拥塞网络交换机引起的临时状况的情况下,在放弃之前尝试进一步消息传送变得有意义。
在替代实施例中,除了建立同步复制租期之外,还可以在从配对的存储系统接收到时钟值时或者在与配对的存储系统交换的时钟的收回时建立集群成员资格租期。在这样的示例中,每个存储系统可以与每一配对的存储系统具有它自己的同步复制租期和它自己的集群成员资格租期。与任何对的同步复制租期的期满可以导致暂停处理。然而,在集群成员资格租期已随着所有对而期满之前不能重新计算集群成员资格。因此,应该基于消息和时钟值交互设置集群成员资格租期的持续时间,以确保与对的集群成员资格租期不会期满,直到在对的用于该链路的同步复制链路已期满之后为止。读者应领会的是,集群成员资格租期可由豆荚中的每个存储系统建立并且可以与作为豆荚的成员的任何两个存储系统之间的通信链路相关联。此外,集群成员资格租期可以在同步复制租期的期满之后延长一定持续时间,所述持续时间至少和用于同步复制租期的期满的时间段一样长。可以在作为时钟交换的一部分接收到从配对的存储系统接收的时钟值时延长集群成员资格租期,其中来自当前时钟值的集群成员租期周期可以至少和为基于交换的时钟值的最后同步复制租期延长而建立的时段一样长。在附加实施例中,可通过连接来交换附加集群成员资格信息,包括何时首先协商会话。读者应领会的是,在利用集群成员资格租期的实施例中,每个存储系统(或存储控制器)对于集群成员资格租期可以具有其自己的值。这样的租期不应该期满,直到可确保如果集群租期期满允许例如通过调解器竞争建立新成员资格并且同步复制租期期满迫使新请求的处理暂停则跨越所有豆荚成员的所有同步复制租期都已期满为止。在这样的示例中,必须在可采取集群成员资格动作之前确保暂停处处适当。
读者应领会的是,尽管存储系统(714)中的仅一个被描绘为针对数据集(712)标识(702)将同步地复制数据集(712)所跨越的多个存储系统(714,724,728)、配置(704)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的一个或多个数据通信链路(716,718,720)、在所述多个存储系统(714,724,728)之间交换(706)用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)以及按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期,然而剩余的存储系统(724,728)也可以执行这样的步骤。事实上,所有三个存储系统(714,724,728)都可以同时执行上述的步骤中的一个或多个,因为在两个或更多个存储系统(714,724,728)之间建立同步复制关系可能要求两个或多个存储系统(714,724,728)之间的协作和交互。
为了进一步说明,图8阐述了图示根据本公开的一些实施例的在两个或更多个存储系统(714,724,728)之间建立同步复制关系的附加示例方法的流程图。图8中描绘的示例方法类似于图46中描绘的示例方法,因为图8中描绘的示例方法还包括针对数据集(712)标识(702)将同步地复制数据集(712)所跨越的多个存储系统(714,724,728)、配置(704)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的一个或多个数据通信链路(716,718,720)、在所述多个存储系统(714,724,728)之间交换(706)用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)以及按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期,所述同步复制租期标识同步复制关系有效的时间段。
在图8中描绘的示例方法中,按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期可包括在多个存储系统(714,724,728)之间协调(802)时钟。在图8中描绘的示例方法中,例如,通过在存储系统(714,724,728)之间发送的一个或多个消息的交换,可以执行在多个存储系统(714,724,728)之间协调(802)时钟。在存储系统(714,724,728)之间发送的一个或多个消息可以包括诸如例如其时钟值将被所有其他存储系统使用的存储系统的时钟值、用于所有存储系统将其时钟值设置为预定值的指令、来自已更新其时钟值的存储系统的确认消息等这样的信息。在这样的示例中,存储系统(714,724,728)可以被配置为使得用于特定存储系统(例如,领导者存储系统)的时钟值应该被所有其他存储系统使用,来自所有存储系统的满足某个特定准则的时钟值(例如,最高时钟值)应该被所有其他存储系统使用,依此类推。在这样的示例中,可以将某个预定时间量加到从另一存储系统接收到的时钟值以说明与消息的交换相关联的传输时间。
在图8中描绘的示例方法中,按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期可包括在多个存储系统(714,724,728)之间交换(804)未协调的时钟。例如,通过每个存储系统(714,724,728)中的存储控制器像上面更详细地描述的那样交换用于本地单调地增加的时钟的值,可以执行在多个存储系统(714,724,728)之间交换(804)未协调的时钟。在这样的示例中,每个存储系统(714,724,728)可以利用商定的同步复制租期间隔和从其他存储系统(714,724,728)接收到的消息来建立(708)同步复制租期。
图8中描绘的示例方法还包括使在同步复制租期已期满之后接收到的I/O请求的处理延迟(806)。由这些存储系统中的任一个在同步复制租期已期满之后接收到的I/O请求可以被延迟(806),例如,持续足以试图重新建立同步复制关系的预定时间量,直到新的同步复制租期已被建立为止,依此类推。在这样的示例中,存储系统可以通过因某种类型的“忙”或临时故障指示而失效或者以某种其他方式使I/O请求的处理延迟(806)。
为了进一步说明,图9阐述了图示根据本公开的一些实施例的在两个或更多个存储系统(714,724,728)之间建立同步复制关系的附加示例方法的流程图。图9中描绘的示例方法类似于图46中描绘的示例方法,因为图9中描绘的示例方法还包括针对数据集(712)标识(702)将同步地复制数据集(712)所跨越的多个存储系统(714,724,728)、配置(704)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的一个或多个数据通信链路(716a,716b,718a,718b,720a,720b)、在所述多个存储系统(714,724,728)之间交换(706)用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)以及按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期,所述同步复制租期标识同步复制关系有效的时间段。
在图9中描绘的示例方法中,配置(704)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的一个或多个数据通信链路(716a,716b,718a,718b,720a,720b)可以包括针对多种数据通信类型中的每一种配置(902)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的数据通信链路(716a,716b,718a,718b,720a,720b)。在图9中描绘的示例方法中,每个存储系统可以被配置为生成存储系统发送到豆荚中的其他存储系统的多种数据通信类型。例如,存储系统可以生成包括作为I/O处理的一部分的数据(例如,要作为由主机发出的写入请求的一部分写入到存储系统的数据)的第一类型的数据通信,存储系统可以被配置为生成包括配置变更(例如,响应于创建、扩展、删除或者重命名卷而生成的信息)的第二类型的数据通信,存储系统可以被配置为生成包括在检测并处理存储系统和互连故障时涉及的通信的第三类型的数据通信,依此类推。在这样的示例中,可以例如基于哪一个软件模块发起了消息、基于哪一个硬件组件发起了消息、基于使消息被发起的事件的类型并且以其他方式确定数据通信类型。在图9中描绘的示例方法中,例如,通过将存储系统配置为针对多种数据通信类型中的每一种使用不同的互连,通过将存储系统配置为针对多种数据通信类型中的每一种使用不同的网络,或者以其他方式,可以执行针对多种数据通信类型中的每一种配置(902)所述多个存储系统(714,724,728)中的每一个之间的数据通信链路(716a,716b,718a,718b,720a,720b)。
图9中描绘的示例方法还包括检测(904)同步复制租期已期满。在图9中描绘的示例方法中,例如,通过特定存储系统将当前时钟值与租期有效的时间段相比较,可以执行检测(904)同步复制租期已期满。考虑示例,存储系统(714,724,728)协调时钟以将每个存储系统(714,724,728)内的时钟的值设置为5000毫秒的值并且每个存储系统(714,724,728)被配置为建立(708)对于2000毫秒的租期间隔延长超过其时钟值的同步复制租期,使得用于每个存储系统(714,724,728)的同步复制租期在特定存储系统(714,724,728)内的时钟达到了超过7000毫秒的值时期满。在这样的示例中,可以通过确定特定存储系统(714,724,728)内的时钟达到了7001毫秒或更高的值来执行检测(904)同步复制租期已期满。
读者应领会的是,其他事件的发生还可以使每个存储系统(714,724,728)立即将同步复制租期视为期满。例如,存储系统(714,724,728)可以在检测到存储系统(714,724,728)与豆荚中的另一存储系统(714,724,728)之间的通信故障时立即将同步复制租期视为期满,存储系统(714,724,728)可以在从豆荚中的另一存储系统(714,724,728)接收到租期重新建立消息时立即将同步复制租期视为期满,存储系统(714,724,728)可以在检测到豆荚中的另一存储系统(714,724,728)已失效了时立即将同步复制租期视为期满,依此类推。在这样的示例中,前一个句子中描述的事件中的任一个的发生可以使存储系统检测(904)同步复制租期已期满。
图9中描绘的示例方法还包括重新建立(906)同步复制关系。在图9中描绘的示例方法中,可以例如通过使用一个或多个重新建立消息来执行重新建立(906)同步复制关系。这样的重新建立消息可包括例如要重新建立同步复制关系的豆荚的标识、配置一个或多个数据通信链路所需的信息、更新的定时信息等。以这样的方式,存储系统(714,724,728)可以以与最初创建同步复制关系的方式几乎相同的方式重新建立(906)同步复制关系,包括但不限于,每个存储系统执行下列中的一个或多个:针对数据集(712)标识(702)将同步地复制数据集(712)所跨越的多个存储系统(714,724,728)、配置(704)要用于同步地复制数据集(712)的所述多个存储系统(714,724,728)中的每一个之间的一个或多个数据通信链路(716a,716b,718a,718b,720a,720b)、在所述多个存储系统(714,724,728)之间交换(706)用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)以及按照用于所述多个存储系统(714,724,728)中的至少一个的定时信息(710,722,726)建立(708)同步复制租期,所述同步复制租期辨识同步复制关系有效的时间段。
在图9中描绘的示例方法中,同步复制租期的期满可以后面有某组事件,后面有重新建立消息,后面有新的活动租期,或者后面有某个其他动作。在同步复制租期期满并被重新建立的同时,数据通信、配置通信或其他通信可能在途中。事实上,可能未接收到通信,例如,直到在已建立新的同步复制租期之后为止。在这样的情况下,通信可能已基于对豆荚、集群或网络链路状态的一种理解被发送,并且可以由现在对该状态的一个或另一方面有不同理解的存储系统(714,724,728)接收。因此,通常应该存在确保如果通信在某组集群或链路状态变化之前被发送则接收到的通信被丢弃的某种手段。存在确保如果通信在某组集群或链路状态变化之前被发送则接收到的通信被丢弃的若干可能的方式。确保如果通信在某组集群或链路状态变化之前被发送则接收到的通信被丢弃的一个方式是建立与按正在延长的工作同步复制租期而建立或者重新建立链路相关联的某个会话标识符(例如,号码)。在集群通信链路被重新建立之后,链路将得到新的会话标识符。此标识符可被与数据、配置或其他通信消息包括在一起。被接收到有错误的会话标识符的任何消息被丢弃或者产生指示失配会话标识符的错误响应。
读者应领会的是,存储系统(714,724,728)对同步复制租期的重新建立做出响应的方式可以基于存储系统和豆荚可以采取的不同的实施例而改变。在具有两个存储系统的简单主控制器的情况下,在接收控制器的同步复制租期已期满之后接收到的用于对存储系统执行操作(读取、写入、文件操作、对象操作、管理操作等)的任何新请求可能因某种“稍后重试”错误代码而使其处理被延迟、丢弃或者失效。因此,如果可确保已配对的存储控制器的同步复制租期已期满,则运行的主存储控制器可确保已配对的存储控制器不在处理新请求,这可确保它自己的重新建立租期何时已期满。在重新建立租期已期满之后,控制器开始进一步查看校正动作是安全的,所述校正动作包括认为已配对的控制器脱机并且然后在没有已配对的控制器的情况下继续存储处理。确切地那些可能是什么动作可基于各式各样的考虑事项和实施方式细节而不同。
在具有主控制器和辅控制器的存储系统的情况下,在已配对的存储系统的先前的辅控制器可能正在接管的推测下,一个存储系统上的仍在运行的主控制器可能设法连接到已配对的存储系统的先前的辅控制器。或者,一个存储系统上的仍在运行的主控制器可能等待作为可能最大二次接管时间的某个特定时间量。如果辅控制器在合理的时间内连接并按新的同步复制租期而建立新连接,则豆荚然后可以将它本身恢复到一致状态(稍后描述),然后正常地继续。如果已配对的辅控制器未足够快速地连接,则仍在运行的主控制器可以采取进一步动作,诸如设法确定仍在运行的主控制器是否应该将已配对的存储系统认为发生故障,然后在没有已配对的存储系统的情况下继续操作。主控制器可能替代地使到豆荚内的配对的存储系统上的辅控制器的租用连接保持活动。在那种情况下,主到主重新建立租期的期满可能替代地导致幸存主控制器使用该连接来查询二次接管,而不是需要首先建立该连接。还可能的是两个主存储控制器正在运行,同时网络不在它们之间工作,但是网络正在一个或另一个主控制器与已配对的辅控制器之间工作。在那种情况下,存储系统内的内部高可用性监视可能未检测到自身触发从主控制器到辅控制器的失效备援的状况。对该状况的响应包括:无论如何都触发从主控制器到辅控制器的失效备援、仅仅为了重新开始同步复制、将通信业务从主控制器路由到辅控制器、或者确切地操作好像通信已在两个存储系统之间完全失效了一样、产生相同的故障处理好像那已发生了一样。
如果多个控制器对豆荚来说是活动的(既包括在双主动-主动控制器存储系统中又在横向扩展存储系统中),则可能仍然通过与配对的存储系统中的任何或所有控制器的单独的控制器集群通信来保持租期。在这种情况下,期满的同步复制租期可能需要导致跨越整个存储系统暂停针对豆荚的新请求处理。可利用时钟和配对的时钟响应在存储系统中的所有活动的控制器之间的交换来扩展租期模型,同时与已配对的存储系统中的任何配对的控制器进一步交换那些时钟。如果存在用来与任何配对的控制器交换特定本地控制器的时钟的操作路径,则控制器可将该路径用于独立同步复制租期并且可能用于独立重新建立租期。在这种情况下,存储系统内的本地控制器也可以进一步在彼此之间交换时钟以得到彼此之间的本地租期。这可能已经被并入到本地存储系统的高可用性和监视机制中,但是应该在活动和重新建立租期的持续时间中或者在重新建立租期期满与处理互连故障所采取的动作之间的任何进一步延迟中考虑与存储系统的高可用性机制有关的任何定时。
可替代地,至少对于特定豆荚,存储系统到存储系统集群通信或租期协议单独可以一次被指派给单独的多控制器或横向扩展存储系统内的一个主控制器。作为故障的结果或者可能作为负载不平衡的结果,此服务可以从控制器迁移到控制器。或者集群通信或租期协议可能在控制器的子集(例如,两个)上运行以便限制时钟交换或分析故障场景的复杂性。每个本地控制2器可能需要在处理存储系统到存储系统租期的控制器内交换时钟,并且可能必须相应地调整在租期期满之后响应的时间,以说明何时可确保单独的控制器已实现处理暂停中的潜在级联延迟。对于与处理暂停有关的租期当前不依赖于的连接可能仍然被监视以用于警报目的。
图9中描绘的示例方法还包括尝试(908)接管针对数据集的I/O处理。在图9中描绘的示例方法中,可以例如通过存储系统(714,724,728)与调解器竞争来执行尝试(908)接管针对数据集(712)的I/O处理。如果特定存储系统(714,724,728)成功地接管针对数据集的I/O处理(712),则对数据集(712)的所有访问将由特定存储系统(714,724,728)服务,直到可重新建立同步复制关系并且在前一个同步复制关系期满之后发生的数据集(712)的任何变化然后可被转移到并存留在其他存储系统(714,724,728)上。在这样的示例中,接管针对数据集(712)的I/O处理的尝试(908)可以仅在同步复制租期期满之后的某个时间段的期满之后发生。例如,解决如何在链路故障之继续进行的尝试(包括存储系统中的一个或多个尝试接管针对数据集的I/O处理)可以直到同步复制租期之后的一定时间段已期满才开始,所述时间段例如至少和由时钟交换产生的最大租期时间一样长。
读者应领会的是,在上面描绘的许多示例中,尽管仅一个存储系统(714)被描绘为执行上述的步骤,然而事实上,在豆荚中(或在正在形成的豆荚中)的所有存储系统(714,724,728)都可以同时执行上述的步骤中的一个或多个,因为在两个或更多个存储系统之间建立同步复制关系可能要求两个或更多个存储系统之间的协作和交互。
为了进一步说明,图10阐述了图示根据本公开的一些实施例的在两个或更多个存储系统(1024,1046)之间建立同步复制关系的附加示例方法的流程图。尽管图10中描绘的示例方法图示跨越仅在两个存储系统(1024,1046)同步地复制数据集(1022)的实施例,然而图10中描绘的示例可被扩展到跨越可以执行与由两个图示的存储系统(1024,1046)执行的步骤类似的步骤的附加存储系统同步地复制数据集(1022)的实施例。
图10中描绘的示例方法包括由存储系统(1024)配置(1002)存储系统(1024,1046)与第二存储系统(1046)之间的一个或多个数据通信链路(1052)。在图10中描绘的示例方法中,例如,通过标识在数据通信网络上要用于与第二存储系统(1046)交换数据通信的定义端口,通过标识要用于与第二存储系统(1046)交换数据通信的点对点数据通信链路,通过标识要用于与第二存储系统(1046)交换数据通信的数据通信网络,或者以各种方式,存储系统(1024)可以配置(1002)存储系统(1024)与第二存储系统(1046)之间的一个或多个数据通信链路(1052)。如果要求安全通信,则可能需要某种形式的密钥交换,或者能通过诸如SSH(Secure SHell)、SSL这样的某种服务或围绕公钥或Diffie-Hellman密钥交换或合理的替代方案而构建的某种其他服务或协议来完成或者自举通信。也能通过以某种方式绑定到客户身份的某种供应商提供的云服务来调解安全通信。另一方面,被配置为在客户设施上运行(诸如在虚拟机或容器中运行)的服务能用于调解复制存储系统(1024,1046)之间的安全通信所必需的密钥交换。读者应领会的是,包括多于两个存储系统的豆荚可能需要多数或所有单独的存储系统之间的通信链路。在图10中描绘的示例方法中,第二存储系统(1046)可以类似地配置(1026)存储系统(1024)与第二存储系统(1046)之间的一个或多个数据通信链路(1052)。
图10中描绘的示例方法还包括从存储系统(1024)向第二存储系统(1046)发送(1004)用于存储系统(1024)的定时信息(1048)。用于存储系统(1024)的定时信息(1048)可以例如作为存储系统(1024)内的时钟的值、作为时钟值的表示(例如,存储系统(1024)可在内部记录的序列号)、作为第二存储系统(1046)内的时钟的最近接收到的值等被具体实现。在图10中描绘的示例方法中,存储系统(1024)可以例如经由通过两个存储系统(1024,1046)之间的数据通信链路(1052)从存储系统(1024)发送到第二存储系统(1046)的一个或多个消息将用于存储系统(1024)的定时信息(1048)发送(1004)到第二存储系统(1046)发送(1046)。在图10中描绘的示例方法中,第二存储系统(1046)可以类似地从第二存储系统(1046)向存储系统(1024)发送(1030)用于第二存储系统(1046)的定时信息(1050)。
在图10中描绘的示例方法中,从存储系统(1024)向第二存储系统(1046)发送(1004)用于存储系统(1024)的定时信息(1048)可包括发送(1006)存储系统(1024)中的时钟的值。在图10中描绘的示例中,存储系统(1024)可以将存储系统(1024)中的时钟的值发送(1006)到第二存储系统(1046)作为协调存储系统(1024,1046)之间的时钟的努力的一部分。在这样的示例中,存储系统(1024)可以包括本地单调地增加的时钟,其值经由一个或多个消息来发送(1006),所述一个或多个经由两个存储系统(1024,1046)之间的数据通信链路(1052)被发送到第二存储系统(1046)。在图10中描绘的示例方法中,从第二存储系统(1046)向存储系统(1024)发送(1030)用于第二存储系统(1046)的定时信息(1050)可以类似地包括发送(1032)第二存储系统(1046)中的时钟的值。
在图10中描绘的示例方法中,从存储系统(1024)向第二存储系统(1046)发送(1004)用于存储系统(1024)的定时信息(1048)还可包括发送(1008)第二存储系统(1046)中的时钟的最近接收到的值。在图10中描绘的示例方法中,可以执行发送(1008)第二存储系统(1046)中的时钟的最近接收到的值,例如,作为在仍然实现定时保证的同时消除在存储系统(1024,1046)之间协调时钟的需要的努力的一部分。在这样的实施例中,每个存储系统(1024,1046)可以具有本地单调地增加的时钟。可以通过每个存储系统(1024,1048)将其时钟值连同它从另一个存储系统(1024,1048)接收到的最后时钟值一起发送到另一个存储系统(1024,1048)来在存储系统(1024,1048)之间建立同步复制租期。当特定存储系统(1024,1048)从另一存储系统(1024,1048)接收回其时钟值时,它可以将某个商定的租期间隔加到该接收到的时钟值并且使用那个来建立同步复制租期。在图10中描绘的示例方法中,从第二存储系统(1046)向存储系统(1024)发送(1030)用于第二存储系统(1046)的定时信息(1050)可以类似地包括发送(1034)存储系统(1024)中的时钟的最近接收到的值。
图10中描绘的示例方法还包括由存储系统(1024)从第二存储系统(1046)接收(1010)用于第二存储系统(1046)的定时信息(1050)。在图10中描绘的示例方法中,存储系统(1024)可以经由经由两个存储阵列(1024,1046)之间的数据通信链路(1052)从第二存储系统(1046)发送的一个或多个消息来从第二存储系统(1046)接收(1010)用于第二存储系统(1046)的定时信息(1050)。在图10中描绘的示例中,第二存储系统(1046)可以从存储系统(1024)类似地接收(1028)用于存储系统(1024)的定时信息。
图10中描绘的示例方法还包括按照用于第二存储系统(1046)的定时信息(1050)设置(1012)存储系统(1024)中的时钟值。在图10中描绘的示例方法中,可以执行按照用于第二存储系统(1046)的定时信息(1050)设置(1012)存储系统(1024)中的时钟值,例如,作为协调两个存储系统(1024,1046)之间的时钟的努力的一部分。在这样的示例中,两个存储系统(1024,1046)可以被例如配置为将它们相应的时钟值设置为比该对存储系统(1024,1046)之间的最高时钟值高某个预定量的值,将它们相应的时钟值设置为等于该对存储系统(1024,1046)之间的最高时钟值的值,将它们相应的时钟值设置为通过对每个存储系统(1024,1046)中的相应的时钟值应用某个函数而生成的值,或者以某种其他方式。在图10中描绘的示例方法中,第二存储系统(1046)可以按照用于存储系统(1024)的定时信息(1048)类似地设置(1036)第二存储系统(1046)中的时钟值。
图10中描绘的示例方法还包括建立(1014)同步复制租期。在图10中描绘的示例方法中,例如,通过建立延长超过两个存储系统(1024,1046)之间的坐标时钟值达某个预定租期间隔的同步复制租期,通过建立延长超过与存储系统(1024,1046)中的一个相关联的未协调时钟值达某个预定租期间隔的同步复制租期,或者以某种其他方式,可以执行建立(1014)同步复制租期。在图10中描绘的示例方法中,第二存储系统(1046)可以按照用于存储系统(1024)的定时信息(1048)类似地设置(1036)第二存储系统(104)中的时钟值。
图10中描绘的示例方法还包括由存储系统(1024)检测(1016)同步复制租期已期满。在图10中描绘的示例方法中,可以例如通过存储系统(1024)将当前时钟值与租期有效的时间段相比较来执行检测(1016)同步复制租期已期满。考虑这样的示例:存储系统(1024,1046)协调时钟以将每个存储系统(1024,1046)内的时钟的值设置为5000毫秒的值,并且每个存储系统(1024,1046)被配置为建立(1038)延长超过其时钟值达2000毫秒的租期间隔的同步复制租期,使得当特定存储系统(1024,1046)内的时钟达到了超过10000毫秒的值时,用于每个存储系统(1024,1046)的同步复制租期期满。在这样的示例中,可以通过确定存储系统(1024)内的时钟达到了10001毫秒或更高的值来执行检测(1006)同步复制租期已期满。在图10中描绘的示例方法中,第二存储系统(1046)可以类似地检测(1040)同步复制租期已期满。
图10中描绘的示例方法还包括由存储系统(1024)尝试(1020)接管针对数据集的I/O处理(1022)。在图10中描绘的示例方法中,可以例如通过存储系统(1024)与调解器竞争来执行尝试(1020)接管针对数据集(1022)的I/O处理。如果存储系统(1024)成功地接管针对数据集的I/O处理(1022),则对数据集(1022)的所有访问将由存储系统(1024)服务直到可重新建立同步复制关系并且任何改变为止。在前一个同步复制关系期满之后发生的数据集(1022)的任何变化可被转移到并存留在第二存储系统上(1046)上为止。在图10中描绘的示例方法中,第二存储系统(1046)可以类似地尝试(1044)接管针对数据集(1022)的I/O处理。
图10中描绘的示例方法还包括由存储系统(1024)尝试(1018)重新建立同步复制关系。在图10中描绘的示例方法中,可以例如通过使用一个或多个重新建立消息来执行尝试(1018)重新建立同步复制关系。这样的重新建立消息可包括例如要为其重新建立同步复制关系的豆荚的标识、配置一个或多个数据通信链路所需的信息、更新的定时信息等。以这样的方式,存储系统(1024)可以以与最初创建同步复制关系的方式几乎相同的方式重新建立同步复制关系。在图10中描绘的示例方法中,第二存储系统(1046)可以类似地尝试(1042)重新建立同步复制关系。
为了进一步说明,图11阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统(1138,1140)同步的数据集(1142)的I/O操作服务的示例方法的流程图。尽管被不太详细地描绘,然而图11中描绘的存储系统(1138,1140)可以类似于上面参考图1A至1D、图2A至图2G、图3A和3B或其任何组合所描述的存储系统。事实上,图11中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图11中描绘的数据集(1142)可以例如作为特定卷的内容、作为卷的特定分片的内容或者作为一个或多个数据元素的任何其他合集被具体实现。可以跨越多个存储系统(1138,1140)使数据集(1142)同步,使得每个存储系统(1138,1140)保留数据集(1142)的本地副本。在本文描述的示例中,跨越存储系统(1138,1140)同步地复制(1142)这样的数据集(1142),使得可通过具有执行特性的存储系统(1138,1140)中的任一个来访问数据集(1142),使得集群中的任何一个存储系统不比集群中的任何其他存储系统基本上更优地操作,至少只要正在访问的集群和特定存储系统名义上在运行即可。在这样的系统中,应该对驻留在每个存储系统(1138,1140)上的数据集的副本进行对数据集(1142)的修改,使得访问任何存储系统(1138,1140)上的数据集(1142)将产生一致的结果。例如,发出到数据集的写入请求必须在所有存储系统(1138,1140)上被服务,或者在写入开始时名义上在运行并且通过完成写入保持名义上运行的存储系统(1138,1140)上都未被服务。同样地,必须在所有存储系统(1138,1140)上以相同的次序执行一些组的操作(例如,针对数据集内的相同位置的两个写入操作),或者必须像在下面更详细地描述的那样执行其他步骤,使得数据集在所有存储系统(1138,1140)上最终相同。不需要在确切相同的时间进行对数据集(1142)的修改,而是一些动作(例如,发出写入请求针对数据集的确认、使得能实现对以在两个存储系统上仍然尚未完成的写入请求作为目标的数据集内的位置的读取访问)可以被延迟,直到每个存储系统(1138,1140)上的数据集的副本已被修改为止。
在图11中描绘的示例方法中,将一个存储系统(1140)指定为“领导者”并且将另一存储系统(1138)指定为“跟随者”可以出于跨越存储系统同步地复制特定数据集的目的参考每个存储系统的相应关系。在这样的示例中,并且如将在下面更详细地描述的,领导者存储系统(1140)可以负责执行传入I/O操作的某种处理并且将这样的信息传递到跟随者存储系统(1138)或者执行不是跟随者存储系统(1140)所要求的其他任务。领导者存储系统(1140)可以负责针对所有传入I/O操作执行不是跟随者存储系统(1138)所要求的任务,或者可替代地,领导者-跟随者关系可以特定于仅由任何一个存储系统接收到的I/O操作的子集。例如,领导者-跟随者关系可以特定于针对第一卷、第一组卷、第一组逻辑地址、第一组物理地址或某个其他逻辑或物理描绘器的I/O操作。以这样的方式,第一存储系统可以用作针对第一组卷(或其他描绘器)的I/O操作的领导者存储系统,然而第二存储系统可以用作针对第二组卷(或其他描绘器)的I/O操作的领导者存储系统。图11中描绘的示例方法描绘了响应于由领导者存储系统(1140)接收到要修改数据集(1142)的请求(1104)而发生使多个存储系统(1138,1140)同步的实施例,但是也可以响应于由跟随者存储系统(1138)接收到要修改数据集(1142)的请求(1104)而执行使多个存储系统(1138,1140)同步,如将在下面更详细地描述的。
图11中描绘的示例方法包括由领导者存储系统(1140)接收(1106)要修改数据集(1142)的请求(1104)。要修改数据集(1142)的请求(1104)可以例如作为要将数据写入到存储系统(1140)内的包含被包括在数据集(1142)中的数据的位置的请求、作为要将数据写入到包含被包括在数据集(1142)中的数据的卷的请求、作为要取数据集(1142)的快照的请求、作为虚拟范围副本、作为基本上表示数据集(1142)中的数据的某个部分的删除的UNMAP操作、作为数据集(1142)的修改变换(而不是数据集内的数据的一部分的变化)或者作为导致被包括在数据集(1142)中的数据的某个部分的变化的某个其他操作被具体实现。在图11中描绘的示例方法中,要修改数据集(1142)的请求(1104)由主机(1102)发出,所述主机(1102)可以例如作为正在虚拟机上执行的应用、作为正在连接到存储系统(1140)的计算设备上执行的应用或者作为被配置为访问存储系统(1140)的某个其他实体被具体实现。
图11中描绘的示例方法还包括由领导者存储系统(1140)生成(1108)描述对数据集(1142)的修改的信息(1110)。例如,通过确定排序与进行中的任何其他操作的关系、通过确定重叠操作的适当结果(例如,用于修改相同的存储位置的两个请求的适当结果)、计算诸如跨越豆荚的所有成员(例如,同步地复制数据集所跨越的所有存储系统)的元数据的公共元素的任何分布式状态变化等,领导者存储系统(1140)可以生成(1108)描述对数据集(1142)的修改的信息(1110)。描述对数据集(1142)的修改的信息(1110)可以例如作为用于描述将由存储系统执行的I/O操作的系统级信息被具体实现。领导者存储系统(1140)可以通过处理要修改数据集(1142)的请求(1104)来生成(1108)描述对数据集(1142)的修改的信息(1110)刚好足以想出应该发生什么以便为要修改数据集(1142)的请求(1104)服务。例如,领导者存储系统(1140)可以确定是否要求要修改数据集(1142)的请求(1104)相对于其他要修改数据集(1142)的请求的执行的某种排序,或者必须像在下面更详细地描述的那样进行一些其他步骤,以在每个存储系统(1138,1140)上产生等效的结果。
考虑要修改数据集(1142)的请求(1104)被具体实现为要将块从数据集(1142)中的第一地址范围拷贝到数据集(1142)中的第二地址范围的请求的示例。在这样的示例中,假定三个其他写入操作(写入A、写入B、写入C)针对数据集(1142)中的第一地址范围。在这样的示例中,如果领导者存储系统(1140)在将块从数据集(1142)中的第一地址范围拷贝到数据集(1142)中的第二地址范围之前为写入A和写入B服务(但是不为写入C服务),则跟随存储系统(1138)还必须在将块从数据集(1142)中的第一地址范围拷贝到数据集(1142)中的第二地址范围之前为写入A和写入B服务(但是不为写入C服务)以便产生一致的结果。因此,当领导者存储系统(1140)生成(1108)描述对数据集(1142)的修改的信息(1110)时,在此示例中,领导者存储系统(1140)能生成标识在跟随者存储系统(1138)可处理要修改数据集(1142)的请求(1104)之前必须完成的其他操作的信息(例如,用于写入A和写入B的序列号)。
考虑两个请求(例如,写入A和写入B)针对数据集(1142)的重叠部分的附加示例。在这样的示例中,如果领导者存储系统(1140)为写入A服务并且随后为写入B服务,同时跟随者存储系统(1138)为写入B服务并且随后为写入A服务,则数据集(1142)跨越两个存储系统(1138,1140)将不是一致的。因此,当领导者存储系统(1140)生成(1108)描述对数据集(1142)的修改的信息(1110)时,在此示例中,领导者存储系统(1140)能生成标识应该按照来执行请求的次序的信息(例如,用于写入A和写入B的序列号)。可替代地,不是生成要求来自每个存储系统(1138,1140)的中间行为的描述对数据集(1142)的修改的信息(1110),而是领导者存储系统(1140)可以生成(1108)描述对数据集(1142)的修改的信息(1110),其包括标识两个请求的适当结果的信息。例如,如果写入B逻辑上跟随写入A(并且与写入A重叠),则最终结果必须是数据集(1142)包括写入B的与写入A重叠的部分,而不是包括写入A的与写入B重叠的部分。能通过将结果合并在存储器中并且将这样的合并的结果写入到数据集(1142)来方便这样的结果,而不是严格地要求特定存储系统(1138,1140)执行写入A并且然后随后执行写入B。读者应领会的是,更微妙的情况涉及快照和虚拟地址范围拷贝。
读者应进一步领会的是,必须在可确认操作之前将任何操作的正确结果提交给可恢复的点。但是,可一起提交多个操作,或者如果恢复会确保正确性则可部分地提交操作。例如,快照能在本地与记录的对A和B的期望写入的依赖性一起提交,但是A或B可能尚未本身提交。如果不能从另一阵列恢复遗漏的I/O,则不能确认快照,并且恢复可能结束撤销快照。另外,如果写入B与写入A重叠,则领导者可以将B“排序”为在A之后,但是实际上能丢弃A并且对写入A的操作然后将简单地等待B。写入A、B、C和D加上A、B和C、D之间的快照能一起提交和/或确认一些或所有部分,只要恢复不会跨越阵列产生快照不一致即可并且只要确认不会在较早的操作一直持续到被保证为可恢复的点之前完成稍后的操作即可。
图11中描绘的示例方法还包括从领导者存储系统(1140)向跟随者存储系统(1138)发送(1112)描述对数据集(1142)的修改的信息(1110)。可以例如通过领导者存储系统(1140)向跟随者存储系统(1138)发送一个或多个消息来执行从领导者存储系统(1140)向跟随者存储系统(1138)发送(1112)描述对数据集(1142)的修改的信息(1110)。领导者存储系统(1140)还可以在相同的消息中或者在一个或多个不同的消息中发送用于要修改数据集(1142)的请求(1104)的I/O净荷(1114)。例如,当要修改数据集(1142)的请求(1104)被具体实现为要将数据写入到数据集(1142)的请求时,可以将I/O净荷(1114)例如具体实现为将被写入到跟随者存储系统(1138)内的存储装置的数据。在这样的示例中,因为要修改数据集(1142)的请求(1104)被领导者存储系统(1140)接收(1106),所以跟随者存储系统(1138)尚未接收到与要修改数据集(1142)的请求(1104)相关联的I/O净荷(1114)。在图11中描绘的示例方法中,可以经由将领导者存储系统(1140)耦合到跟随者存储系统(1138)的一个或多个数据通信网络、经由将领导者存储系统(1140)耦合到跟随者存储系统(1138)的一个或多个专用数据通信链路(例如,用于发送I/O净荷的第一链路和用于发送描述对数据集的修改的信息的第二链路)或者经由某种其他机制将描述对数据集(1142)的修改的信息(1110)以及与要修改数据集(1142)的请求(1104)相关联的I/O净荷(1114)从领导者存储系统(1140)发送(1112)到跟随者存储系统(1138)。
图11中描绘的示例方法还包括由跟随者存储系统(1138)接收(1116)描述对数据集(1142)的修改的信息(1110)。跟随者存储系统(1138)可以例如经由从领导者存储系统(1140)发送到跟随者存储系统(1138)的一个或多个消息来从领导者存储系统(1140)接收(1116)描述对数据集(1142)的修改的的信息(1110)和I/O净荷(1114)。可以经由两个存储系统(1138,1140)之间的一个或多个专用数据通信链路、通过领导者存储系统(1140)使用RDMA或类似的机制来将消息写入到跟随者存储系统(1138)上的预定存储器位置(例如,队列的位置)或者以其他方式将一个或多个消息从领导者存储系统(1140)发送到跟随者存储系统(1138)。
在一个实施例中,跟随者存储系统(1138)可以通过使用SCSI请求(从发送方到接收方的写入或从接收方到发送方的读取)作为通信机制来从领导者存储系统(1140)接收(1116)描述对数据集(1142)的修改的信息(1110)和I/O净荷(1114)。在这样的实施例中,SCSI写入请求用于对打算被发送并且可以通过专门地配置的SCSI网络或者通过任何其他商定的寻址机制被递送到特殊伪设备的消息(其包括无论什么数据和元数据)进行编码。或者,另一方面,模型可同样使用特殊设备、专门地配置的SCSI网络或其他商定的机制来从接收方向发送方发出一组开放SCSI读取请求。包括数据和元数据的编码信息将作为对这些开放SCSI请求中的一个或多个的响应被递送到接收方。可通过光纤通道SCSI网络来实现这样的模型,所述光纤通道SCSI网络常常作为数据中心之间的“暗光纤”存储网络基础设施被部署。这样的模型还允许将相同的网络线路用于主机到远程阵列多路径和批量阵列到阵列通信。
图11中描绘的示例方法还包括由跟随者存储系统(1138)处理(1118)要修改数据集(1142)的请求(1104)。在图11中描绘的示例方法中,跟随者存储系统(1138)可以通过按照描述对数据集(1142)的修改的信息(1110)以及从领导者存储系统(1140)接收到的I/O净荷(1114)修改被包括在跟随者存储系统(1138)中的一个或多个存储设备(例如,NVRAM设备、SSD、HDD)的内容来处理(1118)要修改数据集(1142)的请求(1104)。考虑这样的示例:要修改数据集(1142)的请求(1104)被具体实现为针对被包括在数据集(1142)中的卷的写入操作并且描述对数据集(1142)的修改的信息(1110)指示仅可在先前发出的写入操作已被处理之后执行写入操作。在这样的示例中,可以通过跟随者存储系统(1138)首先验证先前发出的写入操作已在跟随者存储系统(1138)上被处理并且随后将与写入操作相关联的I/O净荷(1114)写入到被包括在跟随者存储系统(1138)中的一个或多个存储设备来执行处理(1118)要修改数据集(1142)的请求(1104)。在这样的示例中,例如,当I/O净荷(1114)已被提交给跟随者存储系统(1138)内的持久存储装置时,可以认为要修改数据集(1142)的请求(1104)已完成并被成功地处理。
图11中描绘的示例方法还包括由跟随者存储系统(1138)向领导者存储系统(1140)确认(1120)要修改数据集(1142)的请求(1104)的完成。在图11中描绘的示例方法中,由跟随者存储系统(1138)向领导者存储系统(1140)确认(1120)要修改数据集(1142)的请求(1104)的完成可以通过跟随者存储系统(1138)向领导者存储系统(1140)发送确认(1122)消息来执行。这样的消息可以包括例如标识已完成的要修改数据集(1142)的特定请求(1104)的信息以及在由跟随者存储系统(1138)确认(1120)要修改数据集(1142)的请求(1104)的完成时有用的任何附加信息。在图11中描绘的示例方法中,通过跟随者存储系统(1138)向领导者存储系统(1140)发出确认(1122)消息来图示确认(1120)要修改数据集(1142)的请求(1104)的完成。
图11中描绘的示例方法还包括由领导者存储系统(1140)处理(1124)要修改数据集(1142)的请求(1104)。在图11中描绘的示例方法中,领导者存储系统(1140)可以通过按照描述对数据集(1142)的修改的信息(1110)以及作为要修改数据集(1142)的请求(1104)的一部分接收到的I/O净荷(1114)修改被包括在领导者存储系统(1140)中的一个或多个存储设备(例如,NVRAM设备、SSD、HDD)的内容来处理(1124)请求(1104)以修改数据集(1142)。考虑这样的示例:要修改数据集(1142)的请求(1104)被具体实现为针对被包括在数据集(1142)中的卷的写入操作并且描述对数据集(1142)的修改的信息(1110)指示仅可在先前发出的写入操作已被处理之后执行写入操作。在这样的示例中,可以通过领导者存储系统(1140)首先验证先前发出的写入操作已被领导者存储系统处理(1140)并且随后将与写入操作相关联的I/O净荷(1114)写入到被包括在领导者存储系统(114)中的一个或多个存储设备来执行处理(1124)要修改数据集(1142)的请求(1104)。在这样的示例中,例如,当I/O净荷(1114)已被提交给领导者存储系统(1140)内的持久存储装置时,可以认为要修改数据集(1142)的请求(1104)已完成并被成功地处理。
图11中描绘的示例方法还包括从跟随者存储系统(1138)接收(1126)跟随者存储系统(1138)已处理要修改数据集(1142)的请求(1104)的指示。在此示例中,跟随者存储系统(1138)已处理要修改数据集(1142)的请求(1104)的指示被具体实现为从跟随者存储系统(1138)发送到领导者存储系统(1140)的确认(1122)消息。读者应领会的是,尽管上述的许多步骤被描绘和描述为以特定次序发生,然而实际上不要求特定次序。事实上,因为跟随者存储系统(1138)和领导者存储系统(1140)是独立存储系统,所以每个存储系统可以并行地执行上述的步骤中的一些。例如,跟随者存储系统(1138)可以接收(1116)描述对数据集(1142)的修改的信息(1110),处理(1118)要修改数据集(1142)的请求(1104),或者在领导者存储系统(1140)已处理(1124)要修改数据集(1142)的请求(1104)之前确认(1120)要修改数据集(1142)的请求(1104)的完成。可替代地,在跟随者存储系统(1138)已接收(1116)描述对数据集(1142)的修改的信息(1110)、处理(1118)要修改数据集(1142)的请求(1104)或者确认(1120)要修改数据集(1142)的请求(1104)的完成之前,领导者存储系统(1140)可能已处理(1124)要修改数据集(1142)的请求(1104)。
图11中描绘的示例方法还包括由领导者存储系统(1140)确认(1134)要修改数据集(1142)的请求(1104)的完成。在图11中描绘的示例方法中,可以通过使用从领导者存储系统(1140)发送到主机(1102)的一个或多个确认(1136)消息或者经由某种其他适当的机制来执行确认(1134)要修改数据集(1142)的请求(1104)的完成。在图11中描绘的示例方法中,领导者存储系统(1140)可以在确认(1134)要修改数据集(1142)的请求(1104)的完成之前确定(1128)要修改数据集(1142)的请求(1104)是否已被跟随者存储系统(1138)处理(1118)。例如,通过确定领导者存储系统(1140)已从跟随者存储系统(1138)接收到指示要修改数据集(1142)的请求(1104)已被跟随者存储系统(1138)处理(1118)的确认消息或其他消息,领导者存储系统(1140)可以确定(1128)要修改数据集(1142)的请求(1104)是否已被跟随者存储系统(1138)处理(1118)。在这样的示例中,如果领导者存储系统(1140)肯定地(1130)确定要修改数据集(1142)的请求(1104)已被跟随者存储系统(1138)处理(1118)并且还被领导者存储系统(1140)处理(1124),则领导者存储系统(1140)可以通过向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成而继续进行。然而,如果领导者存储系统(1140)确定要修改数据集(1142)的请求(1104)尚未(1132)被跟随者存储系统(1138)处理(1118)或者尚未被领导者存储系统(1140)处理(1124),则领导者存储系统(1140)可以仍然不向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成,因为当已在同步地复制数据集(1142)所跨越的所有存储系统(1138,1140)上成功地处理了要修改数据集(1142)的请求(1104)时,领导者存储系统(1140)可以仅向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成。
读者应领会的是,在图11中描绘的示例方法中,从领导者存储系统(1140)向跟随者存储系统(1138)发送(1112)描述对数据集(1142)的修改的信息(1110)并且由跟随者存储系统(1138)向领导者存储系统(1140)确认(1120)要修改数据集(1142)的请求(1104)的完成可以使用单个往返消息传送来执行。可以例如通过使用光纤通道作为数据互连来使用单个往返消息传送。通常,SCSI协议与光纤通道一起使用。通常在数据中心之间提供这样的互连,因为可以构建一些较旧的复制技术以基本上通过光纤通道网络将数据作为SCSI事务来复制。另外,历史上光纤通道SCSI基础设施与基于以太网和TCP/IP的网络相比具有更少的开销和更低的等待时间。进一步地,当数据中心使用光纤通道在内部连接到块存储阵列时,光纤通道网络可以被伸展到其他数据中心,使得当本地存储阵列失效时,一个数据中心的主机可切换到访问远程数据中心的存储阵列。
即使SCSI通常是为了与用于在面向块的卷中存储和取回数据(或者用于磁带)的块存储协议一起使用而设计的,它也能被用作一般通信机制。例如,SCSI READ或SCSIWRITE能用于在配对的存储系统中的存储控制器之间递送或者取回消息数据。SCSI WRITE的典型的实施方式要求两次消息往返:SCSI启动器发送描述SCSI WRITE操作的SCSI CDB,SCSI目标接收该CDB并且SCSI目标向SCSI启动器发送“准备好接收”消息。SCSI启动器然后向SCSI目标发送数据,并且当SCSI WRITE完成时,SCSI目标用成功完成对SCSI启动器做出响应。另一方面,SCSI READ请求要求仅一次往返:SCSI启动器发送描述SCSI READ操作的SCSI CDB,SCSI目标接收该CDB并且用数据然后成功完成进行响应。结果,在距离上,SCSIREAD像SCSI WRITE一样引发距离相关等待时间的一半。由于这个,数据通信接收方使用SCSI READ请求来接收消息比消息的发送方使用SCSI WRITE请求来发送数据可能更快。使用SCSI READ简单地要求消息发送方作为SCSI目标操作,并且要求消息接收方作为SCSI启动器操作。消息接收方可以向任何消息发送方发送一定数量的SCSI CDB READ请求,并且当消息数据可用时消息发送方将对未完成的CDB READ请求中的一个做出响应。由于SCSI子系统在READ请求长时间(例如,10秒)未完成的情况下可能超时,所以即使没有要发送的消息数据,也应该在几秒钟内对READ请求做出响应。
如来自国际信息技术标准委员会的T10技术委员会的SCSI流命令标准中所描述的SCSI磁带请求支持可变响应数据,其可能更灵活以便返回可变大小的消息数据。SCSI标准还支持用于SCSI WRITE请求的立即模式,这能允许单次往返SCSI WRITE命令。读者应领会的是,在下面描述的许多实施例还利用单次往返消息传送。
为了进一步说明,图12阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统(1138,1140,1150)同步的数据集(1142)的I/O操作服务的附加示例方法的流程图。尽管被不太详细地描绘,然而图11中描绘的存储系统(1138,1140,1150)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图11中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。图12中描绘的示例方法类似于图11中描绘的示例方法,因为图12中描绘的示例方法还包括:由领导者存储系统(1140)接收(1106)要修改数据集(1142)的请求(1104);由领导者存储系统(1140)生成(1108)描述对数据集(1142)的修改的信息(1110);从领导者存储系统(1140)向跟随者存储系统(1138)发送(1112)描述对数据集(1142)的修改的信息(1110);由跟随者存储系统(1138)接收(1116)描述对数据集(1142)的修改的信息(1110);由跟随者存储系统(1138)处理(1118)要修改数据集(1142)的请求(1104);由跟随者存储系统(1138)向领导者存储系统(1140)确认(1120)要修改数据集(1142)的请求(1104)的完成;由领导者存储系统(1140)处理(1124)要修改数据集(1142)的请求(1104);以及由领导者存储系统(1140)确认(1134)要修改数据集(1142)的请求(1104)的完成。
然而,图12中描绘的示例方法与图11中描绘的示例方法不同,因为图12中描绘的示例方法描绘了跨越三个存储系统同步地复制数据集(1142)的实施例,其中一个存储系统是领导者存储系统(1140)并且剩余的存储系统是跟随者存储系统(1138,1150)。在这样的示例中,附加跟随者存储系统(1150)执行与图11中描绘的跟随者存储系统(1138)相同的许多步骤,因为附加跟随者存储系统(1150)可:从领导者存储系统(1140)接收(1142)描述对数据集(1142)的修改的信息(1110);按照描述对数据集(1142)的修改的信息(1110)处理(1118)要修改数据集(1142)的请求(1104);通过使用确认(1148)消息或其他适当的机制来向领导者存储系统(1140)确认(1146)要修改数据集(1142)的请求(1104)的完成;等等。
在图12中描绘的示例方法中,描述对数据集(1142)的修改的信息(1110)可包括用于要修改数据集(1142)的请求(1104)的排序信息(1152)。在图12中描绘的示例方法中,用于要修改数据集(1142)的请求(1104)的排序信息(1152)可表示操作(例如,要修改数据集的请求)之间的关系以及由领导者存储系统(1140)描述为单独的要修改数据集的请求之间以及可能要修改数据集的请求与各种元数据变化之间的一组相互依赖性的公共元数据更新的描述。这些相互依赖性可被描述为一个要修改数据集的请求以某种方式取决于的一组前体,作为必须为真以便该要修改数据集的请求完成的谓词。
队列谓词是必须为真以便该要修改数据集的请求完成的谓词的一个示例。队列谓词可规定特定要修改数据集的请求直到前一个要修改数据集的请求完成才能完成。队列谓词可被例如用于重叠写入类型操作。在这样的示例中,领导者存储系统(1140)可声明第二写入类型操作逻辑上跟随第一这样的操作,所以第二写入类型操作直到第一写入类型操作完成才能完成。取决于实现方式,直到确保了第一这样的写入类型操作是持久的第二写入类型操作才可以甚至变得持久(两个操作可一起变得持久)。队列谓词还能被用于快照操作和虚拟块范围拷贝操作,通过声明已知的一组不完整前体(例如,一组写入类型)操作必须在快照可完成之前完成,并且随着进一步操作被标识为跟随快照(在快照完成之前),可基于快照操作它本身完成来预测这些操作中的每一个。此谓词还能指示那些跟随操作适用于卷的快照后映像而不是被包括在快照中。
能被用于快照的替代谓词是为了向每一快照指派标识符,并且使可被包括在特定快照中的所有修改操作与该标识符相关联。然后,当所有包括的修改操作完成时快照可完成。这可通过计数谓词来做。同步地复制数据集所跨越的每个存储系统可实现它自己的与自最后快照以来或者自某个其他相对不频繁的操作以来的时间相关联的计数(或者对于实现多个领导者存储系统的实施例,其中这些操作由特定领导者存储系统组织,可由该领导者存储系统为它控制的数据集的各部分建立计数)。快照操作它本身然后可包括计数谓词,所述计数谓词取决于正在接收并且在快照它本身可变得持久或者被发信号通知为完成的操作的数量。给定依赖于快照的队列谓词,或者快照标识可被用作应该从快照中排除修改操作的指示,应该跟随快照(在快照完成之前)的修改操作可被延迟。虚拟块范围拷贝(SCSIEXTENDED COPY或类似的操作)能使用队列谓词,或者它们能使用计数谓词和快照或类似的标识符。利用计数谓词和快照或虚拟副本标识符,即使拷贝操作仅涵盖一个或两个卷的两个小区域,每个虚拟块范围拷贝也可能建立新的虚拟快照或虚拟副本标识符。在上述的示例中,要修改数据集(1142)的请求(1104)可包括要取数据集(1142)的快照的请求并且用于要修改数据集(1142)的请求(1104)的排序信息(1152)因此可包括在取数据集(1142)的快照之前必须完成的一个或多个其他要修改数据集的请求的标识。
在图12中描绘的示例方法中,描述对数据集(1142)的修改的信息(1110)可包括与要修改数据集(1142)的请求(1104)相关联的公共元数据信息(1154)。与要修改数据集(1142)的请求(1104)相关联的公共元数据信息(1154)可以用于确保与数据集(1142)相关联的公共元数据在同步地复制数据集(1142)所跨越的存储系统(1138,1140,1150)中。此上下文中的公共元数据可以例如作为除通过一个或多个请求(例如,由主机发出的一个或多个写入请求)存储到数据集(1142)中的内容以外的任何数据被具体实现。公共元数据可以包括同步复制实施方式以某种方式保持跨越同步地复制数据集(1142)所跨越的存储系统(1138,1140,1150)一致的数据,特别是在该公共元数据涉及所存储的内容如何被管理、恢复、重新同步、快照或者异步地复制的情况下。读者应领会的是,两个或更多个修改操作可以取决于相同的公共元数据,其中修改操作本身的排序是不必要的,但是公共元数据一次而不是两次的一致应用是必要的。用于处理对公共元数据的多重依赖性的一种方式是在从领导者存储系统实例化和描述的单独的操作中定义元数据。然后,取决于该公共元数据的两个修改操作可被给予取决于该修改操作的队列谓词。用于处理对公共元数据的多重依赖性的另一方式是使公共元数据与两个操作中的第一个相关联,并且使第二操作取决于第一操作。变型使第二操作变得仅依赖于第一操作的公共元数据方面,使得在可处理第二操作之前必须使第一操作的仅那个部分变得持久。处理对公共元数据的多重依赖性的又一种式是将公共元数据包括在取决于该公共元数据的所有操作描述中。这在应用公共元数据可以是幂等的情况下工作得很好,例如,简单地通过将标识符附加到公共元数据。如果该标识符已经被处理则可忽视它。在一些情况下,标识符可能与公共元数据的各部分相关联。
在图12中描绘的示例方法中,接收(1126)跟随者存储系统已处理要修改数据集(1142)的请求(1104)的指示可包括从跟随者存储系统(1138,1150)中的每一个接收(1156)跟随者存储系统(1138,1150)已处理要修改数据集(1142)的请求(1104)的指示。在此示例中,每个跟随者存储系统(1138,1150)已处理要修改数据集(1142)的请求(1104)的指示被具体实现为从每个跟随者存储系统(1138,1150)发送到领导者存储系统(1140)的不同的确认(1122,1148)消息。读者应领会的是,尽管上述的许多步骤被描绘和描述为以特定次序发生,然而实际上不要求特定次序。事实上,因为跟随者存储系统(1138,1150)和领导者存储系统(1140)是独立存储系统,所以每个存储系统可以并行地执行上述的步骤中的一些。例如,跟随者存储系统(1138,1150)中的一个或多个可以接收(1116,1142)描述对数据集(1142)的修改的信息(1110),处理(1118,1144)要修改数据集(1142)的请求(1104),或者在领导者存储系统(1140)已处理(1124)要修改数据集(1142)的请求(1104)之前确认(1120,1146)要修改数据集(1142)的请求(1104)的完成。可替代地,在跟随者存储系统(1138,1150)中的一个或多个已接收(1116,1142)描述对数据集(1142)的修改的信息(1110)、处理(1118,1144)要修改数据集(1142)的请求(1104)或者确认(1120,1146)要修改数据集(1142)的请求(1104)的完成之前,领导者存储系统(1140)可能已处理(1124)要修改数据集(1142)的请求(1104)。
图12中描绘的示例方法还包括在确认(1134)要修改数据集(1142)的请求(1104)的完成之前由领导者存储系统(1140)确定(1158)要修改数据集(1142)的请求(1104)是否已被跟随者存储系统(1138,1150)中的每一个处理(1118,1144)。例如,通过确定领导者存储系统(1140)是否已从跟随者存储系统(1138,1150)中的每一个接收到指示要修改数据集(1142)的请求(1104)已被跟随者存储系统(1138,1150)中的每一个处理(1118,1144)的确认消息或其他消息,领导者存储系统(1140)可以确定(1158)要修改数据集(1142)的请求(1104)是否已被跟随者存储系统(1138,1150)中的每一个处理(1118,1144)。在这样的示例中,如果领导者存储系统(1140)肯定地(1162)确定要修改数据集(1142)的请求(1104)已被跟随者存储系统(1138,1150)中的每一个处理(1118,1144)并且同样被领导者存储系统(1140)处理(1124),则领导者存储系统(1140)可以通过向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成来继续进行。然而。如果领导者存储系统(1140)确定要修改数据集(1142)的请求(1104)尚未(1160)被跟随者存储系统(1138,1150)中的至少一个处理(1118,1144)或者尚未被领导者存储系统(1140)处理(1124),则领导者存储系统(1140)可以仍然不向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成,因为当已在同步地复制数据集(1142)所跨越的所有存储系统(1138,1140,1150)上成功地处理了要修改数据集(1142)的请求(1104)时,领导者存储系统(1140)可以仅向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成。
读者应领会的是,尽管图12中描绘的示例方法描绘了跨越三个存储系统同步地复制数据集(1142)的实施例,其中一个存储系统是领导者存储系统(1140)并且剩余的存储系统是跟随者存储系统(1138,1150),然而其他实施例可以甚至包括附加存储系统。在这样的其他实施例中,附加跟随者存储系统可以以与图12中描绘的跟随者存储系统(1138,1150)相同的方式操作。
为了进一步说明,图13阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统(1138,1140)同步的数据集(1142)的I/O操作服务的示例方法的流程图。尽管被不太详细地描绘,然而图13中描绘的存储系统(1138,1140)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图13中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图13中描绘的示例方法包括由跟随者存储系统(1138)接收(1302)要修改数据集(1142)的请求(1104)。要修改数据集(1142)的请求(1104)可以例如作为要将数据写入到存储系统(1138)内的包含被包括在数据集(1142)中的数据的位置的请求、作为要将数据写入到包含被包括在数据集(1142)中的数据的卷的请求或者作为导致被包括在数据集(1142)中的数据的某个部分的变化的某个其他操作被具体实现。在图13中描绘的示例方法中,要修改数据集(1142)的请求(1104)由主机(1102)发出,所述主机(1102)可以例如作为正在虚拟机上执行的应用、作为正在连接到存储系统(1138)的计算设备上执行的应用或者作为被配置为访问存储系统(1138)的某个其他实体被具体实现。
图13中描绘的示例方法还包括从跟随者存储系统(1138)向领导者存储系统(1140)发送(1304)要修改数据集(1142)的请求(1104)的逻辑描述(1306)。在图13中描绘的示例方法中,要修改数据集(1142)的请求(1104)的逻辑描述(1306)可以被以由领导者存储系统(1140)理解的方式格式化并且可以包含描述在要修改数据集(1142)的请求(1104)中请求的操作的类型(例如,读取类型操作、快照类型操作)的信息、描述I/O净荷正被放置在的位置的信息、描述I/O净荷的大小的信息或某种其他信息。在替代实施例中,跟随者存储系统(1138)可以将要修改数据集(1142)的请求(1104)的某个部分(包括全部)简单地转发到领导者存储系统(1140)。
图13中描绘的示例方法还包括由领导者存储系统(1140)生成(1308)描述对数据集(1142)的修改的信息(1310)。例如,通过确定排序与进行中的任何其他操作的关系、计算诸如跨越豆荚的所有成员(例如,同步地复制数据集所跨越的所有存储系统)的元数据的公共元素的任何分布式状态变化等等,领导者存储系统(1140)可以生成(1308)描述对数据集(1142)的修改的信息(1310)。描述对数据集(1142)的修改的信息(1310)可以例如作为用于描述将由存储系统执行的I/O操作的系统级信息被具体实现。领导者存储系统(1140)可以通过处理要修改数据集(1142)的请求(1104)来生成(1308)描述对数据集(1142)的修改的信息(1310)刚好足以想出应该发生什么以便为要修改数据集(1142)的请求(1104)服务。例如,领导者存储系统(1140)可以确定是否要求要修改数据集(1142)的请求(1104)相对于其他要修改数据集(1142)的请求的执行的某种排序以在每个存储系统(1138,1140)上产生等效的结果。
考虑要修改数据集(1142)的请求(1104)被具体实现为要将块从数据集(1142)中的第一地址范围拷贝到数据集(1142)中的第二地址范围的请求的示例。在这样的示例中,假定三个其他写入操作(写入A、写入B、写入C)针对数据集(1142)中的第一地址范围。在这样的示例中,如果领导者存储系统(1140)在将块从数据集(1142)中的第一地址范围拷贝到数据集(1142)中的第二地址范围之前对写入A和写入B进行排序(但是不对写入C进行排序),则跟随者存储系统(1138)还必须在将块从数据集(1142)中的第一地址范围拷贝到数据集(1142)中的第二地址范围之前对写入A和写入B进行(但是不对写入C进行排序)以便产生一致的结果。因此,当领导者存储系统(1140)生成(1308)描述对数据集(1142)的修改的信息(1310)时,在此示例中,领导者存储系统(1140)能生成标识在跟随者存储系统(1138)可处理要修改数据集(1142)的请求(1104)之前必须被排序的其他操作的信息(例如,用于写入A和写入B的序列号)。
读者应进一步领会的是,必须在可确认操作之前将任何操作的正确结果提交给可恢复的点。但是,可一起提交多个操作,或者如果恢复会确保正确性则可部分地提交操作。例如,快照能在本地与记录的对A和B的期望写入的依赖性一起提交,但是A或B可能尚未本身提交。如果不能从另一阵列恢复遗漏的I/O,则不能确认快照,并且恢复可能结束撤销快照。另外,如果写入B与写入A重叠,则领导者可以将B“排序”为在A之后,但是实际上能丢弃A并且对写入A的操作然后将简单地等待B。写入A、B、C和D加上A、B和C、D之间的快照能一起提交和/或确认一些或所有部分,只要恢复不会跨越阵列产生快照不一致即可并且只要确认不会在较早的操作一直持续到被保证为可恢复的点之前完成稍后的操作即可。
图13中描绘的示例方法还包括从领导者存储系统(1140)向跟随者存储系统(1338)发送(1312)描述对数据集(1142)的修改的信息(1310)。可以例如通过领导者存储系统(1140)向跟随者存储系统(1138)发送一个或多个消息来执行从领导者存储系统(1140)向跟随者存储系统(1138)发送(1312)描述对数据集(1142)的修改的信息(1310)。然而,鉴于跟随者存储系统(1138)是要修改数据集(1142)的请求(1104)的原始接收者的事实,领导者存储系统(1140)可能不需要发送用于要修改数据集(1142)的请求(1104)的I/O净荷。因此,跟随者存储系统(1138)可以从要修改数据集(1142)的请求(1104)提取I/O净荷,跟随者存储系统(1138)可以接收I/O净荷作为与要修改数据集(1142)的请求(1104)相关联的一个或多个其他消息的一部分,跟随者存储系统(1138)可以能够在I/O净荷可能已由主机(1104)存储在已知位置(例如,经由RDMA或类似RDMA的访问被访问的跟随者存储系统(1138)中的缓冲器)中时或者以某种其他方式访问I/O净荷。
图13中描绘的示例方法还包括由领导者存储系统(1140)处理(1318)要修改数据集(1142)的请求(1104)。在图13中描绘的示例方法中,例如,通过按照描述对数据集(1142)的修改的信息(1110)以及从跟随者存储系统(1138)接收的的I/O净荷修改被包括在领导者存储系统(1140)中的一个或多个存储设备(例如,NVRAM设备、SSD、HDD)的内容,领导者存储系统(1140)可以处理(1318)要修改数据集(1142)的请求(1104)。考虑这样的示例:要修改数据集(1142)的请求(1104)被具体实现为针对被包括在数据集(1142)中的卷的写入操作并且描述对数据集(1142)的修改的信息(1110)指示仅看在先前发出的写入操作已被处理之后执行写入操作。在这样的示例中,可以通过领导者存储系统(1140)首先验证先前发出的写入操作已在领导者存储系统(1140)上被处理并且随后将与写入操作相关联的I/O净荷写入到被包括在领导者存储系统(1140)中的一个或多个存储设备来执行处理(1318)要修改数据集(1142)的请求(1104)。在这样的示例中,例如,当I/O净荷已被提交给领导者存储系统(1140)内的持久存储装置时,可以认为要修改数据集(1142)的请求(1104)已完成并被成功地处理。
图13中描绘的示例方法还包括由领导者存储系统(1140)向跟随者存储系统(1138)确认(1320)要修改数据集(1142)的请求(1104)的完成。在图13中描绘的示例方法中,领导者存储系统(1140)可以例如通过使用从领导者存储系统(1140)发送到跟随者存储系统(1138)的一个或多个确认(1322)消息或者经由某种其他适当的机制来确认(1320)要修改数据集(1142)的请求(1104)的完成。
图13中描绘的示例方法还包括从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1310)。跟随者存储系统(1138)可以例如经由从领导者存储系统(1140)发送到跟随者存储系统(1138)发送的一个或多个消息来从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1110)。可以经由两个存储系统(1138,1140)之间的一个或多个专用数据通信链路、通过领导者存储系统(1140)使用RDMA或类似的机制来将消息写入到跟随者存储系统(1138)上的预定存储器位置(例如,队列的位置)或者以其他方式将一个或多个消息从领导者存储系统(1140)发送到跟随者存储系统(1138)。读者应领会的是,在图13中描绘的示例方法中,然而,领导者存储系统(1140)不需要将与要修改数据集(1142)的请求(1104)相关联的I/O净荷发送到跟随者存储系统(1138),因为跟随者存储系统(1138)可从由跟随者存储系统(1138)接收到的要修改数据集(1142)的请求(1104)中提取这样的I/O净荷,跟随者存储系统(1138)可从自主机(1102)接收到的一个或多个其他消息中提取这样的I/O净荷,或者跟随者存储系统(1138)可借助于如下事实以某种其他方式获得I/O净荷:跟随者存储系统(1138)是由主机(1102)发出的要修改数据集(1142)的请求(1104)的目标。
在一个实施例中,跟随者存储系统(1138)可以通过使用SCSI请求(从发送方到接收方的写入,或从接收方到发送方的读取)作为通信机制来从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1110)。在这样的实施例中,SCSI写入请求用于对我们打算发送并且可以通过专门地配置的SCSI网络或者通过任何其他商定的寻址机制被递送到特殊伪设备的信息(其包括无论什么数据和元数据)进行编码。或者,另一方面,模型可同样使用特殊设备、专门地配置的SCSI网络或其他商定的机制来从接收方向发送方发出一组开放SCSI读取请求。包括数据和元数据的编码信息将作为对这些开放SCSI请求中的一个或多个的响应被递送到接收方。可通过光纤通道SCSI网络来实现这样的模型,所述光纤通道SCSI网络常常作为数据中心之间的“暗光纤”存储网络基础设施被部署。这样的模型还允许将相同的网络线路用于主机到远程阵列多路径和批量阵列到阵列通信。
图13中描绘的示例方法还包括由跟随者存储系统(1138)处理(1316)要修改数据集(1142)的请求(1104)。在图13中描绘的示例方法中,跟随者存储系统(1138)可以通过按照描述对数据集(1142)的修改的信息(1110)修改被包括在跟随者存储系统(1138)中的一个或多个存储设备(例如,NVRAM设备、SSD、HDD)的内容来处理(1316)要修改数据集(1142)的请求(1104)。考虑这样的示例:要修改数据集(1142)的请求(1104)被具体实现为针对被包括在数据集(1142)中的卷的写入操作并且描述对数据集(1142)的修改的信息(1110)指示仅可在先前发出的写入操作已被处理之后执行写入操作。在这样的示例中,可以通过跟随者存储系统(1138)首先验证先前发出的写入操作已在跟随者存储系统(1138)上被处理并且随后将与写入操作相关联的I/O净荷写入到被包括在跟随者存储系统(1138)中的一个或多个存储设备来执行处理(1316)要修改数据集(1142)的请求(1104)。在这样的示例中,例如,当与要修改数据集(1142)的请求(1104)相关联的I/O净荷已被提交给跟随者存储系统(1138)内的持久存储装置时,可以认为要修改数据集(1142)的请求(1104)已完成并被成功地处理。
图13中描绘的示例方法还包括从领导者存储系统(1140)接收(1324)领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示。在此示例中,领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示被具体实现为从领导者存储系统(1140)发送到跟随者存储系统(1138)的确认(1322)消息。读者应领会的是,尽管上述的许多步骤被描绘和描述为以特定次序发生,然而实际上不要求特定次序。事实上,因为跟随者存储系统(1138)和领导者存储系统(1140)是独立存储系统,所以每个存储系统可以并行地执行上述的步骤中的一些。例如,跟随者存储系统(1138)可以在处理(1316)要修改数据集(1142)的请求(1104)之前从领导者存储系统(1140)接收(1324)领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示。同样地,跟随者存储系统(1138)可以在从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1110)之前从领导者存储系统(1140)接收(1324)领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示。
图13中描绘的示例方法还包括由跟随者存储系统(1138)确认(1326)要修改数据集(1142)的请求(1104)的完成。可以例如通过跟随者存储系统(1138)向发出了要修改数据集(1142)的请求(1104)的主机(1102)发出确认(1328)消息来执行确认(1326)要修改数据集(1142)的请求(1104)的完成。在图13中描绘的示例方法中,跟随者存储系统(1138)可以在确认(1328)要修改数据集(1142)的请求(1104)的完成之前确定要修改数据集(1142)的请求(1104)是否已被领导者存储系统(1140)处理(1318)。例如,通过确定跟随者存储系统(1138)是否已从领导者存储系统(1140)接收到指示要修改数据集(1142)的请求(1104)已被领导者存储系统(1140)处理(1318)的确认消息或其他消息,跟随者存储系统(1138)可以确定要修改数据集(1142)的请求(1104)是否已被领导者存储系统(1140)处理(1318)。在这样的示例中,如果跟随者存储系统(1138)肯定地确定要修改数据集(1142)的请求(1104)已被领导者存储系统(1140)处理(1318)并且跟随者存储系统(1138)也已处理(1316)要修改数据集(1142)的请求(1104),则跟随者存储系统(1138)可以通过向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1326)要修改数据集(1142)的请求(1104)的完成来继续进行。然而,如果领导者存储系统(1140)确定要修改数据集(1142)的请求(1104)尚未被领导者存储系统(1140)处理(1318)或者跟随者存储系统(1138)仍然尚未处理(1316)要修改数据集(1142)的请求(1104),则跟随者存储系统(1138)可以仍然不向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1326)要修改数据集(1142)的请求(1104)的完成,因为当已在同步地复制数据集(1142)所跨越的所有存储系统(1138,1140)上成功地处理了要修改数据集(1142)的请求(1104)时,跟随者存储系统(1138)可以仅向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成。
为了进一步说明,图14阐述了图示根据本公开的一些实施例的用于为针对跨越多个存储系统(1138,1140,1334)同步的数据集(1142)的I/O操作服务的示例方法的流程图。尽管被不太详细地描绘,然而图13中描绘的存储系统(1138,1140,1334)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图13中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图14中描绘的示例方法可以类似于图13中描绘的示例方法,因为图14中描绘的示例方法还包括:由跟随者存储系统(1138)接收(1302)要修改数据集(1142)的请求(1104);从跟随者存储系统(1138)向领导者存储系统(1140)发送(1304)要修改数据集(1142)的请求(1104)的逻辑描述(1306);由领导者存储系统(1140)生成(1308)描述对数据集(1142)的修改的信息(1310);由领导者存储系统(1140)处理(1318)要修改数据集(1142)的请求(1104);由领导者存储系统(1140)向跟随者存储系统(1138)确认(1320)要修改数据集(1142)的请求(1104)的完成;从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1310);由跟随者存储系统(1138)处理(1316)要修改数据集(1142)的请求(1104);从领导者存储系统(1140)接收(1324)领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示;以及由跟随者存储系统(1138)确认(1326)要修改数据集(1142)的请求(1104)的完成。
然而,图14中描绘的示例方法与图13中描绘的示例方法不同,因为图14中描绘的示例方法描绘了跨越三个存储系统同步地复制数据集(1142)的实施例,其中一个存储系统是领导者存储系统(1140)并且剩余的存储系统是跟随者存储系统(1138,1334)。在这样的示例中,附加跟随者存储系统(1334)执行与图13中描绘的跟随者存储系统(1138)相同的许多步骤,因为附加跟随者存储系统(1334)可:从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1110)并且还按照描述对数据集(1142)的修改的信息(1110)处理(1316)要修改数据集(1142)的请求(1140)。
在图14中描绘的示例方法中,领导者存储系统(1140)可将描述对数据集(1142)的修改的信息(1110)发送(1338)到所有跟随者存储系统(1138,1334)。在图14中描绘的示例方法中,附加跟随者存储系统(1334)还可向接收到(1302)要修改数据集(1142)的请求(1104)的跟随者存储系统(1138)确认(1330)要修改数据集(1142)的请求(1104)的完成。在图14中描绘的示例方法中,例如,通过使用从附加跟随者存储系统(1334)发送到接收到(1302)要修改数据集(1142)的请求(1104)的跟随者存储系统(1138)的一个或多个确认(1332)消息或者经由某种其他适当的机制,附加跟随者存储系统(1334)可向接收到(1302)要修改数据集(1142)的请求(1104)的跟随者存储系统(1138)确认(1330)要修改数据集(1142)的请求(1104)的完成。
在图14中描绘的示例方法中,接收到(1302)要修改数据集(1142)的请求(1104)的跟随者存储系统(1138)还可以接收(1336)所有其他跟随者存储系统(1334)已处理要修改数据集(1142)的请求(1104)的指示。在此示例中,所有其他跟随者存储系统(1334)已处理要修改数据集(1142)的请求(1104)的指示被具体实现为从其他跟随者存储系统(1334)发送到接收到(1302)要修改数据集(1142)的请求(1104)的跟随者存储系统(1138)的确认(1332)消息。读者应领会的是,尽管上述的许多步骤被描绘和描述为以特定次序发生,然而实际上不要求特定次序。事实上,因为跟随者存储系统(1138,1334)和领导者存储系统(1140)各自是独立存储系统,所以每个存储系统可以并行地执行上述的步骤中的一些。例如,跟随者存储系统(1138)可以在处理(1316)要修改数据集(1142)的请求(1104)之前从领导者存储系统(1140)接收(1324)领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示。另外,跟随者存储系统(1138)可以在接收(1324)领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示之前接收(1336)所有其他跟随者存储系统(1334)已处理要修改数据集(1142)的请求(1104)的指示。可替代地,跟随者存储系统(1138)可以在处理(1316)要修改数据集(1142)的请求(1104)之前接收(1336)所有其他跟随者存储系统(1334)已处理要修改数据集(1142)的请求(1104)的指示。同样地,跟随者存储系统(1138)可以在从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1110)之前从领导者存储系统(1140)接收(1324)领导者存储系统(1140)已处理要修改数据集(1142)的请求(1104)的指示。另外,跟随者存储系统(1138)可以在从领导者存储系统(1140)接收(1314)描述对数据集(1142)的修改的信息(1110)之前接收(1336)所有其他跟随者存储系统(1334)已处理要修改数据集(1142)的请求(1104)的指示。
尽管在图14中未明确地描绘,然而跟随者存储系统(1138)可以在确认(1328)要修改数据集(1142)的请求(1104)的完成之前确定要修改数据集(1142)的请求(1104)是否已被领导者存储系统(1140)处理(1318)并且还被所有其他跟随者存储系统(1334)处理(1144)。例如,通过确定跟随者存储系统(1138)是否已从领导者存储系统(1140)和所有其他跟随者存储系统(1334)接收到指示要修改数据集(1142)的请求(1104)已被每个存储系统(1140,1344)处理(1318,1144)的确认消息,跟随者存储系统(1138)可以确定要修改数据集(1142)的请求(1104)是否已被领导者存储系统(1140)处理(1318)并且还被所有其他跟随者存储系统(1334)处理(1144)。在这样的示例中,如果跟随者存储系统(1138)肯定地确定要修改数据集(1142)的请求(1104)已被领导者存储系统(1140)、所有其他跟随者存储系统(1334)和跟随者存储系统(1138)处理,则跟随者存储系统(1138)可以通过向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1326)要修改数据集(1142)的请求(1104)的完成而继续进行。然而,如果领导者存储系统(1140)确定要修改数据集(1142)的请求(1104)尚未被领导者存储系统(1140)、所有其他跟随者存储系统(1334)或跟随者存储系统(1138)中的至少一个处理,则跟随者存储系统(1138)可以仍然不向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1326)要修改数据集(1142)的请求(1104)的完成,因为当已在同步地复制数据集(1142)所跨越的所有存储系统(1138,1140,1334)上成功地处理了要修改数据集(1142)的请求(1104)时,跟随者存储系统(1138)可以仅向发起了要修改数据集(1142)的请求(1104)的主机(1102)确认(1134)要修改数据集(1142)的请求(1104)的完成。
尽管在图14中未明确地描绘,然而在一些实施例中,为了努力解除在存储系统(1138,1140,1334)中的一个或多个上执行的任何并发重叠读取的阻塞,接收到(1302)要修改数据集(1122)的请求(1104)的跟随者存储系统(1138)可将消息发送回到领导者存储系统(1140)并发送回到其他跟随者存储系统(1334)以发信号通知修改操作已处处完成。可替代地,接收到(1302)要修改数据集(1122)的请求(1104)的跟随者存储系统(1138)能将该消息发送到领导者存储系统(1140)并且领导者存储系统(1140)能发送消息以传播完成并且解除别处读取的阻塞。
读者应领会的是,尽管图14中描绘的示例方法描绘了跨越三个存储系统同步地复制数据集(1142)的实施例,其中一个存储系统是领导者存储系统(1140)并且剩余的存储系统是跟随者存储系统(1138,1334),然而其他实施例可以甚至包括附加存储系统。在这样的其他实施例中,附加跟随者存储系统可以以与图14中描绘的其他跟随者存储系统(1334)相同的方式操作。
读者还应领会的是,尽管仅图12中描绘的示例明确地描绘了描述对数据集(1142)的修改的信息(1310)包括用于要修改数据集(1142)的请求(1104)的排序信息(1152)、与要修改数据集(1142)的请求(1104)相关联的公共元数据信息(1154)以及与要修改数据集(1142)的请求(1104)相关联的I/O净荷(1114)的实施例,然而描述对数据集(1142)的修改的信息(1310)可包括在剩余图中描绘的示例中的这样的信息的全部(或子集)。另外,在要修改数据集(1142)的请求(1104)包括要取数据集(1142)的快照的请求的实施例中,描述对数据集(1142)的修改的信息(1310)还可包括在上述的每个图中将被包括在数据集(1142)的快照的内容中的一个或多个其他要修改数据集(1142)的请求的标识。
读者应领会的是,作为描述对数据集(1142)的修改的信息(1310)包括将被包括在数据集(1142)的快照的内容中的一个或多个其他要修改数据集(1142)的请求的标识的结果,不是包括标识在取快照之前必须完成的一个或多个其他要修改数据集(1142)的请求的信息,而是可解决几种情形。一种情形是原子操作能执行快照并在相同的原子更新中完成最后几次写入,意味着最后几次写入不会“在”快照“之前”完成。另一情形是能实际上在取得快照点之后完成写入,只要当写入完成时它们被包括即可并且只要快照它本身未被认为是完整的直到所有写入由所有同步存储系统完成为止即可。最后,作为恢复操作的结果,在快照被接收之前尚未向请求者指示为完成的写入能被包括或者留在快照之外。实质上,只要结果是一致的并且不违反与被发信号通知为已完成的操作有关的任何保证,恢复就可重写接收到的操作的详细历史。
为了进一步说明,图15阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统之间调解的示例方法的流程图。尽管图15中描绘的示例方法图示仅跨越两个存储系统(1514,1524)同步地复制数据集(1512)的实施例,然而图15中描绘的示例可被扩展到跨越附加存储系统同步地复制数据集(1512)的实施例。
在以下示例中,用于豆荚的一组存储系统(1514,1524)之间的调解允许存储系统解决与配对的系统的丢失通信,其中通信可能由于通信故障或某种其他种类的系统故障而丢失。如下所述,调解的解决方案可以包括群体和外部控制系统的使用,所述外部控制系统规定存储系统中的哪一个应该继续处理针对豆荚数据集的I/O操作,并且竞争诸如调解器这样的资源。然而,调解的优点是它比群体协议更简单,并且调解对作为常见配置的用于同步地复制的存储系统的两个存储系统配置有效。进一步地,与外部控制系统和可以对照来竞争的许多其他类型的资源相比,调解可能更鲁棒且更容易配置。
如图15中所描绘的,正在同步地复制数据集(1512)的多个存储系统(1514,1524)可以通过网络(1554)与调解服务(1500)通信—其中调解服务(1500)可以解决哪一个存储系统在存储系统之间的通信故障情况下、在存储系统脱机的情况下或者由于某个其他触发事件而继续为数据集服务。调解是有利的,因为如果存储系统不能彼此通信,则它们可能无法维护同步地复制的数据集,并且任何接收到的要修改数据集的请求将是无用的,因为否则数据集将变得不同步。在此示例中,用于正在同步地复制数据集的存储系统的调解服务(1514,1524)可以由在存储系统(1514,1524)外部的调解服务(1500)提供。虽然在此示例中,描绘了仅两个存储系统(1514,1524),然而通常,一些其他数量的两个或更多个存储系统可以是正在同步地复制数据集的同步列表的一部分。具体地,如果第一存储系统(1514)已检测到触发事件,诸如到第二存储系统(1524)的通信链路(1516)的丢失,则第一存储系统(1514)可以联系外部调解服务(1500)以确定它是否可安全地接管从同步列表中移除非通信存储系统的任务,所述同步列表指定相对于复制数据集被同步的存储系统。在其他情况下,第一存储系统(1514)可以联系外部调解服务(1500)并且确定它第一存储系统(1500)可能已被第二存储系统从同步列表中移除。在这些示例中,存储系统(1514,1524)不需要与外部调解服务(1500)连续通信,因为在正常条件下存储系统(1514,1524)不需要来自调解服务(1500)的任何信息以正常地操作并且维护数据集(1512)的同步复制。换句话说,在此示例中,调解服务(1500)可能在同步列表的成员资格管理中不具有活动角色,并且进一步地,调解服务(1500)甚至可能不知道同步列表中的存储系统(1514,1524)的正常操作。替代地,调解服务(1500)可以简单地提供由存储系统(1514,1524)使用来确定同步列表中的成员资格或者确定存储系统是否可用来分离另一存储系统的持久信息。
在一些示例中,调解服务(1500)可以由一个或多个存储系统(1514,1524)响应于诸如防止存储系统(1514,1524)彼此通信的通信链路故障这样的触发事件来联系;然而,每个存储系统(1514,1524)可以能够通过与在存储系统(1514,1524)之间使用的通信信道不同的通信信道与调解服务(1500)进行通信。因此,虽然存储系统(1514,1524)可能无法彼此通信,但是然而存储系统(1514,1524)中的每一个均可以仍然与调解服务(1500)通信,其中存储系统(1514,1524)可以使用调解服务(1500)来解决哪一个存储系统可以继续为数据存储请求服务。进一步地,赢得来自调解服务(1500)的调解存储系统可以分离另一存储系统并且更新指示可以继续同步地复制数据集的存储系统的同步列表(1512)。在一些示例中,调解服务(1500)可以处理各种类型的请求,诸如要设置包括请求者存储系统并且排除另一存储系统的成员资格列表的请求。在此示例中,如果调解服务(1500)当前将请求者列举为成员则请求成功地完成,而如果调解服务(1500)当前未将请求者列举为成员则请求失效。以这种方式,如果两个存储系统(1514,1524)各自在大致相同的时间做出请求,其中请求用来排除另一个,则接收到的第一请求可能成功—其中调解服务根据第一请求将成员列表设置为排除另一个存储系统—并且接收到的第二请求可能失效,因为成员资格列表已被设置为排除它。对存储成员资格列表的共享资源的互斥访问用来确保仅单个系统同时被允许设置成员资格列表。
在另一示例中,调解可以基于分区标识符,其中可以定义值以指示豆荚成员资格分区标识符以断言成员资格已从豆荚中分隔开或者移除某一组存储系统。‘豆荚’(当在这里并贯穿本申请的剩余部分使用该术语时)可以作为表示数据集、一组受管理对象和管理操作、用于修改或者读取数据集的一组访问操作、以及多个存储系统的管理实体被具体实现。这样的管理操作可以通过存储系统中的任一个等效地修改或者查询受管理对象,其中用于读取或者修改数据集的访问操作通过存储系统中的任一个等效地操作。每个存储系统可以将数据集的单独的副本作为所述数据集的真子集来存储,所述真子集被存储和通告以供存储系统使用,其中通过任何一个存储系统执行和完成的用于修改受管理对象或数据集的操作被反映在用于查询豆荚的后续管理对象或用于读取数据集的后续访问操作中。可以在通过引用并入本文的先前提交的临时专利申请no.62/518,071中找到有关‘豆荚’的附加细节。
分区标识符可以是存储在除了存储豆荚成员资格列表的给定存储系统之外的给定存储系统上的本地信息。彼此适当通信并同步的系统可以具有相同的分区标识符,并且当存储系统被添加到豆荚时,然后可以连同豆荚数据内容一起拷贝当前分区标识符。在此示例中,当存储系统的一个集合不在与存储系统的另一集合进行通信时,来自每个集合的一个存储系统可以提出新的且的唯一分区标识符并且尝试通过使用对于首先获取对共享资源的锁定的存储系统成功的特定操作来将它设置在由调解服务(1500)所维护的共享资源中,其中未能获取对共享资源的锁定的另一存储系统在执行特定操作时未做尝试。在一个实施方式中,可以使用原子比较和设置操作,其中由调解服务(1500)所存储的最后分区标识符值可以由存储系统提供以具有将分区标识符改变为新值的权限。在此示例中,对于知道当前分区标识符值的存储系统来说比较和设置操作可以是成功的—其中首先设置分区标识符值的存储系统将是知道当前分区标识符值的存储系统。进一步地,可以在web服务协议中可用的条件存储或PUT操作可以用于像此示例中所描述的那样设置分区标识符值。在其他情况下,诸如在SCSI环境中,可以使用比较和写入操作。在再一其他的情况下,调解服务(1500)可以通过从存储系统接收请求来执行比较和设置操作,其中请求指示旧分区标识符值以及新分区标识符值,并且其中当且仅当当前存储的值等于旧分区标识符时,调解服务(1500)才将所存储的分区标识符改变为新分区标识符值。
以这种方式,基于分区标识符的调解可以用于存留可以由存储系统使用来确定给定存储系统是否被包括在分隔出的一组一致的豆荚成员中的信息。在一些情况下,分区标识符可以仅在由于存储系统或网络互连中的故障而导致的自主分离的情况下改变。在这些示例中,以受控方式使它本身对豆荚来说脱机的存储系统可以与其他存储系统进行通信以将它本身作为同步豆荚成员移除,因此不要求形成调解新分区标识符。进一步地,将它本身作为同步豆荚的成员移除的存储系统然后可以以不要求调解新分区标识符的受控方式将它本身作为同步豆荚成员添加回。此外,只要存储系统正在与同步豆荚成员进行通信,新存储系统就可以被添加到同步豆荚,其中新存储系统可以以不要求调解新分区标识符的受控方式添加本身。
因此,调解分区标识符机制的优点是当存在至少一组存储系统通过尝试从同步豆荚成员资格列表中移除一个或多个非通信存储系统来作出反应的故障或其他触发事件时调解服务(1500)可能仅是必要的,其中非通信存储系统可以尝试做同样的操作,但是相反。另一优点是调解服务(1500)可能不是绝对可靠的并且对由同步豆荚成员所提供的整体存储服务的可用性几乎没有影响。例如,如果两个同步地复制的存储系统各自每年失效一次,则除非调解服务(1500)在两个存储系统中的第一个失效的确切时刻不可用,否则第二存储系统应该成功地调解以移除第一存储系统。简而言之,如果调解服务(1500)起来并且至少99%的时间可用,则调解服务(1500)在需要时不可用的概率变得非常低。在此示例中,调解服务(1500)在关键时间将不可用的机率将是百分之一(1%或更少)—这可将一年一次运转中断减少成一个世纪一次运转中断。然而,为了减小调解服务(1500)的不可用性的可能性,可以在周期性基础上监视调解服务(1500)以向管理员报警调解服务是否是通常不可用的,其中调解服务(1500)还可以监视存储系统以在特定存储系统变得不可用时生成警报。
在另一示例中,作为使用与用于豆荚的同步成员相关联的分区标识符的替代方案,调解服务(1500)可以提供一次调解竞争目标。具体地,每当用于豆荚的同步成员存储系统可能需要允许一个存储系统可以被其他存储系统分离的可能性时,可以建立调解竞争目标。例如,可以一次将调解值的表中的商定的密钥设置为新值,在赢得调解的情况下,存储系统将商定的密钥设置为其他单独的竞争存储系统将不会使用的唯一值。在调解竞争之前,商定的密钥可能不存在,或者如果它确实存在,则可以将它设置为某个商定的前体值,诸如UNSET或null值。在此示例中,如果密钥确实不存在,如果密钥处于UNSET状态,或者如果密钥正在被设置为等于当前值的值,则用于将密钥设置为特定值的操作成功—否则,用于设置密钥的操作失效。一旦一组存储系统赢得调解,剩余的一组存储系统就可以定义新密钥以用于将来的调解。在此示例中,存储系统可以记录它在调解竞争之前使用的值,使得在学习到它可能已赢得调解竞争之前,存储系统可以在它发生故障并恢复或者重新启动的情况下再次使用该值。如果两个或更多个存储系统正在通信并且正在针对不在通信的某个其他一组存储系统进行竞争,则可以将此值共享给那些其他通信存储系统,使得它们中的任何一个可以继续调解竞争,并且可能在故障的某个附加序列之后参与第二调解竞争。例如,为得到正确性可能有必要在为第二调解竞争目标竞争唯一值之前竞争或者使第一调解竞争目标有效。特别地,此序列可能是必要的直到第二调解竞争目标被可靠地分发到共享第一调解竞争目标的所有存储系统并且所有存储系统都知道它已被可靠地分发为止。那时,可能不再需要在竞争第二调解目标之前首先竞争第一调解目标。
在一些示例中,可以在由组织而不是正被调解的存储系统的组织或所有者所提供的计算机系统上管理调解服务(1500)。例如,如果供应商向客户销售两个存储系统,则供应商可以在设置在供应商拥有或管理的数据中心中的服务器上托管调解器,或者供应商可以与云服务提供商签订合同以托管服务。供应商还可以确保调解服务是足够可靠的并且不同于任何客户的故障区。在一种情况下,在不排除其他云服务提供商的情况下,调解服务可以被托管在Amazon Web ServicesTM中,并且调解服务可以用DynamoDB实现以得到可靠的数据库服务,其中DynamoDB可以随着web API数据库更新而为条件存储原语提供支持。在一些情况下,可以实现调解服务以跨越多个云服务提供商区域或故障区操作以进一步提高可靠性。使用供应商来提供调解服务的一个优点是调解服务配置起来直截了当。进一步地,在创建豆荚期间存储系统可以从调解服务获得密码令牌,并且除了存储分区标识符和豆荚成员资格列表之外还存储密码令牌—其中密码令牌可以用于为豆荚安全地传送唯一调解服务信息。
在一些情况下,当存储系统尝试调解时调解服务(1500)可能是不可用的,并且以下方法提供至少最终从这样的服务运转中断中恢复的过程。例如,如果第一组存储系统尝试通过调解服务分离第二组存储系统,但是第一组存储系统不能与调解服务(1500)进行通信,则第一组存储系统不能完成分离操作并且不能继续为豆荚服务。在一些情况下,如果两组存储系统设法彼此重新连接,使得所有同步存储系统再次通信—但是其中调解服务(1500)仍然是不可用的—则两组存储系统可以同步并重新开始为豆荚服务。然而,在此示例中,可能已向调解服务(1500)发送一个或多个请求以改变分区标识符,或者以改变与调解相关联的无论什么其他属性,并且存储系统都不可以确定请求是否被还是未被接收和处理,其中确认响应可能已丢失。结果,存在一组发生故障的存储系统或网络互连,然后如果并当调解服务(1500)重新联机时,没有存储系统可以确保为分区标识符断言哪一个值。在这样的场景中,豆荚的服务优选在所有同步存储系统重新联机并重新开始通信时或者在同步存储系统可重新连接到调解服务(1500)时重新开始。在一个实施方式中,当所有同步存储系统重新连接时,同步存储系统全部交换可能已被发送到调解服务(1500)的已知分区标识符值。例如,如果两个存储系统各自已设法改变分区标识符值,其中一个存储系统尝试将分区标识符改变为比如1749137481890,而另一存储系统尝试将分区标识符更改为比如87927401839,并且已知已被调解服务(1500)确认的最后值是79223402936,则调解服务(1500)当前可以存储这三个分区标识符值中的任一个。结果,用来将调解分区标识符改变为新值的任何将来的尝试可以供应这三个分区标识符中的任一个或全部以尝试赢得做出改变的权力。进一步地,用于改变分区标识符值的第四尝试也可能遇到故障,从而产生可能需要由稍后尝试又一次调解的任何存储系统记住的第四值。此外,如果任何存储系统成功地改变调解服务(1500)分区标识符值,则该存储系统可以从任何同步存储系统中并从将来变得同步的任何存储系统中清除较旧的分区标识符值。
在另一示例中,调解服务(1500)可以基于为每个潜在将来的竞争指派的唯一密钥调解。在这样的情况下,同步存储系统可以同意使用新密钥。考虑到可能无法同时在所有存储系统上原子地设置新密钥,在所有同步存储系统接收并记录新密钥之前,所有存储系统应该保留其旧密钥以及每个存储系统尝试在任何先前的调解尝试中设置的值。在此示例中,任何较早的非竞争密钥和任何较早的密钥/值调解尝试可以在用于豆荚的所有同步存储系统之间循环并且连同用于将来的调解尝试的新密钥一起记录在每个这样的存储系统上。对于每个先前的非竞争密钥(不包括新密钥),此交换还可以选择所有系统可以在竞争该密钥时使用的单个商定的值。在用于豆荚的所有同步存储系统已接收到并记录所有这些调解密钥和值(以及用于任何将来的竞争的新商定的密钥)之后,豆荚中的存储系统然后可以同意丢弃较旧的密钥和值支持单个新密钥。注意的是,两个或更多个存储系统可能已尝试将相同的调解密钥设置为不同的值,并且可以记录所有这样的值。如果在对于过去的调解尝试交换或者接收所有这些调解密钥和键/值对的过程期间存在故障,则一些存储系统可能尚未接收到并记录新调解密钥和值,然而其他存储系统可能已接收到并记录新调解密钥和值。如果在用于豆荚的所有同步存储系统可彼此重新连接之前调解服务(1500)变得可用,则用于豆荚的存储系统的子集可以尝试使用调解服务(1500)来从豆荚中分离另一存储系统。为了赢得调解,存储系统可以尝试将所有记录的密钥设置为其记录的值,并且在那可行的情况下,则将新密钥设置为唯一值。如果为同一密钥记录了多于一个值,则该步骤在设置那些值的任何一个成功的情况下成功。如果第一步骤(设置先前的密钥)失败或者第二步骤(将新密钥设置为新的唯一值)失败,则参与在调解时的那个尝试的存储系统可以脱机(保留它尝试为新密钥设置的值)。如果两个步骤都成功,则通信存储系统可以分离非通信存储系统并继续为豆荚服务。作为交换所有过去的密钥和值的替代方案,存储系统可以仅记录它尝试的密钥和值,而不从用于豆荚的其他存储系统交换密钥和值。然后,如果同步存储系统与用于豆荚的其他同步存储系统重新连接(其中没有一个已成功与调解服务交互),则同步存储系统可以交换一个新调解密钥,然后交换它们都接收到并记录已商定的新密钥的确认。如果故障防止交换确认,则由从未接收到新密钥的存储系统在调解时(对现在可用的调解服务)的将来的尝试可以尝试重新断言它先前的密钥和值。已接收到新密钥但是尚未接收到用于豆荚的所有存储系统都已接收到密钥的指示的存储系统可以断言它先前的调解密钥以及断言用于新密钥的值,首先是先前的密钥,然后是新密钥。将来的调解尝试可能仍然失败,然后存储系统可以再次重新连接到其他同步存储系统并且可以再次不完全地交换新密钥,从而导致另一密钥。这添加另一密钥。随着密钥因新密钥的一组不完整的交换而随着时间的推移而积累,由存储系统进行的将来的调解尝试可以连同它针对那些密钥先前断言的任何值一起按照它们被记录的次序重新断言其密钥中的每一个,直到它针对所有密钥成功地断言值或者它遇到断言密钥失败为止,此时它停止断言密钥并脱机。
在另一示例中,可以在当前调解服务不可用时配置新调解服务。例如,如果用于豆荚的所有同步存储系统正在彼此通信,但是不在与当前调解服务通信,则豆荚可以被配置有新调解服务。这类似于选择新密钥或新调解值的先前算法,但是新密钥被进一步配置为使用新调解服务而不仅仅是与同一服务相关联的另一密钥。进一步地,如果在此操作期间存在故障,与先前算法一样,一些系统可能竞争较旧的密钥,所以利用新调解服务知道旧密钥和新密钥两者的系统可以在新调解器服务上竞争新密钥。如果先前的调解服务永久不可用,则所有同步存储系统最终应该彼此重新连接并且在可安全地重新开始豆荚服务之前完成新调解服务以及与新调解服务相关联的任何密钥和值的交换。
在另一示例中,用于解决故障的模型可以是为了实现偏好规则以使一个存储系统优于其他存储系统。在此示例中,如果优选的存储系统正在运行,则它保持运行并且分离未在与之进行通信的任何存储系统。进一步地,未与优选的系统进行被证实通信的任何其他系统使它本身脱机。在此示例中,当非优选的存储系统最终与优选的存储系统重新连接时,那么如果优选的存储系统仍然尚未分离重新连接的存储系统,则两个存储系统可以从两个存储系统同步的状态恢复和重新开始,然而如果优选的存储系统已分离重新连接的存储系统,则必须首先使重新连接的存储系统重新同步以在它可重新开始为豆荚服务之前使它对豆荚来说同步。优选的存储系统可能不可用于提供高可用性,但是可以可用于同步复制特别是非对称同步复制的其他用途。以将豆荚从数据中心或校园中的中央大存储系统镜像到更靠近应用服务器运行的较小(可能管理较少的)存储系统为例,诸如在架顶式配置中。在这种情况下,在网络故障的情况下或者当架顶式存储系统失效时始终支持较大管理更多的中央存储系统、同时在集中管理的存储系统失效的情况下完全降低用于豆荚的服务可以是有益的。这样的架顶式存储系统可能仅用于提高读取性能或者减少数据中心存储网络上的负载,但是如果异步复制或其他数据管理服务仅在集中管理的系统上运行,则可以优选将业务重新路由到中央存储系统或者停止服务和调用技术支持,而不是允许架顶式存储系统单独继续。进一步地,偏好规则可以更复杂—可以存在可能与依靠优选的或必需的存储系统的一定数量的附加存储系统耦合的两个或更多个这样的“优选的”存储系统。在此示例中,豆荚在所有优选的或必需的存储系统正在运行的情况下联机,而在它们中的一些不在运行的情况下当机。这类似于群体模型,其中群体的大小与投票成员的数量相同,但是它实现起来比允许少于所有投票成员实现的广义群体模型更容易。
在另一示例中,可以使用机制的组合,这在跨越多于两个存储系统伸展豆荚时可能是有用的。在一个示例中,偏好规则可以与调解组合。在架顶式示例中,数据中心或校园中的较大中央存储系统它本身可能被同步地复制到第二位置中的大存储系统。在那种情况下,架顶式存储系统可以从不单独重新开始,并且可能更喜欢两个位置中的较大中央存储系统中的任一个。两个较大存储系统在那种情况下可能被配置为在彼此之间调解,并且可连接到保持联机的两个较大存储系统中的无论哪一个的任何较小存储系统可以继续为其豆荚服务,并且不能连接到两个大存储系统中的任何一个(或者仅能连接到对豆荚来说脱机的一个大存储系统)的任何较小存储系统到可以停止为豆荚服务。进一步地,偏好模型还可以与基于群体的模型组合。例如,三个位置中的三个大存储系统可能在彼此之间使用群体模型,其中较小卫星或架顶式存储系统缺少任何投票并且只有当它们可连接到联机的较大同步存储系统中的一个时才工作。
在组合机制的另一示例中,可以将调解与群体模型组合。例如,可以存在三个存储系统,所述三个存储系统在彼此之间正常地投票以确保两个存储系统可安全地分离不在通信的第三存储系统,同时一个存储系统可从不独立地分离两个其他存储系统。然而,在两个存储系统已成功地分离第三存储系统之后,配置现在下至同意它们同步并且对第三存储系统被分离的事实意见一致的两个存储系统。在那种情况下,两个剩余的存储系统可能同意使用调解(诸如利用云服务)来处理附加存储系统或网络故障。可以进一步扩展这种调解和群体组合。例如,在四个存储系统之间伸展的豆荚中,任何三个可分离第四个,但如果两个同步存储系统正在彼此通信而不与它们当前都认为同步的两个其他存储系统进行通信,则它们能使用调解来安全地分离其他两个。即使在五个存储系统豆荚配置中,如果四个存储系统投票要分离第五个,则剩余的四个可在它们被分成两个相等一半的情况下使用调解,并且一旦豆荚下至两个存储系统,它们就可使用调解来解决连续故障。五到三个然后可能使用三者之间的群体从而允许下降到两个,同时如果存在进一步故障则两个剩余的存储系统再次使用调解。这种一般的多模式群体和调解机制可处理对称存储系统之间的群体和调解都单独地无法处理的附加数量的情形。这种组合可以增加可以可靠地使用有故障或偶尔不可达的调解器(或者在云调解器的情况下,客户可能不完全信任它们)的情况的数量。进一步地,这种组合更好地处理三个存储系统豆荚的情况,其中调解单独可能导致第一存储系统成功地分离影响仅第一存储系统的网络故障上的第二存储系统和第三存储系统。这种组合还可以更好地处理一次影响一个存储系统的一系列故障,如三到两个然后到一个示例中所描述的。这些组合工作,因为同步和分离操作产生具体状态—换句话说,系统是有状态的,因为它是从分离转向同步的过程,并且群体/调解器关系的序列中的每个阶段确保在每一点处所有联机/同步存储系统对豆荚的当前持久状态意见一致。这与在简单地使多数集群节点再次通信预期足以重新开始操作的一些其他集群模型中不同。然而,可仍然加入偏好模型,其中卫星或架顶式存储系统从不参与调解或群体,并且只有当它们可连接到参与调解或群体的联机存储系统时才为豆荚服务。
在一些示例中,调解服务(1500)或外部豆荚成员资格管理器可以位于与用于同步地复制的存储系统(1514,1524)的故障区不同的故障区中。例如,在两个存储系统豆荚(1501)情况下,如果两个存储系统(1514,1524)通过例如物理位置被分成不同的故障区—一个在城市中并且另一个在城市的郊区中,或者一个在连接到不同的电网或互联网接入点的数据中心中并且另一个在连接到不同的电网或互联网接入点的另一数据中心中—则与两个存储系统相比通常优选位于某个其他故障区中。作为一个示例,调解服务(1500)可以是在城市的扩展城区的不同部分中,或者连接到不同的电网或互联网接入点。然而,同步地复制的存储系统也可以在同一数据中心内以提供更好的存储可靠性,并且在这种情况下,可以考虑网络、电力和冷却区。
图15中描绘的示例方法包括由第一存储系统(1514)响应于检测到触发事件而请求(1502)来自调解服务(1500)的调解。在此示例中,触发事件可以是第一存储系统(1514)与第二存储系统(1524)之间的数据通信链路(1)中的通信故障,其中检测故障可以基于硬件故障发起中断、基于无法确认传输或者基于失败的重试努力或者通过某种其他方法。在其他情况下,触发事件可以是同步复制租期的期满,并且请求调解可以是尝试协调使活动租期的连接和重新开始同步的一部分。最初可以以各种不同的方式按照用于所述多个存储系统中的至少一个的定时信息建立这样的租期。例如,存储系统可以通过利用用于所述多个存储系统中的每一个的定时信息来协调或者交换时钟而建立同步复制租期。在这样的示例中,一旦针对存储系统中的每一个协调了时钟,该存储系统就可以建立延长超过经协调或交换的时钟值达预定时间段的同步复制租期。例如,如果在时间X协调了用于每个存储系统的时钟,则存储系统可以各自被配置为建立在X+2秒之前有效的同步复制租期。可以在通过引用整体地并入本文的美国临时申请62/518,071内找到用于协调或者交换时钟的进一步说明。
进一步地,由第一存储系统(1514)响应于检测到触发事件而请求(1502)来自调解服务(1500)的调解可以通过第一存储系统(1514)的控制器检测触发事件并且通过网络(1554)向调解服务(1500)发送请求(1560)来实现。在一些示例中,调解服务(1500)可以是向多个计算机系统提供对资源(诸如用于存储值的特定数据库条目)的互斥访问的第三方服务。例如,调解服务(1500)可以通过由云服务提供商所提供的数据库服务来提供,由发出要修改数据集的请求的主机计算机提供,或者通过提供对资源的互斥访问的某个第三方服务来提供,其中资源可以是存储装置、状态机或能够基于来自特定客户端的请求指示特定修改的某种其他类型的资源。在此示例中,在发送对调解的请求(1560)之后,第一存储系统(1514)等待(1503A)来自调解服务(1500)的指示肯定调解结果(1503B)或否定调解结果或缺少响应(1503C)的指示。如果第一存储系统(1514)接收到否定调解结果或接收到无响应(1503C),并且如果尚未超过阈值等待时间量,则第一存储系统(1514)可以继续(1506)等待更多的时间。然而,如果等待时间量超过阈值量,则第一存储系统(1514)可以通过确定另一计算机系统赢得调解并且使它本身脱机来继续(1506)。在一些示例中,如上面所讨论的,对调解的请求可以由调解服务(1500)接收作为原子比较和设置操作,所述原子比较和设置操作尝试为也可以是从维护豆荚(1501)的存储系统中的另一个接收到的比较和设置操作的目标的共享资源(1552)设置值,其中成功地设置共享资源(1552)的存储系统赢得调解。
图15中的示例还包括第二存储系统(1524)响应于检测到触发事件而请求(1510)来自调解服务(1500)的调解。可以与响应于触发事件而请求(1502)第一存储系统(1514)上的调解的实施方式类似地实现响应于检测到触发事件而请求(1510)来自调解服务(1500)的调解。然而,在此示例中,第二存储系统(1524)响应于向调解服务发送请求(1562)而可以—与第一存储系统(1514)的调解成功相反—接收到失败消息,或对调解的请求(1562)不成功的某个指示。
图15中的示例方法通过以下方式而继续:在肯定调解结果的指示(1564)由第一计算机系统(1514)接收到情况下,响应于来自调解服务(1500)的肯定调解结果的指示(1564),第一计算机系统(1514)—而不是第二存储系统(1524)—处理(1504)针对跨越第一存储系统(1514)和第二存储系统(1524)同步地复制的数据集(1512)的数据存储请求。可以像参考被整体地并入本文的美国临时申请62/470,172和62/518,071的图8A和图8B所描述的那样实现除了接收和处理针对数据集(1512)的数据存储请求之外还实现豆荚(1501)的数据集(1512)的同步复制。在此示例中,如早先参考图15所描述的,响应于肯定调解结果的指示(1564),第一存储系统(1514)可以被认为是赢得调解的存储系统,并且第一存储系统(1514)可以分离与其的通信丢失的存储系统。然而,在其他示例中,可以根据其他描述的调解方法中的任一种或调解方法的组合来实现调解。
在一些示例中,可以通过为所述多个存储系统中的每一个指定延迟值来实现定义同步地复制数据集(1512)的多个存储系统当中的哪一个存储系统将赢得调解的偏好。例如,如果第一存储系统(1514)被指定为优选的存储系统,则在做出对来自调解服务的调解的请求之前,可以为第一存储系统(1514)指派延迟值零(0)。然而,对于非优选的存储系统,可以将延迟值指派为大于零,诸如3秒,或通常会导致优选的存储系统简单地由于同步地复制的存储系统之间的通信的丢失而赢得调解的某个其他值。
为了进一步说明,图16阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统之间调解的示例方法的流程图。图16中描绘的示例方法类似于图15中描绘的示例方法,因为图16中描绘的示例方法还包括:由第一存储系统(1514)响应于检测到触发事件而请求(1502)来自调解服务(1500)的调解;以及响应于来自调解服务(1500)的肯定调解结果的指示(1564),第一计算机系统(1514)—而不是第二存储系统(1524)—处理(1504)针对跨越第一存储系统(1514)和第二存储系统(1524)同步地复制的数据集(1512)的数据存储请求。
然而,图16中描绘的示例方法进一步包括,响应于肯定调解结果的指示(1564),使第二存储系统(1524)与同步地复制数据集(1512)的多个存储系统(1514,1524)分离(1602)。可以通过从正在复制数据集(1512)的存储系统的同步列表中移除不再通信的存储系统(1524)来在接收到来自调解服务(1500)的肯定调解结果的指示的存储系统上实现分离(1602)另一存储系统,其中从同步列表中移除导致赢得调解的存储系统(1514)不尝试使已分离的存储系统同步以用于随后接收到的要修改数据集的请求。虽然在此示例中存在两个存储系统(1514,1524),但是在其他示例中,设想了其他量的存储系统。
为了进一步说明,图17阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统之间调解的示例方法的流程图。图17中描绘的示例方法类似于图15中描绘的示例方法,因为图17中描绘的示例方法还包括由第一存储系统(1514)响应于检测到触发事件而请求(1502)来自调解服务(1500)的调解,其中在此示例中触发事件是通信故障。
然而,图17中描绘的示例方法不同于图15中描绘的示例方法,因为图17中描绘的示例方法不包括由第二存储系统(1524)所执行的任何活动或动作。这种区别允许多个存储系统当中的存储系统失效或者以其他方式无响应,并且允许一个或多个其他存储系统请求来自调解服务(1500)的调解以继续为针对同步地复制的数据集(1512)的数据存储请求服务。
图17中描绘的示例方法包括检测(1702)第一存储系统(1514)与第二存储系统(1524)之间的通信故障,其中第一存储系统(1514)和第二存储系统(1524)被包括在同步地复制数据集(1512)的存储系统中。可以像上面参考图15所讨论的那样实现检测(1702)通信故障。
进一步地,图17中描绘的示例方法还包括,响应于肯定调解结果的指示(1564),使第二存储系统(1524)与同步地复制数据集(1512)的多个存储系统(1514,1524)分离(1704)。可以与参考图16描述的分离(1602)第二存储系统(1524)类似地实现分离(1704)第二存储系统(1524)。
为了进一步说明,图18阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的恢复的示例方法的流程图。尽管图18中描绘的示例方法图示跨越仅两个存储系统(1814,1824,1828)(其中的每一个均可以独立地经由一个或多个数据通信链路(1816,1818,1820)彼此耦合)同步地复制数据集(1812)的实施例,然而图18中描绘的示例可被扩展到跨越附加存储系统同步地复制数据集(1812)的实施例。
正在同步地复制数据集(1842)的多个存储系统(1814,1824,1828)可以在用于接收和处理来自主机(1802)计算设备的请求(1804)的正常操作期间彼此通信。然而,在一些情况下,存储系统(1814,1824,1828)中的一个或多个可能失效、重新启动、升级或者以其他方式不可用。此上下文中的恢复是在故障或某个其他服务运转中断使同步存储系统中的至少一个被中断并且可能丢失飞行中操作的上下文之后使同步豆荚成员存储系统变得一致的过程。‘豆荚’(当在这里并贯穿本申请的剩余部分使用该术语时)可以作为表示数据集、一组受管理对象和管理操作、用于修改或者读取数据集的一组访问操作、以及多个存储系统的管理实体被具体实现。这样的管理操作可以通过存储系统中的任一个等效地修改或者查询受管理对象,其中用于读取或者修改数据集的访问操作通过存储系统中的任一个等效地操作。每个存储系统可以将数据集的单独的副本作为所述数据集的真子集来存储,所述真子集被存储和通告以供存储系统使用,其中通过任何一个存储系统执行和完成的用于修改受管理对象或数据集的操作被反映在用于查询豆荚的后续管理对象或用于读取数据集的后续访问操作中。可以在通过引用并入本文的先前提交的临时专利申请no.62/518,071中找到有关‘豆荚’的附加细节。虽然在此示例中,仅描绘了三个存储系统(1814,1824,1828),但是通常,任何数量的存储系统可以是正在同步地复制数据集(1812)的同步列表的一部分。
当作为豆荚的成员的任何一个或多个存储系统被中断时,那么任何剩余的存储系统或早先重新开始操作的任何存储系统可以分离它们(使得使它们不再同步)或者将等待它们并参与恢复动作以在前进之前确保一致性。如果运转中断足够短,并且恢复足够快,则在存储系统外部或者在不以使应用它本身当机的方式发生故障的存储系统上运行的操作系统和应用可以在存储操作处理中经历临时延迟但是可能不会经历服务运转中断。SCSI和其他存储协议支持重试,包括使目标存储接口交替,在操作由于临时存储控制器或接口目标控制器运转中断而丢失的情况下,并且SCSI特别支持BUSY状态,所述BUSY状态请求能在存储控制器参与恢复的同时使用的启动器重试。
通常,恢复的目标之一是为了处理来自进行中的分布式操作的意外中断的任何不一致并且通过使同步豆荚成员存储系统变得足够相同来解决不一致。那时,可安全地重新开始提供豆荚服务。足够相同至少包括存储在豆荚中的内容,并且在其他情况下,足够相同可以包括持久保留的状态。足够相同还可以包括确保快照是一致的—并且相对于完成的、并发的或最近接收到的修改操作仍然是正确的—或者被一致地删除。取决于实施方式,可以存在应该变得一致的其他元数据。如果存在用于跟踪或者优化内容从复制源到异步或基于快照的复制目标的转移的元数据,则可能需要使那变得一致以允许复制源从豆荚的一个成员存储系统无缝地切换到另一成员存储系统。也可能需要恢复卷的存在和属性,并且可能需要与应用或发起主机系统有关的定义。许多这些属性可以使用标准数据库事务恢复技术来恢复,取决于它们如何被实现。
在一些示例中,除了确保管理元数据在实现对基于块的存储系统中的内容的修改操作的存储系统中足够相同之外,恢复还必须确保跨越豆荚并在适当考虑块存储语义(诸如COMPARE AND WRITE及XDWRITEREAD这样的操作的次序、并发性、一致性、原子性)情况下一致地应用或者丢弃那些修改。在核心处,此实施方式依靠能够在恢复期间知道什么操作可能已被应用于可能尚未被应用于用于豆荚的所有其他同步存储系统的用于豆荚的至少一个同步存储系统,并且依靠在任何地方应用它们或者撤销它们。任何一个动作导致一致性—在任何地方适用或者在任何地方撤销—并且不存在为什么答案必须跨越所有操作统一的内在理由。如果用于豆荚的至少一个同步存储系统确实未应用操作则可以允许撤销。通常,关于应用在用于豆荚的任何同步存储系统上找到的所有更新而不是撤销在用于豆荚的一个或多个同步存储系统上但是不在用于该豆荚的所有同步存储系统上的一些或所有更新进行推理常常更简单。为了高效,知道什么被应用在可能尚未被应用在其他系统上的一些系统上通常要求存储系统记录除原始数据以外的东西(否则,可能必须比较所有数据,这可能是非常费时的)。在下面讨论的是有关用于记录可以使得能实现存储系统恢复的这样的信息的实施方式的附加细节。
用于持续地跟踪信息以便确保一致性的两个示例包括:(1)标识卷的内容可能跨越用于豆荚的同步存储系统不同,以及(2)标识可能尚未跨越用于豆荚的所有同步存储系统普遍地应用的操作的合集。第一示例是用于镜像的传统模型:保持正被写入的逻辑区域的跟踪图(常常作为列表或者作为按某个粒度覆盖卷的逻辑空间的位图)并且在恢复期间使用该列表来记录哪些区域可能在一个副本与另一副本之间不同。跟踪图在写入卷数据之前或期间被写入到一些或所有镜像(或者被单独地写入),使得跟踪图的恢复被保证覆盖在故障时在流动中的任何卷区域。此第一变体中的恢复通常包括将内容从一个副本拷贝到另一副本以确保它们是相同的。
持久跟踪中的第二示例—基于操作跟踪—在支持在豆荚中的卷内和之间同步地复制大卷范围的虚拟拷贝的存储系统中可能是有用的,因为这种情况可以是简单地作为同步地复制的存储系统之间的卷内容中的潜在差异跟踪起来更困难或昂贵(但是参见描述内容可寻址存储系统中的跟踪和恢复的后面部分)。另外,简单内容跟踪在同步复制必须跟踪更复杂的信息(诸如在具有驱动异步复制的形式的盘区和较大粒度标识符的内容跟踪图中)并且异步复制源可被从豆荚中的一个同步存储系统迁移或者失效备援到另一同步存储系统的存储系统中可能效果不佳。当跟踪操作而不是内容时,恢复包括标识可能尚未在任何地方完成的操作。一旦已标识了这样的操作,就应该解决任何排序一致性问题,就像它们应该在正常运行时期间使用诸如领导者定义的排序或谓词这样的技术或者通过互锁异常一样。在下面描述互锁异常,并且关于谓词,可以将操作与公共元数据更新之间的关系的描述描述为单独的修改操作之间的一组相互依赖性—其中这些相互依赖性可以被描述为一个操作以某种方式取决于的前体的集合,其中前体的集合可以被认为是对于要完成的操作必须为真的谓词。为了继续此示例,给定所标识的操作,然后可以重新应用操作。关于操作的记录的信息应该包括跨越豆荚成员存储系统应该一致的任何元数据变化,并且然后可拷贝和应用这种记录的信息。进一步地,谓词在它们用于传播对领导者与跟随者之间的并发性的限制的情况下,可能不需要被保存,如果那些谓词驱动存储系统存留信息的次序的话,因为所存留的信息暗示各种似是而非的结果。
如在美国临时专利申请序号62/470,172和美国临时专利申请序号62/518,071(被整体地并入本文的参考文献)内更全面地讨论的,一组同步存储系统可以实现对称I/O模型以便提供数据一致性。在对称I/O模型中,多个存储系统可以在豆荚内维护数据集,并且接收到I/O操作的成员存储系统可以在本地与在豆荚中的所有其他存储系统上对I/O操作的处理同时地处理I/O操作—其中接收存储系统可以发起在其他存储系统上对I/O操作的处理。然而,在一些情况下,多个存储系统可以接收写入到重叠存储器区域的独立I/O操作。例如,如果第一写入进入到第一存储系统,则第一存储系统可以开始在本地存留第一写入同时还将第一写入发送到第二存储系统—然而在大约相同的时间,在第二存储系统处接收到与第一写入的重叠卷区域的第二写入,其中第二存储系统开始在本地存留第二写入同时还将第二写入发送到第一存储系统。在这种场景中,在某一时刻,第一存储系统、第二存储系统或两个存储系统可以注意到存在并发重叠。进一步地在这种场景中,第一写入不能在第一存储系统上完成直到第二存储系统已存留第一写入并以成功指示响应为止,并且第一存储系统已成功地存留第一写入—其中第二存储系统处于与第二写入类似的情形下。因为两个存储系统都能够访问第一写入和第二写入两者,所以任何一个存储系统可以检测到并发重叠,并且当一个存储系统检测到并发重叠时,该存储系统可以触发异常,这在本文中被称为“互锁异常”。当场景被扩展到附加存储系统(在互锁异常中涉及以对哪一个写入操作获胜达成一致意见的存储系统)时,一个解决方案包括两个或可能更多的存储系统。
在另一示例中,诸如在重叠写入请求的情况下,在中断了复制并导致最终恢复的事件时在时间上且在卷地址范围上重叠的写入类型请求(例如,WRITE、WRITE SAME和UNMAP请求或组合)可能已在同步存储系统之间不一致地完成。处理这种情形的方式可取决于正常操作期间的I/O路径的实施方式。在此示例中,在下面进一步讨论的是在时间上重叠的第一写入和第二写入,其中每个写入被用于豆荚的一个存储系统或另一存储系统在任何一个被发信号通知为已完成之前接收。此示例通过依次考虑每两个被容易地扩展到多于两个写入,并且通过通过考虑第一写入和第二写入可能已在一个存储系统上完成并且通过考虑第一写入、第二写入和第三写入(或附加写入)可能已在三个或更多个存储系统上不一致地完成被扩展到多于两个存储系统。所描述的技术被容易地扩展到这些情况。在基于互锁异常的基于对称I/O的存储系统实施方式中,仅第一写入可能已在一个存储系统上完成,然而仅两个重叠写入中的第二个可能已在第二存储系统上完成。可通过注意范围在每个写入之间重叠并且通过注意到任何一个存储系统包括交替重叠写入来检测这种情况。如果两个写入完全重叠(一个完全覆盖另一个),则两个写入中的一个可以简单地被拷贝到另一个存储系统并应用来替换该存储系统的针对该卷地址范围的内容。如果写入仅部分地重叠,则部分地重叠的内容可被从一个存储系统拷贝到另一个存储系统(并应用),然而可在每个存储系统之间拷贝不重叠的部分,使得内容在两个存储系统上变得统一且最新。在具有用于领导者声明一个写入先于另一写入的谓词或某种其他手段的基于领导者的系统中,执行写入的存储系统可以很好地将一个存留在另一个之前,或者将两个存留在一起。在另一情况下,实施方式可以单独地且不按顺序存留两个写入,其中排序谓词仅仅用于控制完成信令。如果实施方式允许乱序写入处理,则前一个示例说明如何可恢复一致性。在存储系统在正常操作期间强制存留的排序的情况下,那么恢复可能仍然仅看到第一存储系统上的第一写入,但是看不到第二存储系统上的第一写入和第二写入。在那种情况下,作为恢复的一部分可将第二写入从第二存储系统拷贝到第一存储系统。
在另一示例中还可以恢复快照。在一些情况下,诸如对于与领导者确定的一些修改应该被包括在快照中而其他修改不应该被包括在快照中的修改并发的快照,所记录的信息可能包括关于特定写入是否应该被包括在快照内的信息。在该模型中,可能没有必要确保领导者决定要包括在快照中的一切必须在恢复之后结束被包括在快照中。如果用于豆荚的一个同步存储系统记录了快照的存在并且用于豆荚的同步存储系统没有记录被排序以便包括在快照中的写入,则在不包括该写入的情况下统一地应用快照仍然产生跨越用于豆荚的所有同步存储系统完全一致的快照内容。应该仅在从未被发信号通知为完成的并发写入和快照的情况下发生这种差异,如此包括保证未被担保:领导者指派谓词和排序可能仅是运行时一致性而不是恢复次序一致性所必要的。在恢复标识用于包括在快照中的写入但是恢复未定位写入的情况下,取决于实施方式快照操作它本身可能安全地忽视快照。关于快照的相同的变元适用于通过SCSI EXTENDED COPY和类似的操作对卷地址范围的虚拟拷贝:领导者定义哪些对源地址范围的哪些写入可能逻辑上先于拷贝并且对目标地址范围的哪些写入可能逻辑上先于或者跟随地址范围拷贝。然而,在恢复期间,相同的参数与快照一样适用:具有卷范围拷贝的并发写入能错过并发写入或卷范围拷贝,只要结果跨越用于豆荚的同步存储系统是一致的并且不回滚已在任何地方完成的修改并且不会反转数据集消费者可能已读取的修改即可。
进一步地关于描述快照的恢复的此示例,如果任何存储系统应用了写入以进行COMPARE AND WRITE,则比较必须已在用于豆荚的一个同步存储系统上成功,并且运行时一致性应该已意味着比较应该已在用于豆荚的所有同步存储系统上成功,所以如果任何这样的存储系统已应用写入,则它可被拷贝并应用到用于在恢复之前尚未应用它的豆荚的任何其他同步存储系统。再进一步地,XDWRITEREAD或XPWRITE请求的恢复(或现存数据与新数据之间的类似的算术变换操作)能通过在从一个存储系统读取该结果之后递送变换的结果来操作,或者如果可确保先于变换写入的任何排序数据跨越豆荚的同步存储系统是一致的并且如果可以可靠地确定哪些这样的存储系统仍然尚未应用变换写入,则它可通过将操作与变换数据一起递送到其他存储系统来操作。
作为另一示例,可以实现元数据的恢复。在这种情况下,恢复还应该导致元数据在用于豆荚的同步存储系统之间的一致恢复,其中该元数据预期跨越豆荚是一致的。只要此元数据被与操作包括在一起,就可连同通过那些操作所描述的内容更新一起应用这些。此数据与现有元数据合并的方式取决于元数据和实施方式。随着附近的或其他相关的修改被标识,常常可相当简单地合并用于驱动异步复制的长期变化跟踪信息。
作为另一示例,可以以各种方式实现记录最近活动以用于操作跟踪以标识在导致恢复的故障或其他类型的服务中断时在豆荚中的同步存储系统上在进行中的操作。例如,一个模型是随着任何修改(其在通过快速日志处理设备实施更新的情况下可很好地工作)或者通过在它们可发生之前记录关于将在进行中的操作的信息而将恢复信息自动地记录在对豆荚内的每个同步存储系统中。所记录的恢复信息可以包括逻辑操作标识符,诸如基于原始请求或者基于由领导者指派为描述操作的一部分的某个标识符以及恢复操作可能需要任何级别的操作描述。由存储系统针对将被包括在并发快照的内容中的写入所记录的信息应该指示写入将被包括在快照中以及在写入被应用于的卷的内容中。在一些存储系统实施方式中,快照的内容被自动地包括在卷的内容中,除非被较新快照中的具体重叠内容替换或者被稍后写入到该卷的具体重叠内容替换。在时间上且在卷地址上重叠的两个并发写入类型请求(例如,WRITE、WRITE SAME或UNMAP请求或组合)可以由领导者显式地排序,使得领导者确保在第二写入可由用于豆荚的任何同步存储系统存留之前第一写入被首先存留到用于豆荚的所有同步存储系统。这以简单的方式确保不会发生不一致。进一步地,由于对卷的并发重叠写入非常罕见,所以这可以是可接受的。在那种情况下,如果对于第二写入在任何恢复存储系统上有记录,则第一写入必须已在任何地方完成,如此它不应该需要恢复。另一方面,谓词可以由要求存储系统将第一写入排序在第二写入之前的领导者描述。存储系统然后可以一起执行两个写入,使得它们被保证都存留或者都未能存留。在另一情况下,存储系统可以存留第一写入并且在第一写入的存留被确保之后存留第二写入。应该对COMPARE AND WRITE、XDWRITEREAD或XPWRITE请求进行排序,使得前体内容在每个执行操作时在所有存储系统上相同。另一方面,一个存储系统可能计算结果并将请求作为常规写入类型请求递送到所有存储系统。进一步地,关于使这些操作变得可恢复,跟踪哪些操作已在任何地方完成可以允许它们的新近度被低估并且对于完成的操作引起操作恢复分析的记录的信息然后可通过恢复被丢弃或者高效地跳过。
在另一示例中,可以实现清出完成的操作。用于处理记录的信息的清除的一个示例是在操作已知已在用于豆荚的所有同步存储系统上被处理之后跨越所有存储系统清除它。这可通过使接收到请求并且发信号通知了完成的存储系统在完成被发信号通知之后向所有存储系统发送消息、从而允许每个存储系统清出它们来实现。恢复然后涉及查询尚未跨越在恢复中涉及的用于豆荚的所有同步存储系统中清出的所有记录的操作。另一方面,能对这些消息进行批处理,使得它们周期性地(例如,每50ms)或者在一定数量的操作之后(例如,每10到100个)发生。此批处理过程可以以稍微增加的恢复时间为代价显著地减少消息业务量,因为更充分地完成的操作被报告为潜在未完成。进一步地,在基于领导者的实施方式中(作为示例),能使领导者知道哪些操作完成并且它能发出清楚的消息。
在另一示例中,可以实现滑动窗口。这样的示例可以在基于领导者和跟随者的实施方式中很好地工作,其中领导者可以将序列号附加到操作或操作的合集。以这种方式,响应于领导者确定直到某个序列号的所有操作都已完成,它可以向所有同步存储系统发送指示直到该序列号的所有操作都已完成的消息。序列号也可能是任意数字,使得当与任意数字相关联的所有操作已完成时,消息被发送以指示所有那些操作都已完成。利用基于序列号的模型,恢复能查询与大于最后完成的序列号的序列号相关联的任何同步存储系统上的所有操作。在没有领导者的对称实施方式中,接收到对豆荚的请求的每个存储系统能定义它自己的滑动窗口和滑动窗口标识空间。在那种情况下,恢复可以包括查询与其滑动窗口标识在针对所有在先标识符的操作也已完成的情况下位于已完成的最后标识之后的任何滑动窗口标识空间相关联的任何同步存储窗口上的所有操作。
在另一示例中,可以实现检查点。在检查点模型中,取决于统一的一组前体操作的完成并且所有连续操作然后取决于的特殊操作可以由领导者插入。每个存储系统然后可以响应于所有前体操作已被存留或者完成而存留检查点。可以在前一个检查点已被发信号通知为存留在用于豆荚的所有同步存储系统上之后的某个时间启动连续检查点。因此将不会在跨越豆荚存留所有前体操作之后的某个时间之前发起连续检查点;否则,前一个检查点将不会完成。在此模型中,恢复可以包括查询紧跟在前一个到最后检查点之后的所有同步存储系统上的所有操作。这能通过标识为用于豆荚的任何同步存储系统已知的倒数第二个检查点或者通过要求每个存储系统报告自其倒数第二个存留的检查点以来的所有操作来实现。另一方面,恢复可以包括搜索已知已在所有同步存储系统上完成的最后检查点并且可以包括查询在任何同步存储系统上跟随的所有操作—如果检查点在所有同步存储系统上完成,则在该检查站之前的所有操作都清楚地存留在各处。
在另一示例中,可以实现基于逻辑盘区的复制的有向非循环图对豆荚的恢复。然而,在描述这样的实施方式之前,首先描述使用逻辑盘区的有向非循环图的存储系统。
可以基于包括逻辑盘区的有向非循环图实现存储系统。在此模型中,可将逻辑盘区分类为两种类型:叶逻辑盘区,其以某种方式引用一定量的存储的数据;以及复合逻辑盘区,其引用其他叶或复合逻辑盘区。
叶盘区可以各种方式引用数据。它可直接地指向单个范围的存储的数据(例如,64千字节的数据),或者它可以是对存储的数据的引用的合集(例如,将与范围相关联的一定数量的虚拟块映射到物理存储块的1兆字节“范围”的内容)。在后者情况下,可以使用某个标识来引用这些块,并且可以不将在盘区的范围内的一些块映射到无论什么。另外,在后者情况下,这些块引用不必是唯一的,从而允许来自在一定数量的卷内且跨越一定数量的卷的一定数量的逻辑盘区内的虚拟块的多个映射映射到相同的物理存储块。代替存储块引用,逻辑盘区能对简单模式进行编码:例如,作为相同字节的串的块能简单地对该块是相同字节的重复模式进行编码。
复合逻辑盘区可以是具有某个虚拟大小的内容的逻辑范围,其包括多个映射,所述多个映射各自从内容的复合逻辑盘区逻辑范围的子范围映射到底层叶或复合逻辑盘区。变换对复合逻辑盘区的与内容有关的请求然后涉及在复合逻辑盘区的上下文内取针对请求的内容范围、确定请求映射到哪些底层叶或复合逻辑盘区以及变换请求以适用于那些底层叶或复合逻辑盘区内的内容的适当范围。
卷或文件或其他类型的存储对象可被描述为复合逻辑盘区。因此,可使用此盘区模型来组织这些呈现的存储对象(其在我们的多数讨论中将被简称为卷)。
取决于实施方式,能从多个其他复合逻辑盘区引用叶或复合逻辑盘区,从而有效地允许内容的较大合集在卷内并跨越卷的便宜复制。因此,逻辑盘区可被基本上布置在引用的非循环图内,每个引用在叶逻辑盘区中结束。这可用于做出卷的副本,做出卷的快照,或者作为作为EXTENDED COPY或类似类型的操作的一部分在卷内并在卷之间支持虚拟范围拷贝的一部分。
实施方式可以给每个逻辑盘区提供可用于命名它的标识。这简化引用,因为复合逻辑盘区内的引用变成包括逻辑盘区标识的列表和与每个这样的逻辑盘区标识相对应的逻辑子范围。在逻辑盘区内,每个存储的数据块引用也可以基于用于命名它的某个标识。
为了支持盘区的这些重复使用,我们可添加另一个能力:写时拷贝逻辑盘区。当修改操作影响写时拷贝叶或复合逻辑盘区时逻辑盘区被拷贝,其中拷贝是新引用并且可能具有新标识(取决于实施方式)。拷贝保留与底层叶或复合逻辑盘区有关的所有引用或标识,但是同时无论什么修改由修改操作产生。例如,WRITE、WRITE SAME、XDWRITEREAD、XPWRITE或COMPARE AND WRITE请求可以在存储系统中存储新块(或者使用重复删除技术来标识现有存储块),从而导致修改所对应的叶逻辑盘区以引用或者存储标识到一组新块,可能替换先前一组块的引用和存储的标识。另一方面,UNMAP请求可以修改叶逻辑盘区以移除一个或多个块引用。在两种类型的情况下,叶逻辑盘区被修改。如果叶逻辑盘区是写时拷贝,则将创建新叶逻辑盘区,所述新叶逻辑盘区是通过从旧盘区拷贝未受影响的块引用并且然后基于修改操作替换或者移除块引用而形成的。
然后可以修改用于定位叶逻辑盘区的复合逻辑盘区以存储与所拷贝和修改的叶逻辑盘区相关联的新叶逻辑盘区引用或标识作为针对前一个叶逻辑盘区的替换。如果该复合逻辑盘区是写时拷贝,则新复合逻辑盘区被创建为新引用或者有新标识,并且其底层逻辑盘区的任何未受影响的引用或标识被拷贝到该新复合逻辑盘区,同时前一个叶逻辑盘区引用或标识被新叶逻辑盘区引用或标识替换。
此过程基于通过用于处理修改操作的非循环图的搜索路径继续从引用的盘区进一步向后到引用复合盘区,其中所有写时拷贝逻辑盘区被拷贝、修改和替换。
这些拷贝的叶和复合逻辑盘区然后可丢弃为写时拷贝的特性,使得进一步修改不会产生附加副本。例如,写时拷贝“父”复合盘区内的第一时间某个底层逻辑盘区被修改,可以拷贝并修改底层逻辑盘区,其中副本具有然后被写入到父复合逻辑盘区的拷贝且替换的实例中的新标识。然而,第二时间某个其他底层逻辑盘区被拷贝和修改并且在该其他底层逻辑盘区副本的新标识被写入到父复合逻辑盘区情况下,然后可代表对父复合逻辑盘区的引用在进一步拷贝和替换不必要的情况下适当修改父盘区。
对没有当前叶逻辑盘区的卷或复合逻辑盘区的新区域的修改操作可以创建新叶逻辑盘区来存储那些修改的结果。如果要从现有写时拷贝逻辑盘区引用新逻辑盘区,则将修改该现有写时拷贝复合逻辑盘区以引用新逻辑盘区,从而产生类似于用于修改现有叶逻辑盘区的序列的另一拷贝、修改和替换操作序列。
如果父复合逻辑盘区不能增长得足够大(基于实施方式)以覆盖包括要为新修改操作创建的新叶逻辑盘区的关联的地址范围,则父复合逻辑盘区可以被拷贝到两个或更多个新复合逻辑盘区中,所述两个或更多个新复合逻辑盘区然后被从又再次为新引用或新标识的单个“祖父”复合逻辑盘区引用。如果该祖父逻辑盘区它本身是通过为写时拷贝的另一复合逻辑盘区找到的,则将以与先前段落中所描述的类似的方式拷贝并修改且替换另一复合逻辑盘区。此写时拷贝模型可被用作基于逻辑盘区的这些有向非循环图在存储系统实施方式内实现快照、卷副本和虚拟卷地址范围拷贝本的一部分。为了做出快照作为以其他方式可写卷的只读副本,与该卷相关联的逻辑盘区的图被标记为写时拷贝并且通过快照保留对原始复合逻辑盘区的引用。对卷的修改操作然后将按需做出逻辑盘区副本,从而产生存储那些修改操作的结果的卷和保留原始内容的快照。卷副本是类似的,除了原始卷和所拷贝的卷都可修改内容从而产生它自己的拷贝的逻辑盘区图和子图。
虚拟卷地址范围拷贝可通过在叶逻辑盘区内和之间拷贝块引用来操作(除非对块引用的改变修改写时拷贝叶逻辑盘区,否则它本身不涉及使用写时拷贝技术)。另一方面,虚拟卷地址范围拷贝可重复对叶或复合逻辑盘区的引用,这很适用于较大地址范围的卷地址范围拷贝。进一步地,这允许图变成引用的有向非循环图,而不仅仅是引用树。与重复的逻辑盘区引用相关联的写时拷贝技术可用于确保对虚拟地址范围拷贝的源或目标的修改操作将导致用于存储那些修改的新逻辑盘区的创建,而不影响紧接在卷地址范围拷贝操作之后共享同一逻辑盘区的目标或源。
还可以基于复制逻辑盘区的有向非循环图实现针对豆荚的输入/输出操作。例如,豆荚内的每个存储系统能实现逻辑盘区的私有图,使得用于豆荚的一个存储系统上的图与用于该豆荚的任何第二存储系统上的图没有特定关系。然而,在豆荚中的存储系统之间使图同步是有价值的。这可用于重新同步并且用于协调诸如异步或基于快照的复制到远程存储系统这样的特征。进一步地,它可以用于减少用于处理快照和拷贝相关处理的分发的一些开销。在这样的模型中,跨越用于豆荚的所有同步存储系统使豆荚的内容保持同步与跨越用于豆荚的所有同步存储系统使叶和复合逻辑盘区的图保持对所有卷来说同步基本上相同,并且确保所有逻辑盘区的内容同步。为了同步,匹配叶和复合逻辑盘区应该具有相同的标识或者应该具有可映射的标识。映射能涉及某一组中间映射表或者能涉及某种其他类型的标识转换。在一些情况下,也能使由叶逻辑盘区所映射的块的标识保持同步。
在基于领导者和跟随者的豆荚实施方式中,其中每个豆荚有单个领导者,领导者可以负责确定逻辑盘区图的任何变化。如果要创建新叶或复合逻辑盘区,则它可被给予标识。如果要拷贝现有叶或复合逻辑盘区以形成具有修改的新逻辑盘区,则可将新逻辑盘区描述为具有某一组修改的前一个逻辑盘区的副本。如果要分割现有逻辑盘区,则可连同新结果得到的标识一起描述分割。如果要将逻辑盘区从某个附加复合逻辑盘区引用为底层逻辑盘区,则可将该引用描述为复合逻辑盘区的变化以引用该底层逻辑盘区。
豆荚中的修改操作因此包括分发对逻辑盘区图的修改的描述(其中新逻辑盘区被创建以扩展内容或者其中逻辑盘区被拷贝、修改和替换以处理与快照、卷拷贝和卷地址范围拷贝有关的写时拷贝状态)并且分发用于对叶逻辑盘区的内容的修改的描述和内容。如上所述,来自以有向非循环图的形式使用元数据的附加好处是可以通过修改与物理存储装置中的所存储的元数据相对应的元数据来在用户级别下实现修改物理存储装置中的存储的数据的I/O操作—而无需修改物理存储装置中的所存储的数据。在所公开的存储系统的实施方式中,其中物理存储装置可以是固态驱动器,由于I/O操作是通过修改表示以I/O操作作为目标的数据的元数据而不是通过读取、擦除或写入闪速存储器来实现的,可以避免或者减少伴随对闪速存储器的修改的磨损。进一步地,在虚拟化存储系统中,上述的元数据可以用于处理虚拟或逻辑地址与物理或真实地址之间的关系—换句话说,存储的数据的元数据表示使得能实现可以被认为是闪存友好的虚拟化存储系统,因为它减少或者使闪速存储器上的磨损最小化。
领导者存储系统可以执行它们自己的本地操作以在它们的豆荚数据集的本地副本和本地存储系统的元数据的上下文中实现这些描述。进一步地,同步跟随者执行它们自己的单独的本地操作以在它们的豆荚数据集的单独的本地副本和它们单独的本地存储系统的元数据的上下文中实现这些描述。当领导者和跟随者操作都完成时,结果是具有兼容叶逻辑盘区内容的逻辑盘区的兼容图。逻辑盘区的这些图然后变成如先前示例中所描述的一种“公共元数据”。此公共元数据可被描述为修改操作与所需公共元数据之间的依赖性。对图的变换可被描述为与后续修改操作具有队列谓词关系的单独的操作。另一方面,依靠仍然尚不知道跨越豆荚完成的特定相同的图变换的每个修改操作可包括它依靠的任何图变换的部分。处理标识已经存在的“新”叶或复合逻辑盘区的操作描述可避免创建新逻辑盘区,因为该部分已经在某个较早操作的处理中被处理,并且可替代地仅实现操作处理的改变叶或复合逻辑盘区的内容的部分。领导者的角色是确保变换彼此兼容。例如,我们可从对来说豆荚进入的两个写入进来开始。第一写入用被形成为复合逻辑盘区B的副本替换复合逻辑盘区A,利用副本作为叶逻辑盘区D替换叶逻辑盘区C,并且利用修改来存储第二写入的内容,并且进一步将叶逻辑盘区D写入到复合逻辑盘区B中。同时,第二写入暗示复合逻辑盘区A与复合逻辑盘区B相同的拷贝和替换,但是拷贝并用逻辑盘区F替换不同的叶逻辑盘区E,所述逻辑盘区F被修改以存储第二写入的内容,并且进一步将逻辑盘区F写入到逻辑盘区B中。在那种情况下,针对第一写入的描述可包括用B替换A和用D替换C并将D写入到复合逻辑盘区B中以及将第一写入的内容写入到叶盘区B中;并且,第二写入的描述可包括用B替换A和用F替换E并将F写入到复合逻辑盘区B中以及将被写入到叶盘区F的第二写入的内容。领导者或任何跟随者然后可以任何次序单独地处理第一写入或第二写入,并且最终结果是B拷贝并替换A、D拷贝并替换C、F拷贝替换E并且D和F被写入到复合逻辑盘区B中。可通过识别B已经存在来避免A的第二拷贝以形成B。以这种方式,领导者可确保豆荚跨越用于豆荚的同步存储系统为逻辑盘区图维护兼容公共元数据。
给定使用逻辑盘区的有向非循环图的存储系统的实施方式,可以实现基于逻辑盘区的复制的有向非循环图的豆荚的恢复。具体地,在此示例中,豆荚中的恢复可以基于复制的盘区图,然后涉及恢复这些图的一致性以及恢复叶逻辑盘区的内容。在恢复的这种实施方式中,操作可以包括查询不知道已在用于豆荚的所有同步存储系统上完成的图变换,以及不知道已跨越用于豆荚的所有存储系统完成的所有叶逻辑盘区内容修改。这样的查询能基于自某个协调检查点以来的操作,或者可能简单地是不知道已完成的操作,其中每个存储系统在正常操作期间保持仍然尚未被发信号通知已完成的操作的列表。在此示例中,图变换是直截了当的:图变换可以创建新事物,将旧事物拷贝到新事物,并且将旧事物拷贝到两个或更多个分割的新事物中,或者它们修改复合盘区以修改它们对其他盘区的引用。在创建或者替换任何逻辑盘区的任何同步存储系统上找到的任何存储的操作描述可在仍然不具有该逻辑盘区的任何其他存储系统上被拷贝和执行。描述对叶或复合逻辑盘区的修改的操作可将那些修改应用于仍然尚未应用它们的任何同步存储系统,只要所涉及的叶或复合逻辑盘区已被适当地恢复即可。
进一步地在此示例中,豆荚的恢复可以包括下列的:
·查询所有同步存储系统是否有叶和复合逻辑盘区创建,并且若有的话则查询不知道已在用于豆荚的所有同步存储系统上完成的其前体叶和复合逻辑盘区;
·查询所有同步存储系统是否有对不知道已在用于豆荚的所有同步存储系统上完成的叶逻辑盘区的修改操作。
·查询逻辑地址范围拷贝操作作为对现存叶和复合逻辑盘区的新引用;
·标识不知道已对叶逻辑盘区完成并且该叶逻辑盘区是用于也可能需要恢复的替换叶逻辑盘区的源的修改—使得在尚未已经拷贝它的任何同步存储系统上恢复叶逻辑盘区拷贝之前,对于所有同步存储系统而言可对该叶逻辑盘区完成修改;
·完成所有叶和复合逻辑盘区拷贝操作;
·对叶和复合逻辑盘区应用所有进一步的更新包括命名新逻辑盘区引用、更新叶逻辑盘区内容或者移除逻辑盘区引用;以及
·确定所有必要的操作已完成,此时恢复的进一步方面可以继续进行。
在另一示例中,作为使用逻辑盘区图的替代方案,可以基于复制的内容可寻址暂存器实现存储装置。在内容可寻址暂存器中,对于数据的每个块(例如,每512个字节、4096个字节、8192个字节或甚至16384个字节),基于块内容计算唯一散列值(有时也称作指纹),使得可将卷或卷的盘区范围描述为对具有特定散列值的块的引用的列表。在基于对具有相同散列值的块的引用的同步地复制的存储系统实施方式中,复制能涉及第一存储系统接收块、计算用于那些块的指纹、标识用于那些指纹的块引用以及将变化递送到一个或多个附加存储系统作为对卷块到引用块的映射的更新。如果发现块已经被第一存储系统存储,则该存储系统可使用它的引用来命名附加存储系统中的每一个中的引用(因为引用使用相同的散列值或者因为用于引用的标识符是相同的或者可被容易地映射)。另一方面,如果第一存储系统未找到块,则可以将第一存储系统的内容作为操作描述的一部分连同与该块内容相关联的散列值或标识一起递送到其他存储系统。进一步地,然后用新块引用更新每个同步存储系统的卷描述。这样的暂存器中的恢复然后可以包括针对卷比较最近更新的块引用。如果块引用在用于豆荚的不同的同步存储系统之间不同,则可将每个引用的一个版本拷贝到其他存储系统以使它们变得一致。如果一个系统上的块引用不存在,则从存储用于该引用的块的某个存储系统拷贝它。通过拷贝引用作为实现虚拟拷贝操作的一部分,可在这样的块或散列引用暂存器中支持虚拟拷贝操作。
关于用于系统恢复的具体实施方式,图18中描绘的示例方法包括由同步地复制数据集(1812)的多个存储系统(1814,1824,1828)当中的至少一个存储系统接收(1842)要修改数据集(1812)的请求(1804)。接收(1842)要修改数据集(1812)的请求(1804)可以类似于接收(1806)要修改数据集(1842)的请求(1804)被实现。
图18中描绘的示例方法还包括生成(1844)指示要修改数据集(1812)的请求(1804)是否已被应用在同步地复制数据集(1812)的所述多个存储系统(1814,1824,1828)中的所有存储系统上的恢复信息(1852)。生成(1844)指示要修改数据集(1812)的请求(1804)是否已被应用在同步地复制数据集(1812)的所述多个存储系统(1814,1824,1828)中的所有存储系统上可以使用上述的各种技术来实现,包括:基于差异跟踪的恢复;基于操作跟踪的恢复,包括重叠写入的恢复;快照的恢复;元数据和公共元数据的恢复;基于记录用于操作跟踪的最近活动的恢复,包括清出完成操作、使用滑动窗口和使用检查点;基于逻辑盘区的复制的有向非循环图对豆荚的恢复;以及复制的内容可寻址暂存器中的跟踪和恢复。简而言之,可以使用各种技术来生成恢复信息,其中该恢复信息指示要修改数据集(1812)的请求(1804)已被应用在所述多个存储系统(1814,1824,1828)当中的哪些存储系统上。
图18中描绘的示例方法还包括,响应于系统故障,按照指示要修改的请求是否已被应用在同步地复制数据集(1812)的所述多个存储系统(1814,1824,1828)中的所有存储系统上的恢复信息(1852)应用(1846)恢复动作。可以通过在确实未应用要修改数据集(1812)的请求(1804)的所有存储系统上应用要修改数据集(1812)的请求(1804)来实现恢复动作—其中恢复信息(1852)可以包括指示所述多个存储系统(1814,1824,1828)当中的哪些存储系统确实或者确实未应用一个或多个要修改同步地复制的数据集(1812)的请求(包括最近接收到的请求(1804))的跟踪信息。然而,在其他情况下,可以通过撤销或者取消要修改数据集(1812)的请求(1804)在完成了或者部分地完成了请求(1804)的应用的存储系统的集合上的应用来实现恢复动作。通常,默认恢复动作可以是标识确实未成功地完成请求(1804)的每个存储系统,并且除了任何其他待决的要修改数据集(1812)的请求之外还应用请求(1804)。在上面参考以下描述来描述恢复动作的其他实施方式:基于差异跟踪的恢复;基于操作跟踪的恢复,包括重叠写入的恢复;快照的恢复;元数据和公共元数据的恢复;基于记录用于操作跟踪的最近活动的恢复,包括清出完成操作、使用滑动窗口和使用检查点;基于逻辑盘区的复制的有向非循环图对豆荚的恢复;以及复制的内容可寻址暂存器中的跟踪和恢复。
为了进一步说明,图19阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的恢复的示例方法的流程图。图19中描绘的示例方法类似于图18中描绘的示例方法,因为图19中描绘的示例方法还包括:由同步地复制数据集(1812)的多个存储系统(1814,1824,1828)当中的至少一个存储系统接收(1842)要修改数据集(1812)的请求(1804);生成(1844)指示要修改数据集(1812)的请求(1804)是否已被应用在同步地复制数据集(1812)的所述多个存储系统(1814,1824,1828)中的所有存储系统上的恢复信息(1852);以及响应于系统故障,按照指示要修改的请求是否已被应用在同步地复制数据集(1812)的所述多个存储系统(1814,1824,1828)中的所有存储系统上的恢复信息(1852)应用(1846)恢复动作。
然而,图19中描绘的示例方法进一步指定生成(1844)恢复信息包括查询(1902)所述多个存储系统中的其他存储系统是否有被确认为已被处理的操作;以及确定(1904)操作未被确认为已完成的一组存储系统;以及进一步指定应用(1846)恢复动作包括在该一组存储系统上完成(1906)未被确认为已完成的操作。
可以像上面参考针对支持在豆荚中的卷内和之间同步复制卷范围的虚拟拷贝的存储系统的操作跟踪所描述的那样实现查询(1902)所述多个存储系统中的其他存储系统是否有被确认为已完成或者被处理的操作。具体地,如上面参考在操作被确认为已在用于豆荚的所有同步存储系统上被处理之后跨越所有存储系统清出完成操作所描述的可以通过使接收到请求并且发信号通知完成的存储系统在完成被发信号通知之后向用于豆荚的所有存储系统发送消息从而允许每个存储系统清出它们来实现。恢复然后涉及查询跨越在恢复中涉及的用于豆荚的所有同步存储系统尚未被清出的所有记录的操作。
可以基于来自查询(1902)其他存储系统的结果实现确定(1904)操作未被确认为已在上面完成的存储系统的集合,其中存储系统的集合由查询(1902)包括尚未被清出的操作的列表的一个或多个存储系统填充。
在存储系统的集合上完成(1906)未被确认为已完成的操作可以通过像本文所描述的那样将操作重新发出到存储系统的集合并且针对每个未完成的操作发送描述根据对应请求对数据集(1812)的修改的信息以及完成本文描述的步骤来实现。
为了进一步说明,图20阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的恢复的示例方法的流程图。图20中描绘的示例方法类似于图18中描绘的示例方法,因为图20中描绘的示例方法还包括:由同步地复制数据集(1812)的多个存储系统(1814,1824,1828)当中的至少一个存储系统接收(1842)要修改数据集(1812)的请求(1804);生成(1844)指示要修改数据集(1812)的请求(1804)是否已被应用在同步地复制数据集(1812)的所述多个存储系统(1814,1824,1828)中的所有存储系统上的恢复信息(1852);以及响应于系统故障,按照指示要修改的请求是否已被应用在同步地复制数据集(1812)的所述多个存储系统(1814,1824,1828)中的所有存储系统上的恢复信息(1852)应用(1846)恢复动作(1852)。
然而,图20中描绘的示例方法进一步指定生成(1844)恢复信息包括:通过跟踪对在所述多个存储系统上应用要修改数据集(1812)的请求(2004)的进度来生成(2002)恢复信息(1852)。
如上所述,通过使用检查点来确定被确认为已被处理或者完成的操作,可以实现通过跟踪对在所述多个存储系统上应用要修改数据集(1812)的请求(1804)的进度来生成(2002)恢复信息(1852)。以这种方式,所生成的(2002)恢复信息(1852)可以指示哪些存储系统已经或者尚未处理或者完成要修改数据集(1812)的请求(1804)。
可以通过使用恢复信息(1852)来标识在上面重新发出请求(1804)(这可以如上所述被实现)的一个或多个存储系统并且针对要修改数据集(1812)的请求(1804)发送描述根据请求(1804)对数据集的修改的信息并且完成上述的步骤来实现应用(2004)要修改数据集(1812)的请求(1804)。
在确实未应用要修改数据集(1812)的请求的存储系统上取消(2006)要修改数据集(1812)的请求(1804)可以通过使用恢复信息(1852)来标识在上面处理或者完成了请求(1804)的一个或多个存储系统来实现。进一步地,取消(2006)请求可以取决于对于在上面完成了请求(1804)的每个存储系统,在每个存储系统上维护与每个要修改数据集(1812)的请求相对应的变化的日志,其中每个要修改数据集(1812)的请求可以进一步与标识符相关联。日志还可以针对每个请求标识符,在应用请求标识符之前使包括表示数据集的状态的有向非循环图的元数据表示的版本相关联。在一些示例中,这样的版本控制信息可以对应于快照。如上面所讨论的,给定数据集的虚拟化表示,并且如果存储仅与对应于特定请求的数据集的元数据表示的差异,除了通过所对应的要修改数据集的请求覆写数据之外,还应该使对日志的存储要求最小化。以这种方式,使用日志,存储系统的控制器可以在应用请求(1804)之前将数据集的状态恢复到在先状态,并且在应用请求(1804)之前将元数据表示的当前状态定义为在先状态。
为了进一步说明,图21阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的示例方法的流程图。尽管被不太详细地描绘,然而图21中描绘的存储系统(2114,2124,2128)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图21中描绘的存储系统(2114,2124,2128)可以包括与上述的存储系统相同、更少、附加的组件。
图21中描绘的示例存储系统配置包括数据集(2112)以及可以同步地复制数据集(2112)所跨越的多个存储系统(2114,2124,2128)。图21中描绘的数据集(2112)可以例如作为特定卷的内容、作为卷的特定分片的内容或者作为一个或多个数据元素的任何其他合集被具体实现。可以跨越多个存储系统(2114,2124,2128)使数据集(2112)同步,使得每个存储系统(2114,2124,2128)保留数据集(2112)的本地副本。在本文描述的示例中,跨越存储系统(2114,2124,2128)同步地复制这样的数据集(2112),使得可通过具有执行特性的存储系统(2114,2124,2128)中的任一个来访问数据集(2112),使得集群中的任何一个存储系统不比集群中的任何其他存储系统基本上更优地操作,至少只要正被访问的集群和特定存储系统名义上在运行即可。在这样的系统中,应该对驻留在每个存储系统(2114,2124,2128)上的数据集的副本做出对数据集(2112)的修改,使得访问存储系统(2114,2124,2128)中的任一个上的数据集(2112)将产生一致的结果。例如,发出到数据集的写入请求必须在所有存储系统(2114,2124,2128)上被服务或者在存储系统(2114,2124,2128)上都未被服务。
进一步地,对于数据集(2112),例如,通过检查使数据集(2112)与名义上存储该数据集(2112)的一个或多个存储系统(2114,2124,2128)相关联的豆荚定义或类似的数据结构,可以执行将同步地复制数据集(2112)所跨越的多个存储系统(2114,2124,2128)。在这样的示例中,豆荚定义可以至少包括数据集(2112)以及同步地复制数据集(2112)所跨越的一组存储系统(2114,2124,2128)的标识。这样的豆荚可以封装一定数量的(可能是可选的)属性,包括对称访问、副本的灵活添加/移除、高可用性数据一致性、在与数据集的关系上跨越存储系统的统一用户管理、受管理主机访问、应用集群等。可将存储系统添加到豆荚,从而导致豆荚的数据集(2112)被拷贝到该存储系统并且然后随着数据集(2112)被修改而保持最新。还可从豆荚中移除存储系统,从而导致数据集(2112)在已移除的存储系统上不再保持最新。在这样的示例中,可以随着存储系统被添加到特定豆荚并且从特定豆荚中移除而更新豆荚定义或类似的数据结构。
图21中描绘的示例存储系统还包括要用于同步地复制数据集(2112)的所述多个存储系统(2114,2124,2128)中的每一个之间的一个或多个数据通信链路(2116,2118,2120)。在图21中描绘的示例方法中,豆荚中的存储系统(2114,2124,2128)彼此通信以用于高带宽数据转移并且以用于集群、状态和管理通信。这些不同类型的通信能通过相同的数据通信链路(2116,2118,2120)进行,或者在替代实施例中,这些不同类型的通信能通过单独的数据通信链路(2116,2118,2120)进行。
可以在通过引用整体地包括的美国临时申请62/470,172和62/518,071中找到用于实现同步地复制数据集的存储系统的其他细节。
如图21中所描绘的,多个存储系统(2114,2124,2128)正在同步地复制数据集(2112)并且可以在正常操作期间彼此通信以便接收和处理来自主计算设备的I/O请求。然而,在一些情况下,存储系统(2114,2124,2128)中的一个或多个可能失效、重新启动、升级或者以其他方式不可用,并且因此一个或多个存储系统(2114,2124,2128)可能变得不同步。为了重新开始正常操作,同步存储系统和不同步存储系统经历恢复和重新同步操作—其中在通过引用整体地包括在本文中的申请参考文献No.15/696,418中对恢复进行了更详细的描述,并且在下面对重新同步进行描述。
添加到豆荚的存储系统的初始同步—或已从豆荚分离的存储系统的后续重新同步—包括在该存储系统联机以主动用于提供豆荚服务之前将所有内容或所有遗漏内容从用于豆荚的同步存储系统拷贝到未初始化或不同步的存储系统。可以针对作为豆荚的扩展而引入的每个存储系统执行这样的初始同步。
内容到添加到豆荚的存储系统的初始同步与使已通过某一组事件相对于用于豆荚的同步存储系统变得不同步的存储系统重新同步之间的差异在概念上相当类似。在重新同步的情况下,例如,在同步豆荚成员存储系统与不同步豆荚成员之间可能不同的所有块在不同步豆荚成员可作为用于豆荚的同步豆荚成员存储系统重新联机之前成为最新的。在初始同步中,这可以包括更新所有块,并且因此,它在概念上类似于所有块可以不同的重新同步。换句话说,初始同步可以被认为相当于重新附连在豆荚开始时、在已从初始状态修改任何卷之前或者在已创建或者向豆荚添加任何卷之前分离的存储系统。
通常,重新同步完成至少两件事情以把分离的豆荚带回到它同步的点并且可重新联机:(a)撤销、覆写或者以其他方式替换在它被分离的时候被存留在尚未被同步豆荚成员保留的已分离的豆荚上的任何变化,以及(b)更新附加存储系统以与豆荚的内容和公共元数据匹配。为了重新联机,存储系统的重新附连可以包括重新启用同步复制、重新启用对称同步复制并且在已重新附连的存储系统上重新启用针对豆荚的操作的接收和处理。针对豆荚的操作可以包括读取、数据修改操作或管理操作。
在分离存储系统的过程中,一定数量的操作对豆荚来说可以一直在进行中。进一步地,那些操作中的一些可能已仅存留在已分离的存储系统上,其他操作可能已仅存留在紧接在分离被处理之后保持同步的存储系统上,并且其他操作可能已存留在已分离的存储系统和保持同步的存储系统两者上。在此示例中,因为豆荚的同步状态可能尚未记录仅存留在已分离的存储系统上的操作,所以自存储系统的分离以来对豆荚的同步内容和公共元数据的任何更新将不包括那些更新,这是这些更新应该被撤消的原因—要么通过取消更新显式地进行,要么通过覆写该内容作为重新同步的一部分隐式地进行。在同步存储系统本身上,可以有要在开始分离的存储系统的重新附连之前说明的两个列表:(a)操作的列表,所述操作可以被称为在分离时列举的同步待决操作,其在进行中并被存留在当重新附连存储系统与豆荚分离时同步并且在与豆荚分离之后的任何持续时间内保持同步的任何存储系统上,以及(b)在重新附连存储系统与豆荚分离的时间窗口期间的内容或公共元数据的变化的列表。进一步地,取决于豆荚和存储系统实施方式,与同步存储系统相关联的两个列表可以通过单个列表来表示:不知道在重新附连存储系统上的内容。在多个存储系统被分离的豆荚中,并且特别是那些储系统在不同时间对自每次分离以来的变化的跟踪可以产生单独的列表的情况下—以及如何描述那些列表可以从一个豆荚实施方式到另一豆荚实施方式大大地变化。在一些情况下,除跟踪从分离的时间起的变化并且将那些变化拷贝到附连存储系统外的附加问题是确保在重新同步期间接收到的新修改操作被应用于附连存储系统。在概念上,可以将这个问题描述为确保用于拷贝数据的操作和由豆荚接收到的修改操作的处理可以被合并,使得结果在附连结束时并且在将附连存储系统认为对豆荚来说同步之前是正确地最新的。
关于简单变化内容重新同步,用于重新同步的一个模型是为了生成块的完整列表—分离块列表—其在同步存储系统与附连存储系统之间可以不同,并且是为了开始复制对跟随者存储系统来说会发生的任何修改操作。可以不同的块的完整列表可以包括来自在与同步存储系统分离时列举的同步待决操作、在与附连存储系统分离时的待决操作、以及已知自分离以来已改变的块的那些块。修改操作可以如所描述的那样存储它们的修改内容,并且重新同步可以通过定位来自已分离的块列表的块的范围并且将各部分中的那些块从同步存储系统拷贝到附连存储系统而继续进行。在此示例中,在拷贝特定部分时,与正被拷贝的部分重叠的传入修改操作可以在拷贝期间被拖延,或者可以做出在部分已被拷贝之后应用那些修改操作的布置。此解决方案可能对于虚拟块范围拷贝操作产生问题,诸如EXTENDED COPY操作的虚拟化实施方式。进一步地,用于拷贝的范围可能尚未被重新同步,然而目标范围可能已经被重新同步,这意味着虚拟块范围拷贝操作的直接实施方式可能(取决于实施方式)未能将正确的数据拷贝到目标范围,因为在接收到虚拟块范围拷贝操作时不知道数据,或者可能未能正确地使目标范围重新同步,因为重新同步操作它本身可能已假定目标范围在它从未被以其最终形式重新同步时被正确地同步。然而,对于这个问题有若干解决方案。一个解决方案是在重新同步期间禁止虚拟块范围拷贝操作。这可以在许多情况下工作,因为虚拟块范围拷贝操作—包括客户端操作文件系统文件拷贝操作和虚拟机克隆或迁移操作—的常见用途通常通过通过读取和写入请求的序列本身直接地拷贝内容来对虚拟块范围拷贝失败做出响应。另一解决方案是记住未完成的虚拟范围拷贝操作,而不是覆写任何虚拟地址范围拷贝操作的目标地址范围的修改操作,然后当源数据变得可用时在说明覆写的同时执行拷贝操作。如果重新同步的目标可能不知道用于拷贝的源数据是不正确的,则可能必须推迟所有这样的操作直到整个拷贝完成为止。重新同步的目标知道哪些区域仍然尚未被拷贝或者可以知道重新同步何时已完成处理卷的特定区域的优化是可能的。
使存储系统重新同步的另一方面可以是更新块跟踪。例如,保持在存储系统被分离的同时修改的所有单独的块的列表(然后单独地使它们重新同步)在一些情况下可能是不切实际的,因为延长的运转中断可以产生大量块—并且一些存储系统不能非常高效地读取非顺序块的大合集。因此,在一些情况下,开始跟踪区域(例如,卷的1MB范围)以减少被跟踪元数据的量可能是更实际的。此粗粒度跟踪可以在短期操作跟踪之后被更新,并且可以被保存和处理任何过时存储系统的重新同步所需的一样长,无论当机持续数分钟、数小时、数天还是数周。在固态存储装置情况下,与机械自旋存储装置相反,跟踪卷或卷的合集或整个豆荚的单独的块可能是相当实际的,因为仅使已改变的那些单独的块重新同步。通常,随机读取和写入惩罚很少,并且从多级映射读取几乎没有什么损失,因此,将作为短时间段内的操作(例如,在100毫秒到10秒范围内或每几百个到每几千个操作)的细粒度活动合并成命名所有修改的块的细粒度图是相对容易的。进一步地,最近活动的列表可以是涵盖最近已被记录到日志设备(快写存储装置,诸如旨在支持高写入带宽和高覆写速率的各种NVRAM)中的内容修改的列表,但是具有关于可能保存在日志中持续比实际内容长的时间段的那些修改的元数据。在此示例中,所有活动的合并列表可以是位图,其中每个位表示块或一小组块,或者它可以是块编号的列表或按均组织成树结构(诸如B树)的块范围的列表。块编号的这样的列表可以被容易地压缩,因为附近的块编号可以作为从一个块编号到另一块编号的差异被存储。
使存储系统重新同步还可以包括通过跟踪序列号进行块跟踪。例如,一些存储系统可以在正常操作期间使相应的序列号与相应的修改相关联—对于所有修改。在这样的情况下,已知已与从豆荚分离的存储系统同步的最后序列号可以是查询用于豆荚的同步存储系统以找到自分离以来已被修改的所有内容(包括在分离的时间附近可能尚未被复制到已分离的阵列的任何内容)所需的全部。
使存储系统重新同步还可以包括将变化跟踪为快照。例如,快照可以用于跟踪自过去某个时间以来的变化,并且存储系统可以通过排除不知道已完成的内容来制作在分离时的快照。可替代地,可以在定期基础上或者按某个周期创建快照,其中可以将快照创建的时间与分离的时间相比较以确定哪一个快照可以用作用于使已分离的存储系统重新同步的基础。作为变体,在分离之前跨越豆荚创建的任何快照应该存在于用于豆荚的同步且分离的存储系统中并且可以被以各种方式用于重新同步。例如,正被重新附连的存储系统的内容可以被回复到其在日期上早于分离的最后同步的快照,然后从该点向前滚动以与豆荚中的当前同步内容匹配。通常,快照指示相对于前一个快照的差异或者指示与当前内容的差异。使用快照的这些特征,将内容重新同步到重新附连存储系统可以包括复制重新附连的时间与最后完成预分离同步的快照的时间之间的差异。在一些情况下,重新同步可以使用基于快照的模型作为备用物。例如,可以通过自存储系统分离的时间以来已发生的细粒度跟踪或记录和重放操作来处理短运转中断(诸如大约几分钟的运转中断),并且可以通过回复到每几分钟取的快照来处理较长的运转中断—其中阈值分钟数可以是默认值或者由用户或管理员指定。这样的配置可以是实际的,因为相对不频繁的快照可以具有低长期开销但是可以生成要重新同步的更多数据。例如,可以通过重放记录的操作来处理10秒运转中断,其中可以在10秒或更少内发生重新同步—然而在分离之前5分钟取的快照可以在一些情况下转移值得内容修改的最多5分钟。在其他情况下,在运转中断之后的重新同步可以基于累积变化,诸如通过对短期映射的累积大小的限制。
在一些情况下,重新同步可以基于异步复制。例如,上面讨论的基于快照的重新同步模型还可以支持另一重新同步模型:支持异步或周期性复制的存储系统可以使用快照机制来在重新同步期间复制内容。异步或周期性复制模型可以在运转中断的短时段期间潜在地拷贝过时数据,其中周期性复制模型可以基于快照或检查点差异化,并且其中差异化自动地处理运转中断。至于异步复制,可能依靠快照或检查点作为用于延长运转中断的备份,类似于上面的讨论,并且结果,组合实施方式或者将这样可用的异步或周期性复制实施方式用于重新同步可能是实际的。然而,一个问题可能是异步或周期性复制模型可能未被配置为使复制目标始终保持最新或完全同步。结果,利用这样的重新同步实施方式,还可以跟踪新的飞行中操作,使得可以应用飞行中操作,使得对附连存储系统的所有修改对豆荚来说是当前的。
在一些情况下,可以实现重新同步以包括多阶段重新同步。例如,在第一阶段中,可以将直到某个点的内容从用于豆荚的同步存储系统复制到用于豆荚的附连存储系统。在此示例中,可以在附连期间取第二快照,并且作为最后快照的第一快照之间的差异已知在分离之前已被同步,并且第一快照与第二快照之间的差异将被复制到附连存储系统。这样的机制可以使附连存储系统与它在附连之前相比更紧密地同步,然而,它可能仍然不是最新的。因此,可以创建第三快照,并且可以确定第三快照与第二快照之间的差异,然后将这些差异复制到附连存储系统。此第三快照和所确定的差异可以组成直到第二快照复制的内容与当前内容之间的差异的一部分。进一步地,可能的是可以取得并复制附加快照以得以在几秒钟内成为最新的。此时,可以暂停修改操作直到最后快照被复制为止—从而使附连存储系统对豆荚来说是最新的。在其他情况下,可以在复制一个或多个快照之后切换到在最终重新同步快照之后接收到的修改操作被处理使得它们可与所复制的快照内容合并的某种模式。这样的实施方式可以包括使附连存储系统跟踪那些修改操作,并且在快照复制完成之后或者在已知快照复制已使受到特定修改操作影响的具体卷区域同步之后应用修改操作。此实施方式可以具有附加开销,因为跟踪所有操作直到已知底层内容已被拷贝可以产生大量被跟踪操作。替代方案是考虑与最近接收到的操作有关的内容,例如依靠特定公共元数据的写入或从一个块范围到另一块范围的扩展拷贝操作,并且请求重新同步优先考虑该内容或该公共元数据信息的处理。以这种方式,与已知已通过这样的过程拷贝的内容绑定的任何接收到的操作然后可以使跟踪结构被更快地释放。
在一些情况下,可以实现重新同步以使用逻辑盘区的有向非循环图。如上所述,复制的存储系统可以基于逻辑盘区的有向非循环图。在这样的存储系统中,可以期望重新同步的过程将逻辑盘区图从用于豆荚的同步存储系统复制到用于豆荚的附连存储系统—包括所有叶逻辑盘区内容,并且确保图在将附连存储系统作为同步豆荚成员来启用之前被同步并正在保持同步。此模型中的重新同步可以通过使用于附连的目标存储系统针对每个卷或者针对基于文件或对象的存储系统中的每个文件或对象来取回顶级盘区标识而继续进行。对附连目标而言已经已知的任何逻辑盘区标识可以被认为是最新的,但是可以取回任何未知的复合逻辑盘区,然后将它分解成底层叶或复合逻辑盘区,其中的每一个对附连目标而言是已经已知的或者对附连目标而言是未知的。进一步地,任何未知的叶逻辑盘区可以取回内容,或者可取回用于存储的块的标识以确定该块是否已经由目标存储系统存储—同时然后从同步存储系统中取回未识别的块。然而,这样的方法可能不总是产生重新同步,因为从存储系统的分离的时间附近起的一定数量的盘区可以具有相同的标识,但具有不同的内容,因为仅标记的逻辑盘区只读的操作可以作为修改操作的结果形成新逻辑盘区。进一步地,在进行中的修改操作可能在导致分离的故障期间已在不同的存储系统上不同地完成,并且如果那些修改操作是对非只读逻辑盘区,则那些逻辑盘区可以在两个存储系统上具有相同的标识但具有不同的内容。然而,一些解决方案包括当用于豆荚的一组存储系统分离另一存储系统时,该一组存储系统可以标记与在进行中的修改操作相关联的叶和复合逻辑盘区,并且使那些叶和复合逻辑盘区与包括已分离的存储系统的将来重新附连操作相关联。类似地,用于豆荚的重新附连存储系统可以标识它所知道的与在进行中的逻辑盘区相关联的叶和复合逻辑盘区。结果,除了转移任何未知的叶或复合逻辑盘区之外,还可能需要转移两组逻辑盘区,其内容(针对叶盘区)或其引用(针对复合逻辑盘区)。可替代地,可以在复制的豆荚内周期性地取协调的快照,并且重新附连操作的目标可以确保在在最后协调的快照之后创建的逻辑盘区在重新同步期间被丢弃或者忽视。作为又一个替代方案,在存储系统与豆荚分离的时间段期间,剩余的同步存储系统可以制作表示来自所有完成操作的内容的快照,所述快照重放要应用于在日期上迟于快照的豆荚内容的所有可能在进行中的操作—这导致尚未复制到已分离的存储系统的任何内容被给予已分离的存储系统可能从未接收到的新逻辑盘区标识。
可能面临重新同步实施方式的另一问题是使基于盘区图的同步复制完全同步并实况运行。例如,重新同步可以通过首先通过使目标存储系统以上述方式从同步存储系统中取回它来转移最近的快照(诸如在附连开始时创建的快照)而继续进行,其中目标递增地请求它没有的叶和复合逻辑盘区。此过程可以包括在分离时说明在进行中的操作,其中在此过程结束时,直到该最近快照的内容在用于豆荚的同步存储系统与附连存储系统之间被同步。进一步地,可以对另一快照并且可能对附加快照重复此过程,以使目标存储系统更靠近同步存储系统。然而,在某个时候,也可能必须转移实况数据,并且为了这样做,可以启用实况修改操作的复制以便在最后重新同步快照之后转移到附连存储系统,使得可以将不包括在快照中的所有修改操作递送到附连存储系统。此实施方式产生描述对被包括在快照中的叶和复合逻辑盘区的修改的操作,其中这些描述可以包括创建新叶和复合逻辑盘区(具有指定的内容)或用具有新标识的盘区的修改副本替换现有叶和复合逻辑盘区。在操作描述创建新逻辑盘区或者替换对附连存储系统而言已经已知的逻辑盘区的情况下,可以正常地处理操作,就好像附连存储系统同步一样。在用于操作的描述包括对附连存储系统而言尚未已知的逻辑盘区的至少一个替换的情况下,可以使该操作变得耐久以允许完成,但是可以使操作的完整处理延迟直到接收到正被替换的逻辑盘区为止。进一步地,为了减少与正在等待这样的逻辑盘区内容转移的这些操作相关联的开销,附连存储系统可以优先考虑要比其他逻辑盘区更早地取回的那些逻辑盘区。在此示例中,取决于存储系统可如何高效地处理等待这样的现存逻辑盘区的这些操作,可能没有理由在启用实况操作之前转移快照映像的任何序列。替代地,能转移描述从分离的时间起(或者从分离之前的某个时间起)的状态信息的重新同步快照—其中操作像早先所描述的那样被处理,同时还像早先所描述的那样将快照从同步存储系统转移到附连存储系统。
在一些情况下,可能面临重新同步实施方式的问题是在重新同步期间保存块引用。例如,在同步地复制的存储系统中,具体写入块或与操作相关联的具体块集可以被给予被包括在用于写入该块或该块集的操作描述中的标识。在此示例中,替换该块或块集的一些或全部的新写入可以为块或块集供应新标识,其中此新标识可以从块内容的安全散列构建(诸如使用SHA-256或具有不同块产生相同散列值的适合极小机率的某种其他机制),或者新标识可以以唯一方式简单地标识写入它本身,而不管两个写入是否包括相同的块内容。例如,新标识可以是序列号或时间戳。进一步地,如果用于块或块集的新标识作为写入块或块集的一部分被共享在写入操作的分布式描述中并存储在每个存储系统中的某个映射中,则叶逻辑盘区可以按这些块或块集标识描述它们的内容。在这样的实施方式中,叶盘区的重新同步可以引用已经存储在附连存储系统中的块或块集,而不是从同步存储系统转移它们。此实施方式可以减少在重新同步期间转移的总数据。例如,在分离的时间附加已经被写入到附连存储系统但是未被包括在重新同步快照中的数据可能已被按该标识存储,并且可能不需要被再次转移,因为该块或块集标识是已经已知的并被存储。进一步地,如果一定数量的虚拟扩展拷贝操作导致在存储系统被分离期间拷贝两个叶逻辑盘区之间的块引用,则可以使用块或块集标识来确保实际上拷贝的块未被转移两次。
在一些情况下,重新同步实施方式可以使用内容可寻址暂存器,其中存储的块可以具有可以基于块内容的安全散列的唯一标识。在此示例中,重新同步可以通过将与同步存储系统上的豆荚有关的所有块标识的列表连同那些块标识到豆荚中的卷(或文件或对象)的映射转移到附连存储系统而继续进行。在这种情况下,附连操作可以通过从用于豆荚的同步存储系统转移附连存储系统不知道的这些块而继续进行—这可以与改变从卷到内容的映射的实况操作的处理集成。进一步地,如果从在存储系统与豆荚分离之前已知从豆荚内容到块标识的映射的某个早期版本,则可以转移该早期版本与当前版本之间的差异而不是转移整个映射。
继续图21中描绘的示例方法,该示例方法包括标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)。标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)可以使用如上面详细地描述的各种技术来实现。一个示例技术包括一个或多个控制器使用块跟踪来在任何给定存储系统(诸如存储系统(2124))被分离的同时并且像上面详细地描述的那样保持被修改的所有单独的块的列表。其他示例技术包括使用块跟踪和快照的组合,或者通过序列号进行块跟踪以及其他技术,如上面详细地描述的。
在此示例中,块跟踪用于生成在同步存储系统上修改的所有单独的块的列表,其中块跟踪在存储系统(2124)被检测到已分离时开始直到存储系统(2124)被重新附连为止—这是当在下面描述的下一个步骤同步(2104)开始时。进一步地,“分离的”存储系统可以被认为是被列举为豆荚成员列举但是未被列举为对豆荚来说同步的存储系统—其中被列举为豆荚成员的存储系统在豆荚成员联机或者当前可用于主动地为豆荚的数据服务的情况下是同步的。在此示例中,豆荚的每个存储系统成员可以具有它自己的指示用于豆荚的成员存储系统的成员资格列表的副本,其中成员资格列表包括哪些存储系统已知当前同步,并且哪些存储系统被包括在豆荚成员的整个集合中。通常,为了对豆荚来说联机,针对给定存储系统的成员资格列表指示给定存储系统对豆荚来说同步,并且其中给定存储系统能够与针对被指示为对豆荚来说同步的给定存储系统的成员资格列表中的所有其他存储系统进行通信。如果存储系统不能与通过成员资格列表指示为同步的其他存储系统进行通信,则存储系统停止处理传入请求(或者在错误或异常情况下完成它们)以修改数据集,直到存储系统可验证它再次同步为止。特定存储系统可以确定应该分离可疑存储系统,这允许特定存储系统基于与成员资格列表中被指示为同步的存储系统同步继续操作。进一步地在这种场景中,为了避免多个隔离的存储系统处理I/O请求的“裂脑”情形,可疑存储系统被防止被特定存储系统继续处理,并且可疑存储系统请求调解服务以确定哪一个存储系统将继续处理针对豆荚的I/O请求,并且确定哪一个存储系统将停止处理针对豆荚的I/O请求。在通过引用整体地包括的申请参考文献No.15/703,559中进一步描述了这样的调解过程的附加细节。
图21的示例方法还包括按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104)。如上所述,可以使用多种技术来实现使不同步数据集(2113)与同步数据集(2112)同步(2104)。用于重新同步的一种示例技术包括—给定在存储系统(2124)被分离的同时生成的修改的块的列表—制与已重新附连的存储系统(2124)上的修改的块的列表相对应的任何修改操作。在此示例中,复制修改操作可以类似于跟随者存储系统如何在跟随者存储系统和领导者存储系统同步时执行由领导者存储系统所提供的I/O操作被实现,如上面参考处理I/O操作所描述的。如上所述,重新同步还可以包括修改操作可以存储修改内容,并且还可以通过定位来自已分离的块列表的块的范围并且将部分中的那些块从同步存储系统拷贝到附连存储系统来实现重新同步。在上面更详细地描述了用于实现同步(2104)的其他示例技术。
图21的示例方法还包括重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。重新建立(2106)不同步数据集(2113)与同步数据集(2112)之间的同步关系可以类似于在首先创建豆荚时最初建立存储系统之间的同步复制关系被实现,如在申请参考文献No.15/713,153中参考图4-7所描述的,其中此参考文献申请通过引用被整体地包括,并且包括:针对数据集标识(2102)将同步地复制数据集所跨越的多个存储系统;配置(2104)要用于同步地复制数据集的所述多个存储系统中的每一个之间的一个或多个数据通信链路;在所述多个存储系统之间交换(2106)用于所述多个存储系统中的至少一个的定时信息;以及按照用于所述多个存储系统中的至少一个的定时信息建立(2108)同步复制租期,其中该同步复制租期标识同步复制关系有效的时间段。
为了进一步说明,图22阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图22中描绘的示例方法类似于图21中描绘的示例方法,因为图22中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图22中描绘的示例方法进一步包括标识(2202)和存储在不同步存储系统(2124)上的不同步数据集(2113)相关联的元数据与和存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)相关联的元数据之间的差异(2252)。标识(2202)和存储在不同步存储系统(2124)上的不同步数据集(2113)相关联的元数据与和存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)相关联的元数据之间的差异(2252)可以使用如上面更详细地描述的各种技术来实现。作为上述的一个示例,除了跟踪在正被重新同步的存储系统被分离的时间段期间发生的修改操作之外,存储系统还可以跟踪描述在正被重新同步的存储系统被分离的时间段期间跟踪的修改操作的元数据,并且将所跟踪的元数据存储在日志或日志处理设备中。
图22中描绘的示例方法进一步包括按照和存储在不同步存储系统(2124)上的不同步数据集(2113)相关联的元数据与和存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)相关联的元数据之间的差异(2252)使和不同步数据集(2113)相关联的元数据与和同步数据集(2112)相关联的元数据同步(2204)—这可以使用各种技术来实现。一种示例技术包括一个或多个同步存储系统(2114,2128)生成并维护在存储系统(2124)被分离之后发生的元数据的变化的列表,其中元数据的变化的列表可以用于更新不同步存储系统(2124)上的豆荚数据的元数据表示以使不同步存储系统(2124)同步,其中同步包括具有用于表示“公共元数据”的兼容图,其中在申请参考文献No.15/696,418中进一步描述元数据和公共元数据,其中此申请通过引用被整体地包括。如上所述,一些操作可能已存留在已分离的存储系统(2124)上,从而产生与存储在不同步存储系统(2124)上的不同步数据集(2113)相关联的对元数据的修改,并且可以在专用列表中或者在上面参考标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异所描述的操作的相同列表中说明这些对元数据的修改。在上面对附加示例进行了描述。
为了进一步说明,图23阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图23中描绘的示例方法类似于图21中描绘的示例方法,因为图23中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图23中描绘的示例方法指定标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异进一步包括标识(2302)包括与存储在同步数据集上(2112)的内容不同的内容的不同步数据集(2113)内的一个或多个块(2352),这可以使用各种技术来实现。作为一种示例技术,如上面更详细地描述的,包括生成可以在同步存储系统(2114,2128)与附连存储系统(2124)之间不同的块(2352)的列表—其中同步存储系统中的一个可以响应于分离特定存储系统或者检测到特定存储系统已分离而开始生成块的列表。进一步地,在通过引用整体地并入本文的申请参考文献No.15/696,418中更详细地描述了分离存储系统。
图23中描绘的示例方法进一步指定按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集同步(2104)包括修改(2304)不同步数据集(2113)内的一个或多个块以与同步数据集(2113)内的一个或多个块(2352)匹配。修改(2304)不同步数据集(2113)内的一个或多个块以与同步数据集(2113)内的一个或多个块(2352)匹配可以通过在来自分离块列表的一个或多个块(2352)当中定位存储器地址的范围并且将来自存储器地址的范围的内容从同步存储系统(2114,2128)中的一个拷贝到附连存储系统(2124)来实现—如上面更详细地描述的。
为了进一步说明,图24阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图24中描绘的示例方法类似于图21中描绘的示例方法,因为图24中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2118)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图24中描绘的示例方法指定标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异进一步包括由一个或多个同步存储系统(2114,2128)中的至少一个标识(2402)自不同步存储系统被分离以来已发生的一个或多个对数据集(2112)的修改(2452)。可以通过若干技术来实现由一个或多个同步存储系统(2114,2128)中的至少一个标识(2402)自不同步存储系统被分离以来已发生的一个或多个对数据集(2112)的修改(2452)。作为一种示例技术,同步存储系统(2114,2128)中的一个或多个可以实现上述的块跟踪技术中的一种。其他示例技术包括使用块跟踪和快照的组合或通过序列号进行块跟踪以及其他技术,如上面详细地描述的。
为了进一步说明,图25阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图25中描绘的示例方法类似于图21中描绘的示例方法,因为图25中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2118)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图25中描绘的示例方法指定标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异进一步包括由一个或多个同步存储系统(2114,2128)中的至少一个标识(2502)当不同步存储系统(2124)被分离时待决的一个或多个对数据集(2112)的修改(2552)。可以通过使用如上面更详细地描述的若干技术来实现由一个或多个同步存储系统(2114,2128)中的至少一个标识(2502)当不同步存储系统(2124)被分离时待决的一个或多个对数据集(2112)的修改(2552)。
为了进一步说明,图26阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图26中描绘的示例方法类似于图21中描绘的示例方法,因为图26中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2118)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图26中描绘的示例方法进一步包括检测(2602)不同步存储系统(2124)已从存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系分离,这可以使用如上面更详细地描述的各种技术来实现。图26中描绘的示例方法还包括跟踪(2604)自不同步存储系统(2124)被分离以来已发生的对数据集(2112)的修改(2652),如上面更详细地描述的。
为了进一步说明,图27阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图27中描绘的示例方法类似于图21中描绘的示例方法,因为图27中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2118)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图27中描绘的示例方法指定按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104)进一步包括将一个或多个同步存储系统(2114,2128)的一个或多个快照复制(2702)到不同步存储系统(2124),这可以使用如上面更详细地描述的各种技术来实现。
为了进一步说明,图28阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图28中描绘的示例方法类似于图21中描绘的示例方法,因为图28中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图28中描绘的示例方法指定按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104)进一步包括:标识(2802)仅存留在不同步存储系统(2124)上的一个或多个对数据集(2113)的修改(2852),以及取消(2804)仅存留在不同步存储系统(2124)上的一个或多个对数据集(2113)的修改(2852),这可以使用如上面更详细地描述的各种技术来实现。
为了进一步说明,图29阐述了图示根据本公开的一些实施例的用于针对同步地复制数据集的存储系统的重新同步的附加示例方法的流程图。图29中描绘的示例方法类似于图21中描绘的示例方法,因为图29中的示例方法还包括:标识(2102)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152);按照存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的差异(2152)使不同步数据集(2113)与同步数据集(2112)同步(2104);以及重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系。
然而,图29中描绘的示例方法指定重新建立(2106)存储在不同步存储系统(2124)上的不同步数据集(2113)与存储在一个或多个同步存储系统(2114,2128)上的同步数据集(2112)之间的同步复制关系进一步包括对于不同步存储系统(2124)启用(2902)针对数据集(2113)的I/O处理,这可以使用如上面更详细地描述的各种技术来实现。
为了进一步说明,图30阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统(3014,3024,3028)的连接的示例方法的流程图。尽管被不太详细地描绘,然而图30中描绘的存储系统(3014,3024,3028)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图30中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图30中描绘的示例方法包括标识(3002)同步地复制数据集(3012)所跨越的多个存储系统(3014,3024,3028)。图30中描绘的数据集(3012)可以例如作为特定卷的内容、作为卷的特定分片的内容或者作为一个或多个数据元素的任何其他合集被具体实现。可以跨越多个存储系统(3014,3024,3028)使数据集(3012)同步,使得每个存储系统(3014,3024,3028)保留数据集(3012)的本地副本。在本文描述的示例中,跨越存储系统(3014,3024,3028)同步地复制这样的数据集(3012),使得可通过具有执行特性的存储系统(3014,3024,3028)中的任一个来访问数据集(3012),使得集群中的任何一个存储系统不比集群中的任何其他存储系统基本上更佳地操作,至少只要正被访问的集群和特定存储系统名义上在运行即可。在这样的系统中,应该对驻留在每个存储系统(3014,3024,3028)上的数据集的副本做出对数据集(3012)的修改,使得访问存储系统(3014,3024,3028)中的任一个上的数据集(3012)将产生一致的结果。例如,发出到数据集的写入请求必须在所有存储系统(3014,3024,3028)上被执行或者在存储系统(3014,3024,3028)上都未被执行。同样地,必须在所有存储系统(3014,3024,3028)上以相同的次序执行一些组的操作(例如,针对数据集内的相同位置的两个写入操作),或者好像它们在所有存储系统(3014,3024,3028)上被以相同的次序执行,使得驻留在每个存储系统(3014,3024,3028)上的数据集的副本在所有存储系统(3014,3024,3028)上最终相同。不需要在确切相同的时间进行对数据集(3012)的修改,而是一些动作(例如,发出写入请求针对数据集的确认,使得能实现对以在所有存储系统上仍然尚未完成的写入请求作为目标的数据集内的位置的读取访问)可以被延迟直到每个存储系统(3014,3024,3028)上的数据集(3012)的副本已被修改为止。
同写入请求(或用于修改跨越多个存储系统同步地复制的数据集的其他请求)的处理对比,其他类型的请求可以由接收到请求的存储系统在本地服务,而没有增加这样的操作的等待时间的分布式消息传送。例如,读取请求、查询请求或不导致对数据集(3012)的修改的其他请求可由接收到请求的存储系统在本地处理,而通常没有增加这样的操作的等待时间的分布式消息传送。例如,如果主机向同步地复制数据集(3012)所跨越的存储系统(3014,3024,3028)的集群内的第一存储系统(3014)发出读取请求,则实施方式可确保在存储系统(3014,3024,3028)之间将通常没有完成读取请求所需要的内联消息传送,从而产生常常与本地非复制的存储系统的等待时间相同的读取等待时间。在一些情况下,这样的操作(例如,读取请求)可以通过冲突写入请求(即,用于将数据写入到与要响应于读取请求而读取的数据集的部分重叠的数据集的一部分的请求)或在所有存储系统(3014,3024,3028)上仍然尚未完成的其他形式的冲突修改操作被阻塞在实施方式内。块可能是必要的,例如,以保存对在时间上与一个或多个并发修改请求重叠的多个读取请求的排序要求。这样的块可用于确保一个存储系统上的第一读取与在豆荚中的同一或另一存储系统上的写入或其他修改操作并发,并且其中第一读取后面是豆荚中的另一存储系统上的也与相同的写入或其他修改操作重叠的第二读取,在从在针对第二读取的修改操作之前返回内容的同时将从不返回针对第一读取的修改操作的结果。对存储系统已了解并在豆荚中的任何地方仍然尚未被处理的飞行中修改操作的重叠读取请求的块可通过使读取请求延迟来确保用于读取操作的这种反向时间次序不会发生,所述读取请求可能返回来自重叠修改操作的结果,直到所有其他重叠读取请求也被确保返回来自该重叠修改操作的结果为止。
在图30中描绘的示例方法中,例如,通过检查使数据集(3012)与名义上存储该数据集(3012)的一个或多个存储系统(3014,3024,3028)相关联的豆荚定义或类似的数据结构,可以执行针对数据集(3012)标识(3002)同步地复制数据集(3012)所跨越的多个存储系统(3014,3024,3028)。‘豆荚’(当在这里并贯穿本申请的剩余部分使用该术语时)可以作为表示数据集、一组受管理对象和管理操作、用于修改或者读取数据集的一组访问操作以及多个存储系统的管理实体被具体实现。这样的管理操作可以通过存储系统中的任一个等效地修改或者查询受管理对象,其中用于读取或者修改数据集的访问操作通过存储系统中的任一个等效地操作。每个存储系统可以将数据集的单独的副本作为所述数据集的真子集来存储,所述真子集被存储和通告以供存储系统使用,其中通过任何一个存储系统执行和完成的用于修改受管理对象或数据集的操作被反映在用于查询豆荚的后续管理对象或用于读取数据集的后续访问操作中。可以在通过引用并入本文的先前提交的临时专利申请no.62/518,071中找到有关‘豆荚’的附加细节。可向豆荚添加存储系统,从而导致豆荚的数据集(3012)被拷贝到该存储系统并且然后随着数据集(3012)被修改而保持最新。还可从豆荚中移除存储系统,从而导致数据集(3012)在已移除的存储系统上不再保持最新。在这样的示例中,可以随着存储系统被添加到特定豆荚并且从特定豆荚中移除而更新豆荚定义或类似的数据结构。
图30中描绘的示例方法还包括标识(3004)可发出针对数据集(3012)的I/O操作的主机(3032)。例如,图30中描绘的主机(3032)可以作为在存储系统(3014,3024,3028)外部运行的应用服务器或者作为经由一个或多个数据通信路径向存储系统(3014,3024,3028)发出访问请求(例如,读取、写入)的任何其他设备被具体实现。例如,通过存储系统(3014,3024,3028)中的一个或多个保留包括存储系统(3014,3024,3028)已从其接收到针对数据集(3012)的I/O操作的每个主机的标识的列表或其他数据结构,通过检查标识具有访问数据集(3012)所必需的适当权限的每个主机的列表或其他数据结构,或者以某种其他方式,可以执行标识(3004)可发出针对数据集(3012)的I/O操作的特定主机(3032)。
图30中描绘的示例方法还包括标识(3006)主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的多个数据通信路径(3022,3026,3030)。主机(3032)与所述多个存储系统(3014,3024,3028)之间的每个数据通信路径(3022,3026,3030)可以表示主机启动器端口与存储系统目标端口之间、主机上的网络接口与存储系统上的网络接口之间等的关系。在这样的示例中,可以存在若干主机启动器端口和若干存储系统目标端口,并且存储系统还可包含若干存储控制器,其中的每一个均可以托管多个目标端口。单独存储系统上的目标端口或网络接口即使在同一豆荚中,也通常应该彼此不同。可以使用目标端口组来管理目标端口,所述目标端口组是共享关于活动/优化、活动/未优化、待机和脱机的公共状态的与存储系统卷相关联的端口的组。目标端口组可以与单独的存储系统的每个存储控制器相关联,而不是总体上与存储系统相关联。事实上,目标端口组可以是完全任意的,包括与甚至在单个存储控制器内的目标端口的子集相关联。存储系统还能在构建或者通知目标端口组时使用主机启动器信息,但是它将必须将此信息一致地(至少按卷)提供给每个主机启动器以确保在多路径驱动程序栈中不存在混淆。在图30中描绘的示例方法中,例如,通过使用在以下段落中更详细地描述的SCSI非对称逻辑单元访问(‘ALUA’)机制,通过使用一些其他网络发现工具,或者以某种其他方式,可以执行标识(3006)主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的多个数据通信路径(3022,3026,3030)。
图30中描绘的示例方法还包括从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径。图30中描绘的存储系统可以从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径以及与存储系统相关联的存储通信端点。在图30中描绘的示例方法中,标识(3008)一个或多个最佳路径可以包括标识单个最佳路径或者识别多个最佳路径。例如,可以标识更多最佳路径的子集(诸如主机与特定存储系统之间的路径),其中可以标识满足各种性能阈值的任何路径,可以标识预定数量的最佳路径(例如,相对于其他可用路径展示优越性能的那些路径),可以标识最佳路径的预定百分比等。读者应领会的是,可以存在与主机(3032)对另一存储系统向一个存储系统发出I/O操作相关联的性能优点,因为存储系统(3014,3024,3028)可以彼此相距一定距离,存储系统(3014,3024,3028)可以位于单独的存储网络中,或者由于某种其他原因位于存储网络的单独的部分中。例如,可能存在与主机(3032)向相对于向物理上位于遥远数据中心或校园内的存储系统发出I/O操作的主机(3032)物理上位于与主机(3032)相同的数据中心或校园内的存储系统发出I/O操作相关联的性能优点。出于可靠性目的,使主机(3032)保持到所有存储系统(3032)的连接可能是有益的,但是出于性能目的,可能优选的是主机(3032)通过特定存储系统来访问数据集(3012)。读者应领会的是,因为不同的主机可以访问数据集(3012),所以用于一个主机访问数据集(3012)的一个或多个最佳路径可以与用于另一主机访问数据集(3012)的一个或多个最佳路径不同。在一些实施例中,可能的是两个存储系统可以足够类似以致到两个存储系统的路径可以被视为最佳的。例如,如果两个存储系统位于相同的数据中心或校园中并且在主机与那两个存储系统之间具有丰富的联网,同时第三存储系统可以足够遥远以致它不应该被用作备用物,主机与两个足够类似的存储系统之间的路径可以全部是候选以用于被标识(3008)为最佳路径。
在图30中描绘的示例方法中,例如,通过使用SCSI ALUA机制,可以执行从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径。SCSIALCA机制在SCSI SPC-4和SBC-3技术标准中作为一组命令和查询被描述,该一组命令和查询描述对于从通过到存储卷(在SCSI中也称为“逻辑单元”)的多个目标端口对存储系统的非对称访问的支持。在这样的实施例中,卷(其内容可以表示跨多个存储系统同步地复制的数据集)可通过与一个或多个目标端口组相关联的多个SCSI目标端口来向主机(3032)报告唯一ID,使得主机(3032)通过一个或多个SCSI主机端口可配置其I/O驱动程序以通过其主机端口和所通告的目标端口的一些或所有组合来访问卷。唯一卷ID可由主机(3032)I/O驱动程序使用来识别访问相同卷的所有SCSI逻辑单元号、主机端口和目标端口组合。主机I/O驱动程序然后可往那些组合(路径)中的若干个、任一个或全部下发出SCSI命令以修改标识的卷的状态和内容。故障可导致主机往备用路径下重新发出请求并且性能考虑事项可以导致主机(3032)大量使用多个路径以通过使用多个端口和多个网络互连获得改进的主机到存储系统带宽的益处。
利用用于SCSI的ALUA规范,可描述可访问卷的多个目标端口组,其中的每一个均可各自被指派一状态。目标端口组可表示存储系统上的一个或多个SCSI目标端口。在多控制器存储系统中,目标端口组可能表示一个控制器上的所有SCSI目标端口,或者在对称地可访问的同步地复制的存储系统情况下,目标端口组可能表示单独的存储系统上的所有SCSI目标端口,或者目标端口可能被以某种其他方式分组。可与目标端口组相关联的状态指示端口组是否应该优选用于发出I/O(活动/优化)、不优选用于发出I/O(活动/非优化)、待机(在存在状态回到活动/优化或活动/非优化的变化之前不能发出I/O),或者目标端口组可能例如由于无响应而脱机。SCSI规范允许目标端口组和ALUA目标端口组指派的状态的定义特定于每个请求主机(或甚至每个请求主机端口),以及特定于每个卷,使得对于每个卷,存储系统可向可访问该卷的每个主机或主机端口呈现一组唯一的目标端口组和目标端口组指派的状态。
利用对称地可访问的同步地复制的存储系统,豆荚中的所有存储系统可向主机呈现出相同的卷,好像豆荚中的所有存储系统对主机而言是通过用于豆荚的若干或所有存储系统上的SCSI目标端口来呈现出相同的卷的一个存储系统。这些机制然后可提供用于引导和重定向对豆荚中的卷的访问所期望的所有能力。对于为用于豆荚的特定存储系统取得更好性能(诸如由于主机与该存储系统的网络或地理接近)的主机,ALUA目标端口组针对该存储系统向该主机的主机端口指派的状态可被指示为活动/优化,然而对于为用于豆荚的该特定存储系统取得较低性能的其他主机,ALUA目标端口组针对存储系统向该其他主机的主机端口指派的状态可被指示为活动/非优化。以这样的方式,可以将被确定为活动/优化的目标端口组的成员作为(一个或多个)最佳路径标识(3008)给主机。
如果新存储系统被添加到豆荚,则新目标端口组可针对该豆荚中的每个卷被添加到访问该卷的主机端口,其中目标端口组指派了对新存储系统来说适于主机/存储系统接近的状态。在一定数量的SAN级事件之后,主机可识别用于每个卷的新端口并且配置其驱动程序以适当地使用新路径。存储系统可监视主机访问(诸如等待REPORT LUNS和INQUIRY命令)以代表豆荚确定主机现在被适当地配置为在新近添加的存储系统上使用SCSI目标端口。如果存储系统被从豆荚中移除,则保持在豆荚中的其他存储系统可停止向任何主机端口报告针对用于豆荚的卷的已移除的存储系统的任何目标端口或目标端口组。进一步地,已移除的存储系统可停止在任何REPORT LUN请求中列举豆荚的卷,并且存储系统可响应于对豆荚的卷的命令而开始报告卷不存在。如果卷被移入或者移出豆荚,从而导致卷与存储系统的扩展或缩减集相关联,则可对将会在添加或者从豆荚中移除存储系统时应用的单独的卷应用相同的动作。至于处理故障,主机I/O驱动程序将通过目标端口组中的目标端口来访问它们的卷,所述目标端口组在任何这样的路径可用且适当地起作用的情况下被指派为活动/优化,但是在没有活动/非优化路径可用且适当地起作用的情况下可切换到活动/非优化路径。
在图30中描绘的示例方法中,例如,以自动化方式通过使用定时或网络信息来确定到豆荚中的特定接口或存储系统的主机路径与到豆荚中的其他特定接口或存储系统的主机路径相比具有更少的等待时间、更好的吞吐量或更少的交换基础设施,还可以执行从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径。在这样的示例中,从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径因此可以包括标识在主机与存储系统中的一个之间展示相对最低的等待时间的一个或多个数据通信路径、标识在主机与存储系统中的一个之间展示低于预定阈值的等待时间的一个或多个数据通信路径等。
在基于IP的网络上,例如,ping和traceroute命令(或直接利用其底层ICMP Echo请求)可以用于确定已知主机网络接口与用于豆荚中的存储系统的网络接口之间的等待时间和网络路由。traceroute设施或具有逐渐增加的TTL字段(以限制路由器发送ICMP超时响应之前的网络跳数)的ICMP Echo请求的直接使用可用于确定是否存在具有较高等待时间的特定网络跳,或者确定没有这样的网络跳。在这种情况下,可避免具有高等待时间跳的存储接口到主机接口路由,以支持没有高等待时间跳的主机接口到存储接口路由。另一方面,如果存在与另一网络路由相比具有更少的跳并具有低等待时间的网络路由,则可优选具有该网络接口的存储系统。
在基于光纤通道的网络上,如由存储网络行业协会根据其光纤通道工作组所支持的HBA API规范和插件库可用于制订FC存储网络。另外,光纤通道协议中的ELS Echo特征可用于检测网络等待时间。与先前描述的IP网络一样,这可用于标识与其他主机端口和目标端口组合相比具有更少的等待时间和更少的网络跳的主机端口到目标端口网络,其可用于确定豆荚中的哪些存储系统更靠近或者更好地连接到一个主机或另一主机,以用于为每个主机配置存储系统以得到活动/优化对活动/非优化的关系。
图30中描绘的示例方法还包括向主机(3032)指示(3010)一个或多个最佳路径的标识。在图30中描绘的示例方法中,例如,通过在存储系统(3014,3024,3028)与主机(3032)之间交换的一个或多个消息,存储系统(3014,3024,3028)可以向主机(3032)指示(3010)最佳路径的标识。这样的消息可以使用上述的许多机制来交换并且可以通过使用端口标识符、网络接口标识符或某个其他标识符来标识最佳路径。例如,可以通过经由SCSI ALUA机制向主机(3032)指示(434)一个或多个活动/优化路径来执行向主机(3032)指示(3010)一个或多个最佳路径的标识。
读者应领会的是,本文描述的存储系统(3014,3024,3028)可以利用主机定义来将主机(3032)定义为一组命名的端口或网络接口,其中那些主机定义可以包括附加连接相关信息或诸如操作系统或应用类型或工作负载分类这样的附加特性。主机定义可被给予用于管理方便的名称,并且可以被表示为存储系统用户接口中的第一类对象,或者它们可被以各种方式一起分组,诸如以列举与特定应用、用户或基于主机的数据库或文件系统集群相关联的所有主机。这些主机定义可用作用于存储系统使关于主机位置或针对用于豆荚的主机对存储系统偏好的信息相关联的方便管理对象。存储系统可以方便地管理针对每个主机的一个主机定义而不是针对每个豆荚的一个主机定义。这可以是方便的,因为与主机关联的启动器端口和网络接口对所有豆荚来说很可能相同。如果豆荚被用作每个豆荚与其他豆荚安全地隔离的强大形式的虚拟设备,则情况可能不是这样的,然而,这对于缺少这样的安全豆荚隔离的任何用途或实施方式来说可能是方便的且易于设置。
如果豆荚可从豆荚中的多个存储系统向同一主机提供数据集或存储对象,并且如果必须以协调的方式跨越用于豆荚的所有存储系统管理ALUA声明主机和主机对存储系统偏好,则可能需要跨越豆荚协调或者同步主机定义,但是与用于豆荚的多数其他受管理对象不同,主机可以是存储系统对象(因为网络接口和SCSI目标端口常常是存储系统对象)而不是豆荚对象。结果,可能不容易在豆荚成员之间使主机对象同步,因为定义可能冲突。
另外,主机可以通过一组主机侧启动器和网络接口互连到用于豆荚的一个存储系统,并且通过一组不同的主机侧启动器和网络接口互连到用于豆荚的另一存储系统。此外,在两组之间可以存在某种重叠,或者在两组之间可能没有重叠。在一些情况下,可以操作可由存储系统使用来确定接口表示同一主机的主机信息。例如,接口可以使用相同的iSCSIIQN,或者主机侧驱动程序可以向存储系统供应主机信息以指示各种启动器或网络接口表示同一主机。在其他情况下,可能没有这样的信息。在缺少可发现信息的情况下,用于主机定义的参数可以替代地由用户或者通过某个API或其他接口供应给存储系统以使主机名称与一组网络端点、iSCSI IQN、启动器端口等相关联。
如果通过主机定义来将与豆荚相关联的数据集的一部分导出到特定主机(意味着它从豆荚的当前存储系统自己的网络端点和SCSI目标中的一个或多个通过网络端点、iSCSI IQN或启动器端口的列表基于主机定义被提供给主机),然后当附加存储系统被添加到豆荚时,可检查所添加的存储系统的主机定义。如果没有具有相同的主机对象名称的主机以及没有具有主机网络端点、,iSCSI IQN或启动器端口的重叠列表的主机存在于所添加的存储系统上,则可将主机定义拷贝到所添加的存储系统。如果在所添加的存储系统上存在具有主机网络端点、iSCSI IQN和启动器端口的相同名称和相同配置的主机定义,则可从那时起链接和协调来自原始豆荚成员存储系统的主机定义和所添加的存储系统的主机定义。如果在所添加的存储系统上存在具有主机网络端点、iSCSI IQN或启动器端口的相同名称但不同配置的主机,则可以在用于豆荚的存储系统之间交换主机对象的限定版本,其中不同版本用存储系统限定符命名。例如,存储系统A可以将其主机定义呈现为A:H1,然而存储系统B可以将其主机定义呈现为B:H1。可为在名称方面不同但是在主机网络端点、iSCSIIQN或启动器端口方面具有某种重叠的主机定义提供相同的内容。在那种情况下,可以不在存储系统之间拷贝主机定义,而是主机定义可以替代地让存储系统留在本地,从而产生例如列举主机启动器X和Y的主机定义A:H1以及列举主机启动器Y和X的主机定义B:H2。进一步地,可提供操作来使这些主机定义同步。如果两个主机定义具有相同的名称或一组重叠的主机网络端点、iSCSI IQN或启动器端口,则可以给用户提供简单的接口以便使它们一起统一有公共名称、交换的主机网络端点、iSCSI IQN或启动器端口,这些然后被链接在一起。如果两个定义之间的唯一冲突是一些主机定义包括未在另一接口上列举的主机接口,但是至少一个主机接口匹配,则这些定义能被自动地合并和链接,而不是等待用户做出这样的要求。
如果作为一组条件(故障、关闭等)的结果豆荚中的存储系统分离另一存储系统,则已分离的存储系统在它对于豆荚来说脱机但是仍然在运行的情况下可以对其主机定义做出改变。保持对豆荚来说联机的存储系统也可以对其主机定义做出改变。结果可以是失配的主机定义。如果已分离的存储系统稍后被重新连接到豆荚,则主机定义可能不再匹配。那时,豆荚可以按其存储系统名称前缀重新开始报告主机定义以区分每个存储系统上的单独的定义。
主机定义的另一方面是主机定义可以定义位置或存储系统偏好,作为在哪一个存储系统的目标端口应该产生活动/优化的ALUA状态并且哪一个应该产生活动/非优化的ALUA状态方面配置对于ALUA信息将返回什么的一部分。还可能需要在存储系统之间协调和链接此状态。如果是这样的话,则那可能是要求协调的另一方面。在使用于豆荚中的存储系统的主机定义和谐时检测到的冲突或任何设置的缺少也可以呈现提示用户设置位置或存储系统偏好的机会。
读者应注意到的是,由于主机定义实际上可以是存储系统级对象,而不是豆荚级对象,所以相同的主机定义可被用于在多个存储系统之间伸展的豆荚以及用于未在单个存储系统外伸展的豆荚。在纯本地豆荚(或伸展到与另一豆荚不同的一组存储系统的一个豆荚)的上下文中使用主机能更改主机(或主机的列表)被查看的方式。在本地豆荚的上下文中,例如,由存储系统对主机进行限定可能没有意义,并且列举没有到本地存储系统的路径的主机也可能没有意义。此示例能被扩展到具有不同的成员存储系统的豆荚。例如,主机定义可以与用于一个豆荚的配对的存储系统冲突(使存储系统限定变得有用),然而主机定义可能与用于不同豆荚的不同配对的存储系统不冲突(使存储系统限定变得潜在不必要)。当一个豆荚被伸展到一组附加存储系统并且另一豆荚被伸展到一组不同的附加存储系统时,在使用主机时可能出现类似的问题。在那种情况下,仅用于存储系统的目标接口与特定豆荚问题相关,并且仅主机网络端点、iSCSI IQNS和启动器端口对用于豆荚的相关存储系统上的目标接口可见。
尽管图30中描绘的存储系统(3014,3024,3028)中的仅一个被明确地图示为执行上述的步骤,然而读者应领会的是,存储系统(3014,3024,3028)中的每一个均可能在粗略相同的时间执行上述的步骤,使得最佳通路的标识是协调努力。例如,每个存储系统(3014,3024,3028)可以单独地标识它本身与主机之间的所有数据通信通路,收集与它本身与主机之间的每个数据通信路径相关联的各种性能度量,并且与其他存储系统共享这些信息以努力标识一个或多个最佳路径。
为了进一步说明,图31阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统(3014,3024,3028)的连接的附加示例方法的流程图。尽管被不太详细地描绘,然而图31中描绘的存储系统(3014,3024,3028)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图31中描绘的存储系统可以包括与上述的存储系统相同、更少或附加的组件。
图31中描绘的示例方法类似于图30中描绘的示例方法,因为图31中描绘的示例方法还可包括:标识(3002)同步地复制数据集(3012)所跨越的多个存储系统(3014,3024,3028);标识(3004)可发出针对数据集(3012)的I/O操作的主机(3032);标识(3006)主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的多个数据通信路径(3022,3026,3030);从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径;以及向主机(3032)指示(3010)一个或多个最佳路径的标识。
图31中描绘的示例方法还包括检测(3102)跨越一组更新的存储系统同步地复制数据集(3012)。在图31中描绘的示例方法中,同步地复制数据集(3012)所跨越的存储系统的集合可以由于各种原因而改变。例如,因为一个或多个适当地运行的存储系统被添加到豆荚或者从豆荚中移除,同步地复制数据集(3012)所跨越的存储系统的集合可以改变。另外,例如,因为一个或多个存储系统变得不可达或者以其他方式变得不可用,并且响应于变得不可达或不可用而与豆荚分离,同步地复制数据集(3012)所跨越的存储系统的集合可以改变。在图31中描绘的示例方法中,例如,通过检测豆荚定义的变化,通过检测存储系统已变得不可达或者以其他方式变得不可用,或以其他方式,可以执行检测(3102)跨越一组更新的存储系统同步地复制数据集(3012)。
在图31中描绘的示例方法中,描绘了跨越一组更新的存储系统同步地复制数据集(3012)的实施例。在这样的示例中,存储系统(3024)在图30中被描述为被最初标识(3002)为同步地复制数据集(3012)的所述多个存储系统(3014,3024,3028)中的一个。然而,图31中描绘的示例图示存储系统(3024)已变得不可达或者已以其他方式变得不可用的实施例,这在本文中通过使用用于其他存储系统(3014,3028)之间的通信链路(3016,3018,3020)以及可用于将主机(3032)与存储系统(3024)耦合以用于与存储系统(3024)进行数据通信的数据通信路径(3030)的虚线(表示不存在活动连接)来描绘。因此,同步地复制数据集(3012)所跨越的一组初始的存储系统包括了所有描绘的存储系统(3014,3024,3028),然而同步地复制数据集(3012)所跨越的一组更新的存储系统包括仅两个存储系统(3014,3028)。
图31中描绘的示例方法还包括标识(3104)主机(3032)与一组更新的存储系统(3014,3028)之间的多个数据通信路径。在图31中描绘的示例方法中,例如,通过使用上面更详细地描述的SCSI ALUA机制,通过使用一些其他网络发现工具,或者以其他方式,可以执行标识(3104)主机(3032)与一组更新的存储系统组(3014,3028)之间的多个数据通信路径。
图31中描绘的示例方法还包括从主机(3032)与一组更新的存储系统之间的所述多个数据通信路径当中标识(3106)一组更新的最佳路径。在图31中描绘的示例方法中,标识(3106)一组更新的最佳路径可以包括标识单个最佳路径或者识别多个最佳路径。例如,可以标识更多的最佳路径的子集(诸如主机与特定存储系统之间的路径),其中可以标识满足各种性能阈值的任何路径,可以标识预定数量的最佳路径(例如,相对于其他可用路径展示优越性能的那些路径),可以标识最佳路径的预定百分比等。读者应领会的是,可以存在与主机(3032)对另一存储系统向一个存储系统发出I/O操作的性能优点,因为存储系统(3014,3024,3028)可以彼此相距一定距离,存储系统(3014,3024,3028)可以位于单独的存储网络中,或者由于某种其他原因位于存储网络的单独的部分中。例如,可能存在与主机(3032)向相对于向物理上位于遥远数据中心或校园内的存储系统发出I/O操作的主机(3032)物理上位于与主机(3032)相同的数据中心或校园内的存储系统发出I/O操作相关联的性能优点。出于可靠性目的,使主机(3032)保持到所有存储系统(3032)的连接可能是有益的,但是出于性能目的,可能优选的是主机(3032)通过存储系统的特定存储系统或子集来访问数据集(3012)。读者应领会的是,因为不同的主机可以访问数据集(3012),所以用于一个主机访问数据集(3012)的一个或多个最佳路径可以与用于另一主机访问数据集(3012)的一个或多个最佳路径不同。在图30中描绘的示例方法中,例如,通过使用上述的SCSI ALUA机制,以自动化方式通过使用定时或网络信息来确定到豆荚中的特定接口或存储系统的主机路径与到豆荚中的其他特定接口或存储系统的主机路径相比具有更少的等待时间、更好的吞吐量或更少的交换基础设施,或者以其他方式,可以执行从主机(3032)与一组更新的存储系统之间的所述多个数据通信路径当中标识(3106)一组更新的最佳路径。读者应领会的是,尽管前面段落中的一些涉及‘集合’,然而这样的集合可包括单个成员并且关于如何表示这样的集合没有特别的限制。
读者应领会的是,可以存在上述的性能优点的各种来源。对于写入,对更遥远存储系统请求写入的主机除了要求(在任何情况下)用于存储系统到存储系统复制它本身所需的远距离带宽之外,还要求用于主机到遥远存储系统网络的远距离带宽(这使用另外不必要的主机到存储装置带宽,或者当仅一个方向上的业务应该是必要的时它在两个方向上对于写入内容引发业务)。进一步地,对于写入,如果远距离等待时间显著,则该等待时间被引发达四次或六次(从主机到遥远存储系统的两或四阶段写入的前一个或三个阶段,加上写入内容从遥远存储系统到本地存储系统的递送,加上针对两或四阶段写入请求的最后部分从遥远存储系统发送到主机的最终完成)。对于对本地存储系统的写入,相比之下,远距离等待时间将被引发仅两次:一次用于将写入内容从本地存储系统递送到遥远存储系统,并且一次用于将完成或类似的指示从遥远存储系统递送到本地存储系统。对于读取,从本地存储系统请求读取的主机将常常根本不消耗远距离带宽,并且将通常不引发远距离等待时间惩罚。
图31中描绘的示例方法还包括向主机(3012)指示(3108)已更新的最佳路径的标识。在图31中描绘的示例方法中,例如,通过在存储系统(3014,3024,3028)与主机(3032)之间交换的一个或多个消息,存储系统(3014,3024,3028)可以向主机(3032)指示(3108)已更新的最佳路径的标识。这样的消息可以使用上述的许多机制来交换并且可以通过使用端口标识符、网络接口标识符或某种其他标识符来标识最佳路径。读者应领会的是,在一些实施例中,存储系统(3014,3024,3028)可以用来向主机(3032)指示(3108)已更新的最佳路径的标识的过程的一部分可包括将这样的信息捎带到对由主机(3012)发出的命令的响应上。例如,存储系统(3014,3024,3028)中的一个可以产生(3110)SCSI单元注意给主机。SCSI单元注意是使得设备(例如,存储系统)能够告诉主机侧SCSI驱动程序设备的工作状态或结构状态已改变的机制。换句话说,通过产生单元注意存储系统可以向主机指示主机应该向存储系统查询状态变化,主机可通过所述状态变化发现目标端口组状态已改变以指示一组不同的活动/优化和活动/非优化目标端口组。在这样的示例中,目标(例如,存储系统)在内部产生下次对命令的响应被发送到主机(3012)时被返回到主机(3012)的“单元注意”,其告诉主机侧SCSI驱动程序要在清除单元注意之前请求已更新的ALUA状态。此机制可以允许存储系统按需让主机更新其ALUA状态,但是它依赖于某种将来的SCSI请求被发出到未脱机的某个目标端口。在这样的示例中,因为SCSI协议采取由主机(3012)发出的命令以及由目标(例如,存储系统)返回的响应的形式,所以转移用于更新最佳路径的信息可能需要以略微迂回的方式在此机制上捎带,因为SCSI“单元注意”机制提供用于目标将未经恳求的更新提给予给主机(3012)的方式。
为了进一步说明,图32阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统(3014,3024,3028)的连接的附加示例方法的流程图。尽管被不太详细地描绘,然而图32中描绘的存储系统(3014,3024,3028,3210)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图32中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图32中描绘的示例方法类似于图30和图31中描绘的示例方法,因为图32中描绘的示例方法还可包括:标识(3002)同步地复制数据集(3012)所跨越的多个存储系统(3014,3024,3028);标识(3004)可发出针对数据集(3012)的I/O操作的主机(3032);标识(3006)主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的多个数据通信路径(3022,3026,3030);从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径;并且向主机(3032)指示(3010)一个或多个最佳路径的标识;检测(3102)跨越一组更新的存储系统同步地复制数据集(3012);标识(3104)主机(3032)与一组更新的存储系统(3014,3028)之间的多个数据通信路径;从主机(3032)与一组更新的存储系统之间的所述多个数据通信路径当中标识(3106)一个或多个更新的最佳路径;以及向主机(3012)指示(3108)已更新的最佳路径的标识。
在图32中描绘的示例方法中,检测(3102)跨越一组更新的存储系统同步地复制数据集(3012)可包括检测(3202)存储系统(3024)已从同步地复制数据集(3012)所跨越的一组原始的存储系统分离。在图32中描绘的示例方法中,当存储系统(3024)不再参与跨越多个存储系统的数据集(3012)的同步复制时,存储系统(3024)可以被认为是“分离的”。例如,由于存储系统内的硬件故障,由于防止存储系统参与数据通信的联网故障,由于存储系统的失电,由于存储系统上的软件崩溃,或者由于各种其他原因,特定存储系统可以分离。在图32中描绘的示例方法中,例如,通过确定存储系统已变得不可用或另外不可达,可以执行检测(3202)存储系统(3024)已从同步地复制数据集(3012)所跨越的一组原始的存储系统分离。在图32中描绘的示例方法中,存储系统(3024)中的一个被描绘为由于防止存储系统参与数据通信的联网故障而被分离,因为由存储系统(3024)使用的所有数据通信链路(3016,3018,3020,3208)和数据通信路径(3030)用虚线表示以图示由存储系统(3024)使用的数据通信链路(3016,3018,3020,3208)和数据通信路径(3030)不是工作的。
在图32中描绘的示例方法中,检测(3102)跨越一组更新的存储系统同步地复制数据集(3012)还可包括检测(3204)未被包括在同步地复制数据集(3012)所跨越的一组原始的存储系统中的存储系统(3210)已附连到同步地复制数据集(3012)所跨越的一组存储系统。在图32中描绘的示例方法中,当存储系统(3210)正在参与跨越多个存储系统的数据集(3012)的同步复制时,存储系统(3210)可以被认为是“附连的”。例如,由于存储系统被添加到豆荚,由于存储系统从存储系统内的硬件故障中恢复,由于存储系统从联网网络中恢复,由于存储系统从存储系统的失电中恢复,由于存储系统从存储系统上的软件崩溃中恢复,或者由于各种其他原因,特定存储系统可以分离。在图32中描绘的示例方法中,未被包括在任何先前图中的存储系统(3210)中的一个被描绘为被附连到同步地复制数据集(3012)所跨越的一组存储系统,其中存储系统(3210)被耦合用于经由一个或多个数据通信链路(3206)和数据通信路径(3212)与主机(3032)和其他存储系统(3024)进行数据通信。读者应领会的是,尽管在存储系统(3028,3210)中的一些之间未图示数据通信链路,然而这样的数据通信链路实际上可以存在,但是在这里为了图示的方便仅被省略。
图32中描绘的示例方法还可包括监视(3206)主机对未被包括在同步地复制数据集(3012)所跨越的一组原始的存储系统中的存储系统(3210)的访问。如上所述,如果新存储系统被添加到豆荚,则可针对该豆荚中的每个卷向访问该卷的主机端口添加新目标端口组,其中目标端口组对于新存储系统指派适于主机/存储系统接近的状态。在一定数量的SAN级事件之后,主机可识别用于每个卷的新端口并且将其驱动程序配置为适当地使用新路径。存储系统可监视主机访问(诸如等待REPORT LUNS和INQUIRY命令)以代表豆荚确定主机现在被适当地配置为在新近添加的存储系统上使用SCSI目标端口。在这样的示例中,可以监视主机以便确保在针对豆荚采取取决于主机准备好向该目标端口组的成员发出命令的动作之前主机准备好向目标端口组的新近添加的成员发出命令。例如,当协调豆荚成员的移除时,这可能是有用的。在这样的示例中,如果已知正在使用被移除的存储系统的一个或多个主机仍然尚未被发现正在使用新近添加的存储系统,然后如果被移除的成员是已知对那些主机中的一个或多个来说工作的最后剩余的存储系统,则在允许操作继续进行之前发出警报可能是有益的(或者可完全地防止操作)。
为了进一步说明,图33阐述了图示根据本公开的一些实施例的用于管理到同步地复制的存储系统(3014,3024,3028)的连接的附加示例方法的流程图。尽管被不太详细地描绘,然而图33中描绘的存储系统(3014,3024,3028)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图33中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图33中描绘的示例方法类似于图30、图31和图32中描绘的示例方法,因为图33中描绘的示例方法还可包括:标识(3002)同步地复制数据集(3012)所跨越的多个存储系统(3014,3024,3028);标识(3004)可发出针对数据集(3012)的I/O操作的主机(3032);标识(3006)主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的多个数据通信路径(3022,3026,3030);从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)一个或多个最佳路径;并且向主机(3032)指示(3010)一个或多个最佳路径的标识。
图33中描绘的示例方法还包括检测(3302)主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的至少一个或所述多个数据通信路径(3022,3026,3030)的变化。例如,通过检测特定数据通信路径不再是工作的,通过确定跨越特定数据通信路径的性能(例如,带宽、吞吐量)已改变了超过预定阈值量,通过确定更少或附加跳已被引入到特定数据通信路径等,可以执行检测(3302)主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的至少一个或所述多个数据通信路径(3022,3026,3030)的变化。读者应领会的是,主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的至少一个或所述多个数据通信路径(3022,3026,3030)的变化可以影响哪一个特定数据通信路径被标识为最佳路径,并且因此,存储系统(3014,3024,3028)可能需要重复以下步骤:从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)最佳路径;以及向主机(3032)发出(3010)最佳路径的标识。
图33中描绘的示例方法还包括检测(3304)主机(3032)的变化。例如,作为主机(3032)的软件或硬件升级的结果,作为主机(3032)的失电的结果,作为主机(3032)上的硬件或软件故障的结果,作为主机(3032)被移动的结果,作为新主机被用于支持发出针对数据集(3012)的I/O操作的某个应用的执行的结果,或者由于各种其他原因,可以发生主机(3032)的变化。读者应领会的是,主机(3032)的变化可以影响哪一个特定数据通信路径被标识为最佳路径,并且因此,存储系统(3014,3024,3028)可能需要重复以下步骤:从主机(3032)与同步地复制数据集(3012)所跨越的所述多个存储系统(3014,3024,3028)之间的所述多个数据通信路径(3022,3026,3030)当中标识(3008)最佳路径;以及向主机(3032)发出(3010)最佳路径的标识。
为了进一步说明,图34阐述了图示根据本公开的实施例的管理到同步地复制的存储系统(3424,3426,3428)的连接的附加示例方法的流程图。尽管被不太详细地描绘,然而图34中描绘的存储系统(3424,3426,3428)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图34中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。此外,图34中描绘的存储系统(3424,3426,3428)中的每一个均可以经由一个或多个数据通信链路(3420,3422)彼此连接并且还经由一个或多个数据通信路径(3410,3412,3414)连接到主机(3402)。
图34中描绘的示例方法包括接收(3404)针对跨越多个存储系统(3424,3426,3428)同步地复制的数据集(3418)的I/O操作(3416)。在图34中描绘的示例方法中,主机(3402)可以例如从正在主机上执行的应用、作为某个用户与主机(3402)交互的结果或者以各种其他方式接收(3404)针对跨越多个存储系统3424,3426,3428)同步地复制的数据集(3418)的I/O操作(3416)。针对跨越多个存储系统(3424,3426,3428)同步地复制的数据集(3418)的I/O操作(3416)可以例如作为要将数据写入到数据集(3418)的请求、作为要从数据集(3418)读取数据的请求、作为要拷贝数据集(3418)中的数据并且将这样的副本存储在别处的请求、作为要取数据集(3418)中的数据的快照的请求等被具体实现。
图34中描绘的示例方法还包括将所述多个存储系统(3424,3426,3428)中的特定存储系统(3426)标识(3406)为用于接收I/O操作(3416)的优选的存储系统。在图34中描绘的示例方法中,例如,通过跟踪主机(3402)在向存储系统(3424,3426,3428)中的每一个发出I/O操作时先前已经历的响应时间(或者以其他方式能够访问描述所述响应时间的信息)并且选择展示最快响应时间的存储系统(3426)作为用于接收I/O操作的优选的存储系统(3416),主机(3402)可以将所述多个存储系统(3424,3426,3428)中的特定存储系统(3426)标识(3406)为用于接收I/O操作(3416)的优选的存储系统。读者应领会的是,主机(3432)可以跟踪或者以其他方式能够访问描述可以被单独或者相结合地使用来将特定存储系统(3426)标识(3406)为用于接收I/O操作(3416)的优选的存储系统的其他度量(例如,可靠性相关度量、可用性相关度量、吞吐量度量)的信息。可替代地,主机(3402)可以被配置为从系统管理员、作为配置参数、从存储阵列本身或者以某种其他方式接收优选的存储系统的标识,使得可以通过简单地检查存储在主机(3402)内的某个配置参数或其他配置信息来执行将特定存储系统(3426)标识(3406)为用于接收I/O操作(3416)的优选的存储系统。
图34中描绘的示例方法还包括:在标识优选的存储系统(3426)之后,对于针对数据集(3418)的一个或多个I/O操作(3416)将所述一个或多个I/O操作(3416)发出(3408)到优选的存储系统(3426)。在图34中描绘的示例方法中,例如,经由通过主机(3402)与优选的存储系统(3426)之间的数据通信路径(812)在主机(3402)与优选的存储系统(3426)之间交换的一个或多个消息,主机(3402)可以将针对数据集(3418)的一个或多个I/O操作(3416)发出(3408)到优选的存储系统(3426)。
为了进一步说明,图35阐述了图示根据本公开的实施例的管理到同步地复制的存储系统(3424,3426,3428)的连接的附加示例方法的流程图。尽管被不太详细地描绘,然而图35中描绘的存储系统(3424,3426,3428)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图35中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图35中描绘的示例方法类似于图34中描绘的示例方法,因为图35中描绘的示例方法还包括:接收(3404)针对跨越多个存储系统(3424,3426,3428)同步地复制的数据集(3418)的I/O操作(3416);将所述多个存储系统(3424,3426,3428)中的特定存储系统(3426)标识(3406)为用于接收I/O操作(3416)的优选的存储系统;以及在标识优选的存储系统(3426)之后,对于针对数据集(3418)的一个或多个I/O操作(3416)将所述一个或多个I/O操作(3416)发出(3408)到优选的存储系统(3426)。
图35中描绘的示例方法还包括确定(3502)用于所述多个存储系统(3424,3426,3428)中的多个存储系统的相应的响应时间。在图35中描绘的示例方法中,例如,通过确定存储系统(3424,3426,3428)中的每一个为类似的I/O操作服务所需要的时间量,通过跟踪存储系统(3424,3426,3428)中的每一个为类似的I/O操作服务所需要的平均时间量等,主机(3402)可以确定(3502)用于所述多个存储系统(3424,3426,3428)中的多个存储系统的相应的响应时间。在这样的示例中,主机(3402)可以通过使用一个或多个内部时钟、通过检查附加到一个或多个消息的时间戳或者以某种其他方式跟踪这样的信息。
在图35中描绘的示例方法中,将所述多个存储系统(3424,3426,3428)中的特定存储系统(3426)标识(3406)为用于接收I/O操作的优选的存储系统(3416)可包括按照用于所述多个存储系统(3424,3426,3428)中的多个存储系统的相应的响应时间将所述多个存储系统(3424,3426,3428)中的特定存储系统标识(3504)为用于接收I/O操作(3416)的优选的存储系统。在图35中描绘的示例方法中,例如,通过选择与最快响应时间相关联的存储系统作为优选的存储系统,通过选择其响应时间满足预定服务质量阈值的任何存储系统作为优选的存储系统,或者以某种其他方式,主机(3402)可以按照用于所述多个存储系统(3424,3426,3428)中的多个存储系统的相应的响应时间将所述多个存储系统(3424,3426,3428)中的特定存储系统标识(3504)为用于接收I/O操作(3416)的优选的存储系统。
图35中描绘的示例方法还包括:检测(3506)用于存储系统(3424,3426,3428)中的至少一个的响应时间中的变化。在图35中描绘的示例方法中,主机(3402)可以作为针对存储系统中的每一个运行附加测试的结果、通过确定平均响应时间已偏离超过预定阈值量、通过检测用于通过特定数据通信链路交换消息的能力的某种中断或者以某种其他方式检测(3506)用于存储系统(3424,3426,3428)中的至少一个的响应时间中的变化。
图35中描绘的示例方法还包括按照响应时间中的变化选择(3508)所述多个存储系统(3424,3426,3428)中的不同的存储系统作为优选的存储系统。在图35中描绘的示例方法中,例如,通过选择与最快更新响应时间相关联的存储系统作为优选的存储系统,通过选择其更新响应时间满足预定服务质量阈值的任何存储系统作为优选的存储系统,或者以某种其他方式,主机(3402)可以选择(3508)所述多个存储系统(3424,3426,3428)中的不同的存储系统作为用于接收I/O操作(3416)的优选的存储系统。
为了进一步说明,图36阐述了图示根据本公开的实施例的管理到同步地复制的存储系统(3424,3426,3428)的连接的附加示例方法的流程图。尽管被不太详细地描绘,然而图36中描绘的存储系统(3424,3426,3428)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图36中描绘的存储系统可以包括与上述的存储系统相同、更少、附加的组件。
图36中描绘的示例方法类似于图34中描绘的示例方法,因为图36中描绘的示例方法还包括:接收(3404)针对跨越多个存储系统(3424,3426,3428)同步地复制的数据集(3418)的I/O操作(3416);将所述多个存储系统(3424,3426,3428)中的特定存储系统(3426)标识(3406)为用于接收I/O操作(3416)的优选的存储系统;以及在标识优选的存储系统(3426)之后,对于针对数据集(3418)的一个或多个I/O操作(3416)将所述一个或多个I/O操作(3416)发出(3408)到优选的存储系统(3426)。
图36中描绘的示例方法还包括从存储系统(3428)中的一个接收(3602)优选的存储系统的标识(3610)。在图36中描绘的示例方法中,主机(3402)可以经由通过存储系统(3428)与主机(3402)之间的数据通信路径(3414)交换的一个或多个消息从存储系统(3428)中的一个接收(3602)优选的存储系统的标识(3610)。主机(3402)可以保留优选的存储系统的标识(3610),例如,作为被存储在主机内的配置设置。因此,可以按照配置设置执行将所述多个存储系统(3424,3426,3428)中的特定存储系统(3426)标识(3406)为用于接收I/O操作(3416)的优选的存储系统,但是在其他实施例中可以以不同的方式(例如,由系统管理员、由在主机上执行的另一软件模块)设置配置设置。
图36中描绘的示例方法还包括检测(3604)主机(3402)已从一个位置移动到另一位置。在图36中描绘的示例方法中,例如,通过确定主机(3402)已连接到新数据通信互连,通过检测主机(3402)已被安装在机架内的不同位置内或者安装在新机架内,或者以某种其他方式,主机(3402)可以检测(3604)它已从一个位置移动到另一位置。相对于机架或者在数据中心内或者基于数据中心或校园网络拓扑的位置可以是可影响主机与用于豆荚的特定存储系统之间的性能的“地点”的一个方面。在横跨机架或者连接到多个网络的单个存储系统中,地点可能甚至适用于豆荚内的单独的存储系统上的单独的存储网络适配器。
图36中描绘的示例方法还包括将所述多个存储系统中的不同的存储系统标识(3608)为用于接收针对数据集(3418)的I/O操作的优选的存储系统。在图36中描绘的示例方法中,例如,通过重新测量与存储系统中的每一个相关联的响应时间并且选择展示最快响应时间的存储系统,主机(3402)可以将所述多个存储系统中的不同的存储系统标识(3608)为用于接收针对数据集(3418)的I/O操作的优选的存储系统。在图36中描绘的示例方法中,可以响应于检测到主机(3402)已移动而执行将所述多个存储系统中的不同的存储系统标识(3608)为用于接收针对数据集(3418)的I/O操作的优选的存储系统。
图36中描绘的示例方法还包括检测(3606)主机(3402)的配置变更。在图36中描绘的示例方法中,例如,通过检测某个软件的不同版本已被安装在主机(3402)上,通过检测主机(3402)内的某个硬件组件已被改变或者添加等,主机(3402)可以检测(3606)主机(3402)的配置变更。在图36中描绘的示例方法中,可以可替代地响应于检测到主机(3402)的配置变更而执行将所述多个存储系统中的不同的存储系统标识(3608)为用于接收针对数据集(3418)的I/O操作的优选的存储系统。
为了进一步说明,图37阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。尽管被不太详细地描绘,然而图37中描绘的存储系统(3700A-3700N)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图37中描绘的存储系统(3700A-3700N)可以包括与上述的存储系统相同、更少或附加的组件。
在以下示例中,用于调解服务的自动存储系统配置可以包括确定一组存储系统(3700A-3700N)当中的给定存储系统(3700A)是否被配置为请求来自调解目标或服务的调解—其中,在给定存储系统(3700A)未被配置为请求调解的情况下,给定存储系统(3700A)在工作之前被配置为从预先配置的位置请求或者获得调解服务句柄。当存储系统首次联机或者启动时,可以发生存储系统是否被配置为请求调解的这样的确定,其中存储系统在装运之前已被配置为从指定的配置服务(诸如配置服务(3751))请求配置信息,其中配置服务可以在独立计算机系统或提供配置服务的第三方计算环境内操作。在一些示例中,调解服务可能不是由存储系统配置的,而是由提供配置服务的第三方配置的。
进一步地,在一些示例中,响应于发起数据集在一组存储系统(3700A-3700N)之间的同步复制而执行确定一组存储系统(3700A-3700N)当中的给定存储系统(3700A)是否被配置为请求来自调解服务的调解。在此示例中,响应于存储系统被添加到同步地复制数据集的存储系统的集合或豆荚,当前作为豆荚的成员的存储系统可以将用于或者与调解服务或调解竞争目标有关的一个或多个句柄自动地转移到被添加的存储系统。以这种方式,第一存储系统从配置服务接收调解目标,并且添加到豆荚的每个存储系统从豆荚成员接收其调解目标,这导致所有成员存储系统都被配置为请求来自同一调解目标的调解。
如上所述,可以在豆荚被创建时、在豆荚被伸展时或者在豆荚被首次伸展时请求调解服务句柄,使得可以在豆荚中的存储系统之间的将来通信故障的情况下需要调解。调解服务句柄可以是广域网上的联系地址以及可用于管理密钥池以便处理针对存储系统集群或豆荚的调解需求的加密安全令牌。另一方面,豆荚中的第一存储系统可以确定要与众所周知的调解服务一起使用的安全句柄以供在第一或后续调解竞争中使用,其中句柄由该第一存储系统秘密地确定,而无需与调解服务进行具体或必要的交互,并且其中句柄然后被传送到已经在豆荚中的其他存储系统或者随着豆荚被伸展而覆盖它们。
响应于错误(诸如存储系统之间的通信故障)而从事调解服务的过程—其中存储系统可以被配置为存储指示为广域网上的联系地址和可用于管理密钥池以便调解的加密安全令牌的句柄—在被整体地并入本文的申请参考文献No.15/703,559中进行了更详细的描述。另外在申请参考文献No.15/703,559内讨论的是使用各种群体协议来确定复制数据集的一组存储系统当中的哪些存储系统将继续为针对数据集的I/O请求服务。
然而,虽然申请参考文献No.15/703,559描述了用于调解和群体协议的实施方式,但是本公开的焦点是用于调解服务的自动存储系统配置。换句话说,因为存储系统在装运之前可以被设置为联系配置服务以请求调解服务的句柄,使得存储系统可以将它本身配置为通过调解来对通信故障做出响应,并且在存储系统自动地转移在更多的存储系统被添加到豆荚时处理的调解的情况下—用户(诸如管理员)无需采取任何动作以便让存储系统被配置为执行调解。
如图37中描绘的,正在同步地复制数据集(3752)的多个存储系统(3700A-3700N)可以通过一个或多个网络(未描绘)与每个其他存储系统且与调解服务(3701)进行通信—其中调解服务(3701)可以解决哪一个存储系统在存储系统之间的通信故障的情况下、在存储系统脱机的情况下或者由于某个其他触发事件而继续为数据集服务。进一步地,在此示例中,响应于存储系统联机,配置服务(3751)可以通过由存储系统使用预先配置的联系地址来请求调解服务(3701)的一个或多个句柄自动地可达。通常,任何数量的存储系统可以是正在同步地复制数据集(3752)的同步列表的一部分。
图37中描绘的示例方法包括确定(3702)存储系统(3700A-3700N)当中的特定存储系统(3700A)未被配置为请求来自调解目标的调解以用于在同步地复制数据集(3752)的存储系统之间进行调解。确定(3702)存储系统(3700A-3700N)当中的特定存储系统(3700A)未被配置为请求来自调解目标的调解可以由在控制器内包括启动过程的存储系统(3700A)实现,其中启动过程可以配置通信故障或与通信故障有关的中断如何被处理。例如,控制器462的启动过程(即调解处理程序(3762))可以例如通过读取指示是否已确定、接收或者请求了调解句柄的状态标志或条件代码来检查。如果调解处理程序(3762)检测到已经配置了调解句柄,则启动过程的这个部分完成。然而,如果调解处理程序(3762)检测到尚未配置调解句柄,则调解处理程序(3762)可以继续从配置服务(3751)确定这样的句柄或者请求调解句柄—其中用于调解服务(3701)的联系地址可以是在存储系统被转运之前由制造商所定义的系统设置或系统变量。
图37中描绘的示例方法还包括由特定存储系统(3700A)从配置服务(3751)请求(3704)指示用于调解服务(3701)的一个或多个服务句柄的配置信息。可以通过调解处理程序(3762)访问所存储的用于配置服务(3751)的联系信息并且发送对用于调解服务(3701)的一个或多个服务句柄的请求(3754)来实现由特定存储系统(3700A)从配置服务(3751)请求(3704)指示用于调解服务(3701)的一个或多个服务句柄的配置信息。
图37中描绘的示例方法还包括按照从配置服务(3751)接收到的一个或多个服务句柄将调解处理程序配置(3706)为响应于检测到与存储系统(3700B-3700N)中的一个的通信故障而与调解服务进行通信。可以通过调解处理程序(3762)为在对通信故障做出响应时使用的调解服务(3701)定义服务句柄或联系地址来实现按照从配置服务(3751)接收到的一个或多个服务句柄将调解处理程序配置(3706)为响应于检测到与存储系统(3700B-3700N)中的一个的通信故障而与调解服务进行通信,其中可以在来自配置服务(3751)的对请求(3754)做出响应的响应消息内指定服务句柄(3756)。
为了进一步说明,图38阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。图38中描绘的示例方法类似于图37中描绘的示例方法,因为图38中描绘的示例方法还包括:确定(3702)存储系统(3700A-3700N)当中的特定存储系统(3700A)未被配置为请求来自调解目标的调解以用于在同步地复制数据集(3752)的存储系统之间进行调解;由特定存储系统(3700A)从配置服务(3751)请求(3704)指示用于调解服务(3701)的一个或多个服务句柄的配置信息;以及按照从配置服务(3751)接收到的一个或多个服务句柄将调解处理程序配置(3706)为响应于检测到与存储系统(3700B-3700N)中的一个的通信故障而与调解服务进行通信。
然而,图38中描绘的示例方法进一步包括,响应于将存储系统添加到同步地复制数据集(3752)的存储系统(3700A-3700N),将用于调解服务的一个或多个句柄自动地转移(3802)到被添加的存储系统。在本文中描述了用于将存储系统添加到豆荚使得所添加的存储系统可以变成同步列表的成员的过程。给定所描述的用于将存储系统添加到豆荚的过程,可以通过进一步指定所描述的用于向被添加的系统发送命令来实现将用于调解服务的一个或多个句柄自动地转移(3802)到被添加的存储系统,所述命令指示由调解处理程序使用的服务句柄将被定义为在该命令内发送的服务句柄。
为了进一步说明,图39阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。图39中描绘的示例方法类似于图37中描绘的示例方法,因为图39中描绘的示例方法还包括:确定(3702)存储系统(3700A-3700N)当中的特定存储系统(3700A)未被配置为请求来自调解目标的调解以用于在同步地复制数据集(3752)的存储系统之间进行调解;由特定存储系统(3700A)从配置服务(3751)请求(3704)指示用于调解服务(3701)的一个或多个服务句柄的配置信息;以及按照从配置服务(3751)接收到的一个或多个服务句柄将调解处理程序配置(3706)为响应于检测到与存储系统(3700B-3700N)中的一个的通信故障而与调解服务进行通信。
然而,图39中描绘的示例方法进一步包括由特定存储系统(3700A)向调解服务(3701)提供(3902)用于在存储系统(3700A-3700N)之间进行调解的安全或随机化密钥(3952)。可以像在被整体地并入本文的应用参考文献No.15/703,559内所描述的那样实现由特定存储系统(3700A)向调解服务(3701)提供(3902)用于在存储系统(3700A-3700N)之间进行调解的安全或随机化密钥(3952)。
为了进一步说明,图40阐述了图示根据本公开的一些实施例的针对用于调解服务的自动存储系统配置的示例方法的流程图。尽管被不太详细地描绘,然而图40中描绘的存储系统(3700A-3700N)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图40中描绘的存储系统(3700A-3700N)可以包括与上述的存储系统相同、更少、附加的组件。
在自动存储系统配置的这个示例实施方式中,不是存储系统在被装运和安装之前被预先配置为从固定预先配置的位置(诸如配置服务)请求或者获得调解服务句柄—而是存储系统可以被预先配置有用于调解服务的固定联系信息。在为数据集创建豆荚时,给定存储系统可以通过生成密钥的实例并且将密钥提供给调解服务来将调解服务的使用配置为在豆荚中的存储系统之间调解。进一步地,在为数据集创建豆荚时,给定存储系统还可以配置豆荚中的其他存储系统—例如,随着存储系统被添加到豆荚—通过将可被提供给调解服务的相同生成的密钥提供给豆荚中的存储系统中的每一个。在接收到所生成的密钥时,如果存储系统确定调解是对系统故障的适当响应,则其他存储系统可以使用所生成的密钥来请求调解。
在此示例中,调解服务可以对要锁定特定密钥的使用的简单请求做出响应,其中调解服务在接收特定密钥之前未被配置有特定密钥,并且调解服务未被配置为从任何特定存储系统、豆荚或客户接收特定密钥。如果特定密钥已被给定存储系统在调解服务处锁定,则其他存储系统将不能够在调解服务处锁定该特定密钥。
通常,可以使用加密安全方案来生成或者命名密钥以便防止漏洞利用或黑客攻击,其中攻击者可能预测密钥值并预先锁定它。进一步地,使用要在针对集群或豆荚解决下一个竞争时使用的特定密钥,集群或豆荚中的一组存储系统可以交换要在每次调解尝试之后使用的新近生成的密钥。在另一示例中,在存储系统被添加到集群或豆荚之后,豆荚配置的各方面中的一个方面可以包括给被添加的存储系统提供当前密钥以用于下一个调解请求。如果某个事件(诸如存储设备故障或网络故障)触发调解,则一个或多个存储系统可以向调解服务请求对当前密钥的锁定。对当前密钥的锁定的这个请求对至多一个请求者来说可成功—如果对请求的响应丢失,则锁定可以被再次请求(或者查询,取决于实施方式),其中如果后续请求被调解服务标识为来自同一请求者则后续请求可以成功。
在一些示例中,在特定调解密钥的单次使用之后,集群或豆荚中的任何剩余的活动存储系统可以交换新密钥以用于将来的调解尝试。还可以在从未通过从调解服务接收成功的响应确认前一个调解的情况下执行新密钥的交换—只要在故障时作为成员的存储系统重新开始彼此的通信即可。
在替代实施方式中,客户可以显式地配置调解服务,诸如在由客户管理的虚拟机上操作的调解服务。在又一个实施方式中,在配置集群或豆荚时可以存在中间步骤,由此存储系统在一个地址上联系调解配置服务以确定集群或豆荚将用于调解的服务位置地址或其他联系信息。在此实施方式中,此中间步骤可以是用于集群或豆荚的核心配置过程的一部分,其中在集群或豆荚内的存储系统之间交换服务位置地址或其他联系信息,并且其中服务位置地址或其他联系信息随着新存储系统被添加到集群或豆荚而被发送到新存储系统。在供应商为特定客户布置特定调解服务实例的情形下,这样的实施方式可能是有用的。可替代地,这样的实施方式可以用于基于地理学显式地确定位调解服务或者用于使客户位置与云服务可用性或可靠性区域配。
在一些示例中,关于调解服务,可以配置调解服务,使得可以由存储系统在没有客户交互的情况下联系它,其中调解服务通过接收要针对集群或豆荚内的调解的具体实例锁定的请求并且只有当对于同一锁未做出冲突请求时才用成功响应,并且其中成功由集群或豆荚中的一个存储系统使用作为确保它可在检测到使一个存储系统与至少一个其他存储系统隔离的故障之后针对集群或豆荚安全地重新开始服务的一部分。调解服务可以是基于云的服务,诸如提供从一个或多个连接客户端接收请求的多个前端web服务器的基于云的服务,其中前端web服务器可以对照映射到一定数量的IP地址并且可以进一步被虚拟化在多个网络交换机后面的特定DNS主机名来通告。在一些示例中,可以提供多个主机名,并且前端web服务器可以被配置为跨越多个后端服务器分散或者分发对调解的请求。例如,对于调解服务,给定与来自存储系统的特定锁定请求相关联的特定调解密钥,可以将特定密钥散列到然后针对每个接收到的密钥实现锁定的多个后端数据库中的任一个。进一步地,因为多个存储系统可以使用同一密钥来竞争以针对同一豆荚调解,所以存储系统可以联系前端web服务器中的任一个—只要它们与同一整体基于云的调解服务相关联,所述前端web服务器就可以散列到同一后端数据库以便实现锁定。在此示例中,后端数据库可以被实现为具有适当保证的分布式事务数据库(例如,DynamoDBTM等),或者它可以被实现为共享存储装置上的高可用性数据库服务器,或者它可以被实现作为具有用于高可用性和数据冗余的适当机制的同步复制的数据库服务器,或者它可以使用具有适当保证的条件存储原语的对象存储模型来实现,或者它可以通过各种其他技术中的任一种来实现。
进一步地,在一些示例中,可以实现调解服务以确保每个密钥—每个集群的密钥、豆荚的密钥或客户的密钥或与其他类型的域有关的密钥将取决于实施方式而与其他密钥、集群、豆荚、客户或其他类型的域安全地隔离。这可确保例如用于调解服务的有效多租期模型。
图40中描绘的示例方法包括由存储系统(3700A-3700N)中的特定存储系统(3700A)确定(4002)要将存储系统中的一个或多个配置为请求来自调解服务(3701)的调解以用于在同步地复制数据集(3752)的存储系统(3700A-3700N)之间进行调解。可以使用不同的技术来实现由存储系统(3700A-3700N)中的特定存储系统(3700A)确定(4002)要将存储系统中的一个或多个配置为请求来自调解服务(3701)的调解以用于在同步地复制数据集(3752)的存储系统(3700A-3700N)之间进行调解。在一个示例中,可以基于将集群或豆荚扩展为包括另一一个或多个存储系统来实现确定(4002)要配置存储系统,其中如果新存储系统被添加到集群或豆荚,则每个新存储系统被提供了每个其他现有存储系统被配置为用于调解的调解用密钥。在另一示例中,可以通过维护元数据来实现确定(4002)要配置存储系统,所述元数据对于作为豆荚的成员的同步地复制数据集(3752)的每个存储系统描述给定存储系统是否已被提供了密钥的实例,其中元数据的初始状态可以指示没有存储系统具有密钥。例如,如果对密钥来说没有当前共识,则特定存储系统(3700A)可以如上所述使用密码技术来生成密钥的实例,所述密码技术生成将在计算上不可用于预测的密钥。进一步地,特定存储系统(3700A)在启动期间或周期性地可以确定尚未生成密钥—或者对密钥值没有当前共识—并且,作为响应,可以生成密钥的实例。进一步地,在一些示例中,调解密钥可以是彼此同步的存储系统当中的同步数据集(3752)的复制内容的一部分,包括元数据。然后可以在存储系统之间使用群体策略作为用于确定哪些存储系统保持彼此同步的算法的整体合集的一部分。以这种方式,存储系统(3700A-3700N)可以在使用调解服务的情况下使用密钥的同一实例。
图40中描绘的示例方法还包括向存储系统(3700A-3700N)中的一个或多个提供(4004)用于请求来自调解服务(3701)的调解的密钥(4052)的实例。可以通过使用一个或多个网络端口并且跨越一个或多个通信网络从特定存储系统(3700A)向被确定为未被配置为请求来自调解服务的调解的一个或多个存储系统中的每一个发送密钥的实例来实现向存储系统(3700A-3700N)中的一个或多个提供(4004)用于请求来自调解服务(3701)的调解的密钥(4052)的实例。在一些情况下,可以响应于由存储系统(3700A-3700N)中的特定存储系统(3700A)确定(4002)存储系统中的一个或多个未被配置为请求来自调解服务(3701)的调解以用于在同步地复制数据集(3752)的存储系统(3700A-3700N)之间进行调解而执行将密钥的实例提供(4004)给一个或多个存储系统(3700B-3700N)。
在一些实施方式中,在正常情况下,豆荚可以从调解密钥开始,并且将随着豆荚被伸展以包括附加存储系统而发送调解密钥—其中在一些情况下可以被认为是“领导者”的特定存储系统将响应于一个密钥被使用一次而发送新调解密钥,并且新调解密钥是后续调解竞争所需要的。换句话说,同上述实施方式对比,在一些实施方式中,不是显式地确定存储系统是否被配置为使用调解密钥,而是存储系统基于豆荚的创建可以能够访问调解密钥作为豆荚的创建的一部分—其中,响应于存储系统被添加到豆荚,调解密钥被分发到新存储系统作为数据和元数据跨越豆荚中的存储系统的同步的一部分。进一步地,如上面所指出的,在此实施方式中,响应于使用调解密钥或者尝试使用调解密钥,可以生成新密钥并将它分发到豆荚中的存储系统。以这种方式,豆荚中的存储系统可以被配置为使用响应于豆荚的创建、将豆荚伸展为包括附加存储系统以及对调解密钥的使用或尝试使用而生成的同一调解密钥。如上所述,使用调解密钥的配置可以包括将可由调解处理程序使用的当前密钥指定为已跨越豆荚的存储系统同步的调解密钥。
图40中描绘的示例方法还包括向调解服务(3701)提供(4006)密钥(4052)的实例,其中调解服务向提供密钥(4052)的实例的给定存储系统提供调解服务。可以通过使用一个或多个网络端口并且跨越一个或多个通信网络从特定存储系统(3700A)向调解服务(3701)发送密钥的实例来实现向调解服务(3701)提供(4006)密钥(4052)的实例,其中调解服务向提供密钥(4052)的实例的给定存储系统提供调解服务。在一些情况下,可以响应于由存储系统(3700A-3700N)中的特定存储系统(3700A)确定(4002)存储系统中的一个或多个未被配置为请求来自调解服务(3701)的调解以用于在同步地复制数据集(3752)的存储系统(3700A-3700N)之间进行调解而执行向调解服务(3701)提供(4006)密钥(4052)的实例,其中调解服务向提供密钥(4052)的实例的给定存储系统提供调解服务。
图40中描绘的示例方法还包括将调解处理程序(3762)配置(4006)为响应于检测到与存储系统(3700B-3700N)中的至少一个的通信故障而将密钥的实例提供给调解服务,可以通过调解处理程序(3762)将当前密钥定义为所生成的要在对通信故障做出响应时提供给调解服务(3701)的密钥的实例来实现将调解处理程序(3762)配置(4006)为响应于检测到与存储系统(3700B-3 700N)中的至少一个的通信故障而将密钥的实例提供给调解服务。
为了进一步说明,图41阐述根据本公开的一些实施例的可以作为元数据对象的结构化合集被实现的元数据表示的图,所述元数据对象一起可以表示存储数据的逻辑卷或逻辑卷的一部分。元数据表示4150、4154和4160可以被存储在存储系统(4106)内,并且可以针对存储在存储系统(4106)内的多个存储对象(诸如卷或卷的各部分)中的每一个来生成和维护一个或多个元数据表示。
虽然元数据对象的其他类型的结构化合集是可能的,但是在此示例中,可以将元数据表示构造为节点的有向非循环图(DAG),其中,为了维护对任何给定节点的高效访问,可以根据各种方法来构造和平衡DAG。例如,用于元数据表示的DAG可以被定义为B树的类型,并且响应于元数据表示的结构的变化而相应地平衡,其中响应于通过元数据表示所表示的底层数据的变化或对通过元数据表示所表示的底层数据的添加可以发生元数据表示的变化。虽然在此示例中,为了简单起见存在仅两个级别,但是在其他示例中,元数据表示可以横跨多个级别并且可以包括数百或数千个节点,其中每个节点可以包括到其他节点的任何数量的链接。
进一步地,在此示例中,元数据表示的叶可以包括到卷或卷的一部分的存储数据的指针,其中逻辑地址或卷和偏移可以用于标识和浏览元数据表示以到达引用与逻辑地址相对应的存储数据的一个或多个叶节点。例如,可以通过元数据表示(4150)来表示卷(4152),所述元数据表示(4150)包括多个元数据对象节点(4152,415A-4152N),其中叶节点(4152A-4152N)包括到相应的数据对象(4153A-4153N,4157)的指针。数据对象可以是存储系统(4106)内的任何大小的数据单元。例如,数据对象(4153A-4153N,4157)可以各自是逻辑盘区,其中逻辑盘区可以是某个指定的大小,诸如1MB、4MB或某个其他大小。
在此示例中,可以创建快照(4156)作为存储对象的快照,在这种情况下是卷(4152),其中在当快照(4156)被创建时的时间点,用于快照(4156)的元数据表示(4154)包括用于针对卷(4152)的元数据表示(4150)的元数据对象中的全部。进一步地,响应于快照(4156)的创建,可以将元数据表示(4154)指定为只读。然而,可以继续修改共享元数据表示的卷(4152),并且当在快照被创建的时刻时,用于卷(4152)和快照(4156)的元数据表示是相同的,因为对与卷(4152)相对应的数据进行了修改,并且响应于这些修改,用于卷(4152)和快照(4156)的元数据表示可以发散并变得不同。
例如,给定用于表示卷(4152)的元数据表示(4150)和用于表示快照(4156)的元数据表示(4154),存储系统(4106)可以接收写入到最终被存储在特定数据对象(4153B)内的数据的I/O操作,其中数据对象(4153B)通过叶节点指针(4152B)指向,并且其中叶节点指针(4152B)是两个元数据表示(4150,4154)的一部分。响应于写入操作,通过元数据表示(4154)所引用的只读数据对象(4153A-4153N)保持不变,并且指针(4152B)也可以保持不变。然而,表示当前卷(4152)的元数据表示(4150)被修改为包括用于保持通过写入操作所写入的数据的新数据对象,其中经修改的元数据表示被描绘为元数据表示(4160)。进一步地,写入操作可以针对数据对象(4153B)的仅一部分,因此,除了用于写入操作的净荷之外,新数据对象(4157)可以包括数据对象(4153B)的先前内容的副本。
在此示例中,作为处理写入操作的一部分,用于卷(4152)的元数据表示(4160)被修改以移除现有元数据对象指针(4152B)并且以包括新元数据对象指针(4158),其中新元数据对象指针(4158)被配置为指向新数据对象(4157),其中新数据对象(4157)存储通过写入操作所写入的数据。进一步地,用于卷(4152)的元数据表示(4160)继续包括在先前元数据表示(4150)内包括的所有元数据对象—同时排除引用了目标数据对象的元数据对象指针(4152B),其中元数据对象指针(4152B)继续引用将被覆写的只读数据对象(4153B)。
通过这种方式,使用元数据表示,卷或卷的一部分可以被认为快照,或者被认为被拷贝,通过创建元数据对象并且在没有数据对象的实际重复的情况下—其中可以推迟数据对象的重复直到写入操作被指向通过元数据表示所引用的只读数据对象中的一个为止。
换句话说,使用元数据表示来表示卷的优点是卷的快照或副本可以被创建,并且可按照恒定顺序时间访问,具体地,可按照花费来为快照或副本创建元数据对象并且为快照或副本元数据对象创建对用于正在快照或者拷贝的卷的现有元数据表示的引用的时间访问。
作为示例用途,虚拟化按引用拷贝可以以类似于在创建卷的快照时使用元数据表示的方式利用元数据表示—其中用于虚拟化按引用拷贝的元数据表示可以常常对应于用于整个卷的元数据表示的一部分。虚拟化按引用拷贝的示例实施方式可以在虚拟化存储系统的上下文内,其中在卷内并在卷之间的多个块范围可以引用存储数据的统一副本。在这样的虚拟化存储系统中,上述的元数据可以用于处理虚拟或逻辑地址与物理或真实地址之间的关系—换句话说,存储数据的元数据表示使得能实现可以被认为是闪存友好的虚拟化存储系统,因为它使闪速存储器上的磨损减少或者最小化。
在一些示例中,可以以各种方式组合逻辑盘区,所述各种方式包括作为简单合集或者作为被形成为一组逻辑盘区引用的某个较大规模逻辑盘区内的逻辑上相关的地址范围。这些较大的组合也能被给予各种种类的逻辑盘区标识,并且能被进一步组合成更大的逻辑盘区或合集。写时拷贝状态能应用于各种层,并且取决于实施方式以各种方式应用。例如,应用于盘区的逻辑合集中的一逻辑合集的写时拷贝状态可能导致拷贝的合集保留对未变化的逻辑盘区的引用并且在写时拷贝逻辑合集的仅一部分发生改变时创建写时拷贝的逻辑盘区(通过按需拷贝对任何未变化的存储数据块的引用)。
可以通过引用存储数据块或引用逻辑盘区或将逻辑盘区(或标识的逻辑盘区的合集)标记为写时拷贝的组合来在此模型中实现重复删除、卷快照或块范围快照。
进一步地,利用闪存存储系统,存储数据块可以随着合集被写出到作为较大擦除块的一部分的页面中而被以各种方式组织和分组在一起。删除或替换的存储数据块的最终垃圾收集可以涉及将存储在一定数量的页面中的内容移动到别处,使得可擦除整个擦除块并准备重用。选择物理闪存页面、最终迁移并垃圾收集它们、然后擦除闪存擦除块以供重用的这个过程可以或者可以不由也正在处理逻辑盘区、重复删除、压缩、快照、虚拟拷贝或其他存储系统功能的存储系统的方面来协调、驱动或者执行。用于选择页面、迁移页面、垃圾收集并擦除擦除块的协调或驱动过程可以进一步考虑闪速存储器设备单元、页面和擦除块的各种特性,诸如使用次数、老化预测、对电压电平的调整或过去恢复存储数据所需的重试次数。它们还可以考虑跨越存储系统内的所有闪速存储器设备的分析和预测。
为了继续此示例,其中可以基于包括逻辑盘区的有向非循环图来实现存储系统,可将逻辑盘区分类为两种类型:叶逻辑盘区,其以某种方式引用一定量的存储数据,以及复合逻辑盘区,其引用其他叶或复合逻辑盘区。
叶盘区可以各种方式引用数据。它可直接地指向单个范围的存储数据(例如,64千字节的数据),或者它可以是对存储数据的引用的合集(例如,将与范围相关联的一定数量的虚拟块映射到物理存储块的内容的1兆字节“范围”)。在后者情况下,可以使用某个标识来引用这些块,并且可以不将盘区的范围内的一些块映射到任何东西。另外,在后者情况下,这些块引用不需要是唯一的,从而允许来自一定数量的卷内并且跨越一定数量的卷的一定数量的逻辑盘区内的虚拟块的多个映射映射到相同的物理存储块。代替存储块引用,逻辑盘区能对简单模式进行编码:例如,作为相同字节的串的块能简单地对块是相同字节的重复模式进行编码。
复合逻辑盘区可以是具有某个虚拟大小的内容的逻辑范围,其包括各自从内容的复合逻辑盘区逻辑范围的子范围映射到底层叶或复合逻辑盘区的多个映射。对与复合逻辑盘区的内容有关的请求进行变换然后涉及在复合逻辑盘区的上下文内取得针对该请求的内容范围、确定请求映射到哪些底层叶或复合逻辑盘区以及对请求进行变换以应用于那些底层叶或复合逻辑盘区内的适当范围的内容。
可将卷或文件或其他类型的存储对象描述为复合逻辑盘区。因此,可使用此盘区模型来组织这些呈现的存储对象。
取决于实施方式,能从多个其他复合逻辑盘区引用叶或复合逻辑盘区,从而有效地允许在卷内并跨越卷便宜地重复内容的较大合集。因此,逻辑盘区能被基本上布置在引用的非循环图内,每个引用在叶逻辑盘区中结束。这可用于做出卷的副本,做出卷的快照,或者作为作为EXTENDED COPY或类似类型的操作的一部分在卷内并在卷之间支持虚拟范围拷贝的一部分。
实施方式可以给每个逻辑盘区提供可用于命名它的标识。这简化引用,因为复合逻辑盘区内的引用变成包括逻辑盘区标识和与每个这样的逻辑盘区标识相对应的逻辑子范围的列表。在逻辑盘区内,每个存储数据块引用也可以基于用于命名它的某个标识。
为了支持盘区的这些重复使用,我们可添加另一个能力:写时拷贝逻辑盘区。当修改操作影响写时拷贝叶或复合逻辑盘区时该逻辑盘区被拷贝,其中副本是新引用并且可能具有新标识(取决于实施方式)。副本保留与底层叶或复合逻辑盘区有关的所有引用或标识,但是同时任何修改由修改操作产生。例如,WRITE、WRITE SAME、XDWRITEREAD、XPWRITE或COMPARE AND WRITE请求可以在存储系统中存储新块(或者使用重复删除技术来标识现有存储块),从而导致修改所对应的叶逻辑盘区以将标识引用或者存储到一组新的块,可能替换用于一组先前的块的引用和存储的标识。可替代地,UNMAP请求可以修改叶逻辑盘区以移除一个或多个块引用。在两种类型的情况下,叶逻辑盘区被修改。如果叶逻辑盘区是写时拷贝,则将创建新叶逻辑盘区,所述新叶逻辑盘区是通过从旧盘区拷贝未受影响的块引用并且然后基于修改操作替换或者移除块引用而形成的。
然后可以修改用于定位叶逻辑盘区的复合逻辑盘区以将与所拷贝和修改的叶逻辑盘区相关联的新叶逻辑盘区引用或标识存储为前一个叶逻辑盘区的替代。如果该复合逻辑盘区是写时拷贝,则新复合逻辑盘区被创建为新引用或者有新标识,并且其底层逻辑盘区的任何未受影响的引用或标识被拷贝到该新复合逻辑盘区,同时前一个叶逻辑盘区引用或标识用新叶逻辑盘区引用或标识替换。
此过程基于通过用于处理修改操作的非循环图的搜索路径从引用的盘区继续进一步向后到引用复合盘区,同时所有写时拷贝逻辑盘区被拷贝、修改和替换。
这些拷贝的叶和复合逻辑盘区然后可丢弃写时拷贝的特性,使得进一步修改不会产生附加副本。例如,第一次写时复制“父”复合盘区内的某个底层逻辑盘区被修改时,可以拷贝和修改该底层逻辑盘区,同时副本具有被然后写入到父复合逻辑盘区的拷贝和替换的实例中的新标识。然而,第二次某个其他底层逻辑盘区被拷贝和修改时并且在该其他底层逻辑盘区副本的新标识被写入到父复合逻辑盘区情况下,然后可代表对父复合逻辑盘区的引用在进一步拷贝和替换不必要的情况下修改父盘区。
对没有当前叶逻辑盘区的卷或复合逻辑盘区的新区域的修改操作可以创建新叶逻辑盘区以存储那些修改的结果。如果要从现有写时拷贝逻辑盘区引用该新逻辑盘区,则该现有写时拷贝复合逻辑盘区将被修改以引用新逻辑盘区,从而产生类似于用于修改现有叶逻辑盘区的序列的另一拷贝、修改和替换操作序列。
如果父复合逻辑盘区不能增长得足够大(基于实施方式)以覆盖包括要为新修改操作创建的新叶逻辑盘区的关联的地址范围,则可以将父复合逻辑盘区拷贝到然后从单个“祖父”复合逻辑盘区引用的两个或更多个新复合逻辑盘区中,所述单个“祖父”复合逻辑盘区又再次是新引用或新标识。如果该祖父逻辑盘区它本身是通过写时拷贝的另一复合逻辑盘区找到的,则将以与先前段落中所描述的类似方式拷贝和修改该另一复合逻辑盘区。这个写时拷贝模型可被用作基于逻辑盘区的这些有向非循环图在存储系统实施方式内实现快照、卷副本和虚拟卷地址范围副本的一部分。为了将快照制作为另外可写卷的只读副本,与该卷相关联的逻辑盘区的图被标记为写时拷贝并且通过快照来保留对原始复合逻辑盘区的引用。对卷的修改操作然后将按需做出逻辑盘区副本,从而产生存储那些修改操作的结果的卷以及保留原始内容的快照。除了原始卷和所拷贝的卷都可修改内容从而产生它们自己的拷贝的逻辑盘区图和子图之外,卷拷贝是类似的。
虚拟卷地址范围拷贝可通过在叶逻辑盘区内且在叶逻辑盘区之间拷贝块引用来操作(除非块引用的变化修改写时拷贝叶逻辑盘区,否则它本身不涉及使用写时拷贝技术)。可替代地,虚拟卷地址范围拷贝可重复对叶或复合逻辑盘区的引用,这很适用于较大地址范围的卷地址范围拷贝。进一步地,这允许图变成引用的有向非循环图而不仅仅是引用树。与重复的逻辑盘区引用相关联的写时拷贝技术可用于确保对虚拟地址范围拷贝的源或目标的修改操作将导致用于存储那些修改的新逻辑盘区的创建,而不影响紧接在卷地址范围拷贝操作之后共享同一逻辑盘区的目标或源。
还可以基于复制逻辑盘区的有向非循环图来实现针对豆荚的输入/输出操作。例如,豆荚内的每个存储系统能实现逻辑盘区的私有图,使得在用于豆荚的一个存储系统上的图与在用于豆荚的任何第二存储系统上的图没有特定关系。然而,在豆荚中的存储系统之间使图同步时有价值。这可用于重新同步并且可用于协调诸如到远程存储系统的异步或基于快照的复制这样的特征。进一步地,它可用于减少用于处理快照和拷贝相关处理的分发的一些开销。在这样的模型中,跨越用于豆荚的所有同步存储系统使豆荚的内容保持同步与跨越用于豆荚的所有同步存储系统使叶和复合逻辑盘区的图保持对所有卷来说同步基本上相同,并且确保所有逻辑盘区的内容同步。为了同步,使叶和复合逻辑盘区匹配应该具有相同的标识或者应该具有可映射的标识。映射能涉及某一组中间映射表或者能涉及某种其他类型的标识转换。在一些情况下,也能使由叶逻辑盘区所映射的块的标识保持同步。
在基于领导者和跟随者的豆荚实施方式中,其中每个豆荚有单个领导者,领导者可负责确定逻辑盘区图的任何变化。如果要创建新叶或复合逻辑盘区,则可给予它标识。如果要拷贝现有叶或复合逻辑盘区以形成具有修改的新逻辑盘区,则可将新逻辑盘区描述为具有某一组修改的前一个逻辑盘区的副本。如果要分割现有逻辑盘区,则可连同新产生的标识一起描述分割。如果逻辑盘区将从某个附加复合逻辑盘区作为底层逻辑盘区被引用,则可将该引用描述为复合逻辑盘区的变化以引用该底层逻辑盘区。
豆荚中的修改操作因此包括将修改的描述分发到逻辑盘区图(其中新逻辑盘区被创建来扩展内容或者其中逻辑盘区被拷贝、修改和替换以处理与快照、卷拷贝和卷地址范围拷贝有关的写时拷贝状态)并且分发对叶逻辑盘区的内容的修改的描述和内容。如上所述,来自以有向非循环图的形式使用元数据的附加好处是修改物理存储装置中的存储数据的I/O操作可以通过对与物理存储装置中的存储元数据相对应的元数据的修改来在用户级别实现—而不用修改物理存储装置中的存储数据。在所公开的存储系统的实施例中,其中物理存储装置可以是固态驱动器,由于I/O操作是通过对表示以I/O操作作为目标的数据的元数据的修改而不是通过对闪速存储器的读取、擦除或写入来实现的,可以避免或者减少伴随对闪速存储器的修改的磨损。进一步地,如上面所指出的,在这样的虚拟化存储系统中,上述的元数据可以用于处理虚拟或逻辑地址与物理或真实地址之间的关系—换句话说,存储数据的元数据表示使得能实现可以被认为是闪存友好的虚拟化存储系统,因为它使闪速存储器上的磨损减少或者最小化。
领导者存储系统可以执行其自己的本地操作以在豆荚数据集的其本地副本和本地存储系统的元数据的上下文中实现这些描述。进一步地,同步跟随者执行其自己的单独的本地操作以在豆荚数据集的其单独的本地副本及其单独的本地存储系统的元数据的上下文中实现这些描述。当领导者和跟随者操作都完成时,结果是具有兼容叶逻辑盘区内容的逻辑盘区的兼容图。逻辑盘区的这些图然后变成如先前示例中所描述的一种“公共元数据”。可将此公共元数据描述为修改操作与所需公共元数据之间的依赖性。可将对图的变换描述为一组或更多谓词内的单独的操作,所述谓词可以描述与一个或多个其他操作的关系,诸如依赖性。换句话说,可将操作之间的相互依赖性描述为一个操作以某种方式依赖于的一组前体,其中前体的集合可以被认为是对要完成的操作来说必须为真的谓词。可以在通过引用整体地包括在本文中的申请参考文献No.15/696,418内找到对谓词的更充分描述。另一方面,依靠仍然尚未知道跨越豆荚完成的特定相同的图变换的每个修改操作可包括它依靠的任何图变换的部分。处理标识已经存在的“新”叶或复合逻辑盘区的操作描述可避免创建新逻辑盘区,因为该部分已经在某个早期操作的处理中被处理,并且可替代地仅实现操作处理的改变叶或复合逻辑盘区的内容的部分。领导者的角色是确保变换彼此兼容。例如,我们可从对豆荚来说进入的两个写入进来开始。第一写入用被形成为复合逻辑盘区B的副本替换复合逻辑盘区A,用作为叶逻辑盘区D且具有用于存储第二写入的内容的修改的副本替换叶逻辑盘区C,并且进一步将叶逻辑盘区D写入到复合逻辑盘区B中。同时,第二写入暗示复合逻辑盘区A与复合逻辑盘区B的相同拷贝和替换,但是拷贝并用被修改为存储第二写入的内容的逻辑盘区F替换不同的叶逻辑盘区E,并且进一步将逻辑盘区F写入到逻辑盘区B中。在那种情况下,用于第一写入的描述可包括用B替换A和用D替换C并且将D写入到复合逻辑盘区B中以及将第一写入的内容的写入到叶盘区B中;并且,第二写入的描述可包括用B替换A和用F替换E并且将F写入到复合逻辑盘区B中以及将被写入叶盘区F的第二写入的内容。领导者或任何跟随者然后可以任何次序单独地处理第一写入或第二写入,并且最终结果是B拷贝并替换A、D拷贝并替换C、F拷贝替换E以及D和F被写入到复合逻辑盘区B中。可通过识别B已经存在来避免A的第二拷贝以形成B。以这种方式,领导者可确保豆荚跨越用于豆荚的同步存储系统为逻辑盘区图维护兼容公共元数据。
给定使用逻辑盘区的有向非循环图的存储系统的实施方式,可以实现基于逻辑盘区的复制的有向非循环图恢复豆荚。具体地,在此示例中,豆荚中的恢复可以基于复制的盘区图,然后涉及恢复这些图的一致性以及恢复叶逻辑盘区的内容。在恢复的这种实施方式中,操作可以包括查询不知道已在用于豆荚的所有同步存储系统上完成的图变换以及不知道已跨越用于豆荚的所有存储系统完成的所有叶逻辑盘区内容修改。这样的查询能基于自某个协调的检查点以来的操作,或者可能简单地是不知道已完成的操作,其中每个存储系统在正常操作期间保持仍然尚未被发信号通知已完成的操作的列表。在此示例中,图变换是直截了当的:图变换可以创建新事物,将旧事物拷贝到新事物,并且将旧事物拷贝到两个或更多个分割的新事物中,或者它们修改复合盘区以修改其对其他盘区的引用。在创建或者替换任何逻辑盘区的任何同步存储系统上找到的任何存储的操作描述可在仍然尚未具有该逻辑盘区的任何其他存储系统上被拷贝和执行。描述对叶或复合逻辑盘区的修改的操作可将那些修改应用于仍然尚未应用它们的任何同步存储系统,只要所涉及的叶或复合逻辑盘区已被适当地恢复即可。
在另一示例中,作为使用逻辑盘区图的替代方案,可以基于复制的内容可寻址暂存器实现存储装置。在内容可寻址暂存器中,对于数据的每个块(例如,每512个字节、4096个字节、8192个字节或甚至16384个字节),基于块内容计算唯一散列值(有时也称作指纹),使得可将卷的卷或盘区范围描述为对具有特定散列值的块的引用的列表。在基于对具有相同散列值的块的引用的同步地复制的存储系统实施方式中,复制能涉及第一存储系统接收块、计算那些块的指纹、标识用于那些指纹的块引用以及将变化作为对卷块到到引用块的映射的更新递送到一个或多个附加存储系统。如果块被发现已经被第一存储系统存储,则该存储系统可使用其引用来命名附加存储系统中的每一个中的引用(因为引用使用相同的散列值或者因为用于引用的标识符是相同的或者可被容易地映射)。另一方面,如果第一存储系统未找到块,则可以将第一存储系统的内容作为操作描述的一部分连同与该块内容相关联的散列值或标识一起递送到其他存储系统。进一步地,然后用新块引用更新每个同步存储系统的卷描述。这样的暂存器中的恢复然后可以包括比较卷的最近更新的块引用。如果块引用在用于豆荚的不同的同步存储系统之间不同,则可将每个引用的一个版本拷贝到其他存储系统以使它们保持一致。如果一个系统上的块引用不存在,则从针对该引用存储块的某个存储系统中拷贝它。通过拷贝引用作为实现虚拟拷贝操作的一部分,可在这样的块或散列引用暂存器中支持虚拟拷贝操作。
为了进一步说明,图42A阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中使元数据同步的示例方法的流程图。尽管被不太详细地描绘,然而图42A中描绘的存储系统(4200A)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合描述的存储系统。事实上,图42A中描绘的存储系统(4200A)可以包括与上述的存储系统相同、更少、附加的组件。
如上所述,可以在正在同步地复制数据集的存储系统当中使元数据同步。这样的元数据可以被称为公共元数据或共享元数据,其由存储系统代表与存储在豆荚内的内容的分段到豆荚内的存储对象内的虚拟地址的映射有关的豆荚来存储,其中与那些映射有关的信息在用于豆荚的成员存储系统之间被同步以针对与豆荚有关的存储操作确保正确的行为—或更好的性能—。在一些示例中,存储对象可以实现卷或快照。经同步的元数据可以包括:(a)用于使卷内容映射在豆荚中的存储系统之间保持同步的信息;(b)用于恢复检查点或者用于在进行中的写入操作的跟踪数据;(c)与将数据和映射信息递送到远程存储系统以进行异步或周期性复制有关的信息。
用于使卷内容映射在豆荚中的存储系统之间保持同步的信息可以使得能实现快照的高效创建,这进而使得可以跨越豆荚成员存储系统高效地且一致地执行后续更新、快照的拷贝或快照移除。
用于恢复检查点或者用于在进行中的写入操作的跟踪数据可以使得能实现已被部分地或完全地应用在用于豆荚的单独的存储系统上、但是可能尚未被完全地应用在用于豆荚的其他存储系统上的内容或卷映射的崩溃恢复和高效检测。
与将数据和映射信息递送到远程存储系统以进行异步或周期性复制有关的信息可以使得用于豆荚的多于一个成员存储系统能够以对于应付用于驱动异步或周期性复制的映射和差异化元数据中的失配的最小关注用作用于复制的豆荚内容的源。
在一些示例中,共享元数据可以包括针对作为用于豆荚的整个同步地复制的数据集的子集的一个或多个卷或一个或多个存储对象的命名分组或标识符的描述或指示—其中数据集的这样的卷或存储对象可以被称为一致性组。可以将一致性组定义为指定要用于一致快照、异步复制或周期性复制的数据集的卷或存储对象的子集。在一些示例中,可以动态地计算一致性组,诸如通过包括连接到一组特定的主机或主机网络端口或者连接到一组特定的应用或虚拟机或容器的所有卷的所有卷,其中应用、虚拟机或容器可以在外部服务器系统上操作或者可以在作为豆荚的成员的存储系统中的一个或多个上操作。在其他示例中,可以根据用户对数据或数据集的类型的选择或类似于动态计算的一致性组的规范来定义一致性组,其中用户可以例如通过命令或管理控制台来指定特定或命名的一致性组被创建以包括连接到一组特定的主机或主机网络端口的所有卷,或者被创建以包括一组特定的应用或虚拟机或容器的数据。
在使用一致性组的示例中,一致性组的第一一致性组快照可以包括在第一数据集快照时作为一致性组的成员的所有卷或其他存储对象的第一组快照,同时同一一致性组的第二个一致性组快照包括在第二组数据集快照时作为一致性组的成员的卷或其他存储对象的第二组快照。在其他示例中,可以以异步方式在一个或多个目标存储系统上存储数据集的快照。类似地,一致性组的异步复制可以说明一致性组的成员卷和其他存储对象的动态变化,其中一致性组在异步复制链接的源或目标处的一致性组快照包括在与数据集快照有关时作为与一致性组有关系的成员的卷和其他存储对象。在异步复制连接的目标的情况下,与数据集快照有关的时间取决于发送方在它被接收并且在目标上的一致性组快照时在进行中时的动态数据集。例如,如果异步复制的目标是例如2000个操作在后,其中那些操作中的一些是一致性组成员变化,其中第一组这样的变化超过以前针对源的2000个操作,并且第二组变化在最后2000个内,则那时在目标上的一致性组快照将说明第一组成员变化而将不说明第二组变化。异步复制的目标的其他用途可以类似地在针对那些用途确定卷或其他存储对象(及其内容)时说明针对一致性组的数据集的时间的性质。例如,在异步复制是2000个操作在后的情况下,将目标用于灾难恢复失效备援可能从包括这些卷和其他存储对象(及其内容)的数据集开始,因为它们是在源处以前2000个操作。在此讨论中,源处的并发操作(例如,写入、存储对象创建或删除、对影响从一致性组包括或者排除卷或其他存储对象的属性的改变,或在某个时间点在进行中并且未发信号通知为完成的其他操作)可能不具有单一明确定义的排序,所以操作的计数仅需要基于源上的并发操作的任何允许的排序来表示某个合理的排序。
作为使用一致性组的另一示例,在基于一致性组快照的复制的周期性复制的情况下,每个复制的一致性组快照将包括在源上形成每个一致性组快照时的卷和其他存储对象。通过使用公共或共享元数据来确保一致性组中的成员资格保持一致,确保故障—或可以使复制的源或形成数据集快照的系统从豆荚中的一个存储系统切换到另一存储系统的其它变化—不丢失用于适当地处理那些一致性组快照或一致性组复制所需的信息。进一步地,这种类型的处理可以允许作为豆荚的成员的多个存储系统同时用作用于异步或周期性复制的源系统。
进一步地,描述分段到存储对象的映射的同步的元数据不限于映射本身,并且可以包括附加信息,诸如序列号(或用于标识存储数据的某个其他值)、时间戳、卷/快照关系、检查点标识、定义层次的树或图或映射关系的有向图以及其他存储系统信息。
如图42A中描绘的,正在同步地复制数据集(4258)的多个存储系统(4200A-4200N)可以与用于豆荚的同步列表中的每个其他存储系统(4200B-4200N)通信—其中存储系统可以交换描述要执行的I/O操作的元数据以及描述要对存储在单独的存储系统上的数据集(4258)的相应的本地元数据表示进行的更新的元数据。进一步地,每个存储系统(4200A,4200B...42001ST)可以存储存储对象(4256,4260...422)的相应版本。
图42A中描绘的示例方法包括在存储系统(4200A-4200N)中的第一存储系统(4200A)处接收(4202)针对数据集(4258)的I/O操作(4252)。在存储系统(4200A-4200N)中的第一存储系统(4200A)处接收(4202)针对数据集(4258)的I/O操作(4252)可以通过使用用于跨越网络传输分组或数据的一种或多种通信协议来实现,所述网络诸如存储区域网(158)、互联网、或主机计算机(4251)可以跨越来与存储系统(4200A)进行通信的任何计算机网络。在此示例中,存储系统(4200A)可以接收在网络端口(诸如SCSI端口)处接收到的I/O操作(4252),其中I/O操作(4252)是针对作为正在跨越豆荚中的存储系统(4200A-4200N)同步地复制的数据集(4258)的一部分的存储器位置的写入命令。
图42A中描绘的示例方法还包括按照I/O操作(4252)确定(4204)描述内容的分段到存储对象(4256)内的虚拟地址的映射的元数据更新(4254),其中存储对象(4256)包括数据集(4258)。可以通过确定或者标识如上面关于要跨越豆荚的存储系统(4200A-4200N)同步的元数据的内容来实现按照I/O操作(4252)确定(4204)描述内容的分段到存储对象(4256)内的虚拟地址的映射的元数据更新(4254),其中存储对象(4256)包括数据集(4258),其中来自I/O操作(4252)的信息也可以被包括在元数据更新(4254)中,诸如逻辑或虚拟地址、净荷大小和其他信息,诸如描述I/O操作(4252)净荷将关于数据集(4258)内的先前存储的数据被包括或者并入的方式的重复删除信息。
图42A中描绘的示例方法还包括通过将元数据更新(4254)发送到第二存储系统(4200B)以依照元数据更新(4254)更新第二存储系统上的元数据表示来使存储系统(4200A-4200N)中的第二存储系统(4200B)上的元数据同步(4206)。可以通过使用一个或多个网络端口并且跨越一个或多个通信网络(未示出)将元数据更新(4254)发送到豆荚中的每个其他存储系统(4200B-4200N)来实现通过将元数据更新(4254)发送到第二存储系统(4200B)以依照元数据更新(4254)更新第二存储系统上的元数据表示来使存储系统(4200A-4200N)中的第二存储系统(4200B)上的元数据同步(4206)元数据更新(4254)—其中每个其他存储系统(4200B-4200N)可以接收元数据更新(4254)以更新经同步的数据集(4258)的相应的本地元数据表示。在每个存储系统(4200B-4200N)接收并处理元数据更新(4254)之后,将使与所有系统上的经同步的数据集(4258)相对应的元数据同步。
为了进一步说明,图42B阐述了图示根据本公开的一些实施例的在同步地复制数据集的存储系统当中使元数据同步的示例方法的流程图。图42B中描绘的示例方法类似于图42A中描绘的示例方法,因为图42B中描绘的示例方法还包括:在存储系统(4200A-4200N)中的第一存储系统(4200A)处接收(4202)针对数据集(4258)的I/O操作(4252);按照I/O操作(4252)确定(4204)描述内容的分段到存储对象(4256)内的虚拟地址的映射的元数据更新(4254),其中存储对象(4256)包括数据集(4258);以及通过将元数据更新(4254)发送到第二存储系统(4200B)以依照元数据更新(4254)更新第二存储系统上的元数据表示来使存储系统(4200A-4200N)中的第二存储系统(4200B)上的元数据同步(4206)。
然而,图42B中描绘的示例方法还包括:将I/O操作(4252)应用(4288)于第一存储系统(4200A)上的数据集(4258);响应于在第一存储系统(4200A)上成功地应用I/O操作(4252),在第一存储系统(4200A)上并且依照元数据更新(4254)更新(4290)与数据集(4258)相对应的元数据在应用I/O操作(4252)之前的版本;以及确定(4292)描述I/O操作(4252)相对于一个或多个其他I/O操作的排序的谓词元数据。
可以通过如上面参考图1所描述的存储系统(4200A)的控制器以及控制器使用存储系统(4200A)的存储器组件中的一个或多个(诸如使用NVRAM和持久存储器,诸如闪速存储器或任何类型的固态非易失性存储器)来执行写入操作的描述来实现将I/O操作(4252)应用(4288)于第一存储系统(4200A)上的数据集(4258)。
可以通过标识用于存储数据集(4258)的对应存储对象(4258)或源卷的元数据表示的一部分来实现在第一存储系统(4200A)上并且依照元数据更新(4254)更新(4290)与数据集(4258)相对应的元数据在应用I/O操作(4252)之前的版本,其中所述部分在一些情况下可以是整个源卷。进一步地可以通过使用用于I/O操作(4252)的存储器地址数据来遍历上述的元数据对象的结构化合集以找到对应于用于I/O操作(4252)的存储器地址数据的数据对象的节点而标识用于存储对象(4256)的元数据表示的部分。进一步地,可以创建用于元数据表示的元数据对象根节点,其引用用于整个存储对象(4256)的元数据表示内的一个或多个节点,其中元数据对象根节点可以指定用于整个存储对象(4256)的元数据表示内的一个或多个节点的各部分,或者可以指定用于仅引用用于对应于I/O操作(4252)的整个存储对象(4256)的元数据表示的部分的其他指示。以这种方式,数据集的元数据表示反映I/O操作(4252)的成功应用。
可以通过跟踪每个接收到的I/O操作并且确定在I/O操作之间是否存在任何依赖性来实现确定(4292)描述I/O操作(4252)相对于一个或多个其他I/O操作的排序的谓词元数据,其中在这样的I/O操作已被标识之后,应该解决任何排序一致性问题,就像它们应该在正常运行期间使用诸如领导者定义的排序或谓词这样的技术或者通过互锁异常一样。在被整体地并入本文的申请参考文献No.15/696,418内描述了互锁异常。关于谓词,可以将操作与公共元数据更新之间的关系的描述描述为单独的修改操作之间的一组相互依赖性—其中可以将这些相互依赖性描述为一个操作以某种方式取决于的前体的集合,其中前体的集合可以被认为是对要完成的操作来说必须为真的谓词。进一步地,谓词它它们用于传播对领导者与跟随者之间的并发性的限制的情况下可能不需要被保存,如果那些谓词驱动存储系统存留信息的次序的话,因为所存留的信息暗示各种似是而非的结果。
为了进一步说明,图43阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。尽管被不太详细地描绘,然而图43中描绘的存储系统(4300A-4300N)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图43中描绘的存储系统(4300A-4300N)可以包括与上述的存储系统相同、更少或附加的组件。
在以下示例中,确定从同步地复制数据集的存储系统当中的错误中恢复的方式可以包括确定是否从事调解服务或者是否从事群体协议。如下所述,确定存储系统集群或豆荚中的活动成员资格可以通过确定继续为针对数据集的I/O操作服务的存储系统的子集来克服诸如通信故障或存储设备故障这样的错误,其中存储系统的另一子集不会继续为针对数据集的I/O操作服务。以这种方式,通过调解或群体策略,一个或多个存储系统被确定为随着存储系统被从存储系统的同步列表中添加或者移除而控制修改同步地复制的数据集的I/O操作的记录。
响应于错误(诸如存储系统之间的通信故障)而从事参与调解服务的过程—其中存储系统可以被配置为存储指示为广域网上的联系地址和可用于管理密钥池以便调解的加密安全令牌的句柄—在被整体地并入本文的申请参考文献No.15/703,559中进行了更详细的描述。另外在申请参考文献No.15/703,559中讨论的是使用各种群体协议来确定复制数据集的一组存储系统当中的哪些存储系统将继续为针对数据集的I/O请求服务。
然而,虽然申请参考文献No.15/703,559描述了用于调解和群体协议的实施方式,但是本公开的焦点是用于确定要执行哪一种技术以用于确定存储系统集群中的活动成员资格的分析。例如,在一些场景中,一个或多个存储系统可以优于一个或多个存储系统而参与并赢得调解—其中如果其他一个或多个存储系统已赢得调解,则用于为I/O操作服务的存储系统性能根据一个或多个数据存储度量或性能准则会更好。换句话说,赢得调解的一个或多个系统赢得调解不总是有利的。在下面讨论的技术是用于避免不应该赢得调解的一个或多个存储系统赢得调解的场景,包括相对于指派给其度量更差的存储系统的投票量为正在高度地执行或者被更紧密地连接到特定主机系统或者具有比较更好的度量的存储系统指派更大量的投票。
在一些示例中,为了确定存储系统集群中的活动成员资格,可以通过使用群体协议来实现用于解决要继续为针对数据集的I/O请求服务的一个或多个存储系统的集合的默认技术—除非存储系统(4300A)能够确定或者证明群体协议的使用将无法建立用于确定要继续为I/O请求服务的一个或多个存储系统的集合的群体。换句话说,响应于诸如存储系统(4300A)内的存储设备之间的通信故障这样的错误,存储系统(4300A)的控制器可以确定是否可建立群体—其中如果能够在特定群体协议下建立群体,然后群体协议被用于确定存储系统集群中的活动或同步成员资格;否则,如果不能够在特定群体协议下建立群体,则存储系统(4300A)可以参与调解以便确定存储系统集群中的活动或同步成员资格。在简单情况下,如果存在作为同步列表的成员的两个存储系统,则不响应于通信故障而执行群体分析,因为其他单个存储系统将无法形成群体。在一些示例中,除非给定存储系统或彼此通信的存储系统集能够基于针对每组存储系统的投票的比较来消除另一组存储系统可以形成群体的可能性,则存储系统或彼此通信的存储系统集可能依靠群体策略来分离非通信地耦合的一个或多个存储系统。换句话说,如果彼此通信的一个或多个存储系统能够形成群体,则可以在无需诉诸调解的情况下使用群体策略策来分离不在通信中的一个或多个存储系统。
在一些示例中,用于存储系统(4300A)的控制器可以通过确定彼此通信的一组存储系统来确定是否可以建立群体—这也用来基于存储系统(4300A)引用被包括中正在同步地复制数据集的存储系统(4300A-4300N)的完整集合中的存储系统(4300B-4300N)的同步列表来确定不与之通信的存储系统的集合。进一步地,存储系统(4300A)可以引用存储的所有存储系统的集合或最后已知的同步存储系统(4300A-4300N)的集合当中的每个存储系统关于给定群体协议具有的投票的数量的指示。以这种方式,给定彼此通信的第一组确定的存储系统以及与第一组存储系统中的每一个相对应的相应的投票,并且给定不与执行分析的存储系统(4300A)通信的第二组确定的存储系统以及与第二组存储系统中的每一个相对应的相应的投票,存储系统(4300A)可以确定第一组存储系统中的存储系统是否具有足够的投票来建立群体并且第二组存储系统中的存储系统是否可能具有足够的投票来建立群体。
换句话说,检测到通信故障并对通信故障做出响应的存储系统(4300A)可以确定(1)不在通信中的存储系统是否也许可以形成群体、(2)保持在通信中的存储系统是否也许可以形成群体,和/或(3)不在通信中的任何存储系统是否也许可以确定在通信中的存储系统可以形成群体—至少取决于哪组存储系统保持在通信中、哪组存储系统不在通信中以及对应于每组存储系统内的每个存储系统的相应的投票。
进一步地,通过存储系统(4300A)确保另一存储系统或另一组存储系统将无法形成群体,存储系统(4300A)确保如果它连同与存储系统(4300A)通信的一个或多个其他存储系统一起赢得调解,则无其他存储系统或其他组存储系统将能够创建同步地复制的数据集的版本,使得如果存储系统中的一个或多个变得与赢得了调解的存储系统重新同步,则在数据集中会存在任何不一致。
作为一个示例,可能存在与在某个系统故障之前作为豆荚的成员属于同步列表的存储系统相关联的偶数个投票。在此示例中,如果同步豆荚成员的第一组存储系统彼此通信,并且第一组存储系统对应于用于建立群体的投票的正好一半,则没有可能与彼此—但是不与第一组存储系统-通信的其他组存储系统能组成建立群体所需的投票的一半以上。在此示例中,包括在第一组存储系统中的存储系统可以确定第一组存储系统或任何其他组存储系统都也许不可以形成群体,并且作为响应,存储系统可以发起调解。
作为另一示例,可以响应于多个相应的故障事件而重复地确定针对是否可以通过在通信中或不在通信中的通信系统来建立群体的确定—其中可以响应于每个故障事件而执行不同的响应,诸如通过参与调解或群体投票来响应。例如,在诸如通信故障这样的故障之前,一组存储系统可以是豆荚的同步成员。在此示例中,具有用于建立群体的一个投票的特定存储系统可能丢失与豆荚的其他成员的通信,并且作为响应,豆荚的其他成员通过具有建立群体的足够投票来通过投票移除特定存储系统。在完成此群体投票阶段以移除特定存储系统之后,豆荚的同步成员是排除特定存储系统的豆荚的同步成员—产生总计用于建立群体的四个投票的存储系统的同步成员列表。为了继续此示例,如上面所讨论的,如果故障导致存储系统属于具有总共两个投票的一组存储系统,则存储系统可以确定群体不是可能的,并且可以发起调解。
在一些示例中,可以为作为豆荚的同步成员的存储系统指派不同的相应数量的投票,包括零个投票。例如,对于作为豆荚的同步成员的一组存储系统,不同的投票分发包括:(a)具有单个投票的所有存储系统,(b)具有多个投票的一些存储系统和具有单个投票的一些存储系统,(c)具有多个投票的一些存储系统、具有多个投票的一些存储系统以及具有零个投票的一些存储系统,或者(d)具有不同数量的投票的每个存储系统。换句话说,通常,可以为作为豆荚的同步成员的任何给定存储系统指派任意数量的投票,包括零个投票。可能在将数据集从作为豆荚的成员的源存储系统迁移到仍然不在豆荚中的目标存储系统期间发生具有零个投票的存储系统的一个示例—其中在迁移完成之前,源存储系统控制其一个或多个投票,并且目标存储系统不控制任何投票,并且其中在迁移完成之后,可以授予目标存储系统对一个或多个投票的控制,并且可以将源存储装置更新为不控制或者具有任何投票。
在一些示例中,可以随着附加存储系统被添加到豆荚或者与豆荚分离而在一组存储系统当中建立同步列表,其中每个存储系统可以维护指示豆荚的成员的元数据,其中同步列表可以进一步指示豆荚的每个成员的状态。随着存储系统被添加到豆荚,要添加的存储系统可以由豆荚中的现有存储系统提供用于联系调解服务的调解句柄。进一步地,当对容器进行改变时,同步列表被更新以反映当前豆荚内的存储系统的当前成员资格。在通过引用整体地并入本文的申请参考文献No.62/470,172和No.62/518,071中找到关于豆荚定义和管理的附加描述。进一步地,随着豆荚被伸展或者扩展,以包括多于单个存储系统时,豆荚中的存储系统可以被配置为请求来自特定调解服务的调解—以这种方式,豆荚内的每个存储系统在调解被确定为是对给定错误的响应的情况下请求来自同一调解服务的调解。在本文中进一步描述用于访问调解服务的存储系统的配置。
如图43中描绘的,正在同步地复制数据集(4352)的多个存储系统(4300A-4300N)可以通过一个或多个网络(未描绘)与每个其他存储系统并且与调解服务(4301)通信—其中调解服务(4301)可以解决哪一个存储系统在存储系统之间的通信故障的情况下、在存储系统脱机的情况下或者由于某个其他触发事件而继续为数据集服务。通常,任何数量的存储系统可以是正在同步地复制数据集(4352)的同步列表的一部分。
图43中描绘的示例方法包括由存储系统(4300A-4300N)中的特定存储系统(4300A)检测(4302)涉及与存储系统(4300B-4300N)中的一个或多个的通信丢失的通信故障,其中特定存储系统(4300A)被配置为请求来自调解目标(诸如调解服务(4301))的调解。可以使用若干技术来实现检测(4302)通信故障,包括特定存储系统(4300A)的控制器未在某个时间段内通过通信链路(4354)或信道从另一存储系统接收到通信(4300B-4300N)。在另一示例中,检测(4302)通信故障可以由特定存储系统(4300A)的控制器按照用于确定通信信道未在正确地操作的时钟交换协议来实现,其中在本文包含的其他部分处更详细地描述时钟交换。还可以实现用于检测(4302)通信故障的其他标准技术。
图43的示例方法还包括确定(4304)一个或多个存储系统(4300B-4300N)中的至少一个被配置为响应于通信故障而请求来自调解目标(诸如调解服务(4301))的调解。可以通过存储系统(4300A)经历上述的分析来实现确定(4304)一个或多个存储系统(4300B-4300N)中的至少一个被配置为响应于通信故障而请求来自调解服务(4301)的调解—其中基于对应于与存储系统(4300A)通信的一个或多个系统的投票和对应于与存储系统(4300A)不通信的一个或多个存储系统的投票的比较,存储系统(4300A)能够确定与存储系统(4300A)不通信的一个或多个存储系统是否能够形成群体,以及与存储系统(4300A)不通信的那一个或多个存储系统是否也许可能与调解目标一起参与调解。
图43的示例方法还包括,响应于确定(4304)存储系统(4300B-4300N)中的一个或多个被配置为请求来自调解目标的调解,确定(4306)是否请求来自调解目标的调解。可以基于已丢失与之通信的一个或多个存储系统中的至少一个可能正在请求来自调解目标的调解的分析和确定(4304)来实现确定(4306)是否请求来自调解目标的调解—其中如果存储系统(4300A)确定一个或多个存储系统中的至少一个可能正在请求来自调解目标的调解,则存储系统(4300A)还可以请求来自调解目标的调解。否则,存储系统(4300A)和与存储系统(4300A)通信的任何存储系统可以参与群体策略以分离一个或多个存储系统中的至少一个或存储系统(4300A),并且与存储系统(4300A)通信的任何存储系统可以确定另一组存储系统可能具有群体并且将停止按其同步地复制的数据集的副本而操作(那些存储系统将有效地脱机直到可与可帮助它确定存储系统的同步和不同步列表的状态的更多的存储系统建立通信为止)。
为了进一步说明,图44阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。图44中描绘的示例方法类似于图4中描绘的示例方法,因为图44中描绘的示例方法还包括:由存储系统(4300A-4300N)中的特定存储系统(4300A)检测(4302)与存储系统(4300B-4300N)中的一个或多个的通信故障,其中特定存储系统(4300A)被配置为请求来自调解目标的调解;确定(4304)一个或多个存储系统(4300B-4300N)中的至少一个被配置为响应于通信故障而请求来自调解目标(诸如调解服务(4301))的调解;以及响应于确定(4304)存储系统(4300B-4300N)中的一个或多个被配置为请求来自调解目标的调解,确定(4306)是否请求来自调解目标的调解。
然而,图44中描绘的示例方法进一步包括:由一个或多个存储系统的第一集合确定(4402)在一个或多个存储系统的第一集合的存储系统当中存在一致通信,其中,这些存储系统中的每个存储系统对应于群体协议内的零个或多个投票,所述群体协议确定一个或多个存储系统的第一集合是否可以分离一个或多个存储系统的第二集合;由一个或多个存储系统的第一集合确定(4404)与一个或多个存储系统的第二集合当中的存储系统的通信的缺少,其中一个或多个存储系统的第一集合不能形成群体;以及由一个或多个存储系统的第一集合确定(4406)一个或多个存储系统的第二集合也不能形成群体。
可以通过一个或多个存储系统的第一集合中的每个存储系统与一个或多个存储系统的第一集合中的每一其他存储系统交换状态消息来实现由一个或多个存储系统的第一集合确定(4402)在一个或多个存储系统的第一集合中的存储系统当中存在一致通信。在另一示例中,给定存储系统可以确定彼此一致通信的存储系统是同步列表中的除检测到通信故障的一个或多个存储系统之外的所有那些存储系统。
可以通过类似地检测(4302)通信故障来实现由一个或多个存储系统的第一集合确定(4404)与一个或多个存储系统的第二集合当中的存储系统的通信的缺少,如上面参考图43所描述的。
可以像上面参考存储系统的一个集合是否可以确立存储系统的另一集合能够形成群体所描述的那样由一个或多个存储系统的第一集合确定(4406)一个或多个存储系统的第二集合不能形成群体。
为了进一步说明,图45阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。图45中描绘的示例方法类似于图44中描绘的示例方法,因为图45中描绘的示例方法还包括:由存储系统(4300A-4300N)中的特定存储系统(4300A)检测(4302)与存储系统(4300B-4300N)中的一个或多个的通信故障,其中特定存储系统(4300A)被配置为请求来自调解目标的调解;确定(4304)一个或多个存储系统(4300B-4300N)中的至少一个被配置为响应于通信故障而请求来自调解目标(诸如调解服务(4301))的调解;由一个或多个存储系统的第一集合确定(4402)在一个或多个存储系统的第一集合的存储系统当中存在一致通信;由一个或多个存储系统的第一集合确定(4404)与一个或多个存储系统的第二集合当中的存储系统的通信的缺少;由一个或多个存储系统的第一集合确定(4406)一个或多个存储系统的第二集合不能具有足够的成员或投票以形成群体;以及响应于确定(4304)存储系统(4300B-4300N)中的一个或多个被配置为请求来自调解目标的调解,确定(4306)是否请求来自调解目标的调解。
然而,图45中描绘的示例方法进一步指定由一个或多个存储系统的第一集合确定(4404)与一个或多个存储系统的第二集合当中的存储系统的通信的缺少进一步包括按照一个或多个存储系统的第一集合包括用于同步地复制数据集的存储系统的投票的正好一半确定(4502)一个或多个存储系统的第一集合不能一个或多个存储系统的第一集合形成群体。
可以像上面参考存储系统的一个集合是否可以确立存储系统的另一集合能够形成群体所描述的那样来实现按照一个或多个存储系统的第一集合包括用于同步地复制数据集的存储系统的投票的正好一半确定(4502)一个或多个存储系统的第一集合不能形成群体—其中在一个或多个存储系统的第一集合控制总群体投票的正好一半或一半以上的情况下,那么剩余的存储系统将不可能由于投票的缺少而建立群体。
为了进一步说明,图46阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。图46中描绘的示例方法类似于图44中描绘的示例方法,因为图46中描绘的示例方法还包括:由存储系统(4300A-4300N)中的特定存储系统(4300A)检测(4302)与存储系统(4300B-4300N)中的一个或多个的通信故障,其中特定存储系统(4300A)被配置为请求来自调解目标的调解;确定(4304)一个或多个存储系统(4300B-4300N)中的至少一个被配置为响应于通信故障而请求来自调解目标(诸如调解服务(4301))的调解;由一个或多个存储系统的第一集合确定(4402)在一个或多个存储系统的第一集合的存储系统当中存在一致通信;由一个或多个存储系统的第一集合确定(4404)与一个或多个存储系统的第二集合当中的存储系统的通信的缺少;由一个或多个存储系统的第一集合确定(4406)一个或多个存储系统的第二集合将不能形成群体;以及响应于确定(4304)存储系统(4300B-4300N)中的一个或多个被配置为请求来自调解目标的调解,确定(4306)是否请求来自调解目标的调解。
然而,图46中描绘的示例方法进一步指定由一个或多个存储系统的第一集合确定(4406)一个或多个存储系统的第二集合不能形成群体进一步包括按照一个或多个存储系统的第二集合包括用于同步地复制数据集的存储系统的投票的一半确定(4602)一个或多个存储系统的第二集合将不能形成群体。
可以像上面参考存储系统的一个集合是否可以确立存储系统的另一集合能够形成群体所描述的那样实现按照一个或多个存储系统的第二集合包括不超过用于同步地复制数据集的存储系统的投票的一半确定(4602)一个或多个存储系统的第二集合将不能形成群体。
为了进一步说明,图47阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中确定活动成员资格的示例方法的流程图。尽管被不太详细地描绘,然而图47中描绘的存储系统(4300A-4300N)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图47中描绘的存储系统(4300A-4300N)可以包括与上述的存储系统相同、更少、附加的组件。
图47中描绘的示例方法包括由存储系统中的第一存储系统检测(4702)与存储系统中的第二存储系统的通信故障。可以类似于像上面参考图43所描述的那样由存储系统(4300A-4300N)中的特定存储系统(4300A)检测(4302)与存储系统(4300B-4300N)中的一个或多个的通信故障而实现由存储系统中的第一存储系统检测(4702)与存储系统中的第二存储系统的通信故障。
图47中描绘的示例方法还包括生成(4704)指示获胜调解将使得与第一存储系统通信的存储系统能够继续为针对数据集(4352)的I/O请求服务使得与第二存储系统继续为I/O请求服务相比较会更好地满足性能准则的调解分析(4752)。可以通过存储系统(4300A)对照与第一存储系统不通信的一个或多个存储系统的一个或多个对应的性能特性来比较第一存储系统和与第一存储系统通信的一个或多个存储系统的一个或多个性能特性以确定存储系统的哪一个集合将更有效地、高效地或可靠地处理I/O请求而实现生成(4704)调解分析(4752)。例如,存储系统可以跟踪指示关于处理I/O请求的性能的多个度量,其中度量可能受以下各项影响或者基于以下各项:处理器速度、网络等待时间、读取等待时间、写入等待时间以及其他因素。
在其他示例中,调解分析可以反映是否可以与不在通信中的存储系统建立群体的确定,其中调解分析指示存储系统(4300A)将参与调解或群体协议,如上面参考图43所扫描的。
图47中描绘的示例方法还包括按照调解分析请求(4706)来自调解目标(4301)的调解。可以像上面参考请求调解所描述的那样并且像参考申请参考文献No.14/703,559进一步描述的那样实现按照调解分析请求(4706)来自调解目标(4301)的调解。
为了进一步说明,图48阐述了图示根据本公开的一些实施例的用于在同步地复制数据集的存储系统当中使元数据同步的示例方法的流程图。尽管被不太详细地描绘,然而图48中描绘的存储系统(4800A)可以类似于上面参考图1A至图1D、图2A至图2G、图3A和图3B或其任何组合所描述的存储系统。事实上,图48中描绘的存储系统(4800A)可以包括与上述的存储系统相同、更少、附加的组件。
在这些示例中,可以使用存储系统的列表来定义豆荚成员资格,其中可以推测该列表的子集对豆荚来说被同步或者同步。在一些情况下,列表的子集可以包括用于豆荚的存储系统中的每一个,并且列表可以被认为是为所有存储系统所共有的并且通过使用响应于豆荚成员资格中的变化而应用的一种或多种一致性协议来跨越豆荚一致地维护的元数据。‘豆荚’(当在这里并贯穿本申请的剩余部分中使用该术语时)可以作为表示数据集、一组受管理对象和管理操作、用于修改或者读取数据集的一组访问操作、以及多个存储系统的管理实体被具体实现。这样的管理操作可以通过存储系统中的任一个等效地修改或者查询受管理对象,其中用于读取或者修改数据集的访问操作通过存储系统中的任一个等效地操作。每个存储系统可以将数据集的单独的副本作为所述数据集的真子集来存储,所述真子集被存储和通告以供存储系统使用,其中通过任何一个存储系统执行和完成的用于修改受管理对象或数据集的操作被反映在用于查询豆荚的后续管理对象或用于读取数据集的后续访问操作中。可以在通过引用并入本文的先前提交的临时专利申请no.62/518,071中找到有关‘豆荚’的附加细节。
存储系统在它至少在对与豆荚相关联的数据集的最后写入副本来说具有相同的空闲内容的恢复内的情况下可以被认为是对豆荚来说同步。空闲内容是在任何在进行中的修改已完成而不处理新修改之后的内容。在一些情况下,这可以被称为“崩溃可恢复的”一致性。豆荚的恢复可以被认为是在对豆荚中的同步存储系统应用并发更新时使差异和谐的过程。恢复可以解决在完成已向豆荚的各个成员请求但是从未向任何请求者发信号通知为已成功地完成的并发修改时存储系统之间的任何不一致。
给定用于豆荚的存储系统的列表的用途,被列举为豆荚成员但是未被列举为对豆荚来说同步的存储系统可以被认为与豆荚分离。相反地,使用用于豆荚的存储系统的列表,被列举为豆荚成员并且也被列举为对豆荚来说同步并且当前可用于主动地为数据服务的存储系统可以被认为是对豆荚来说联机。进一步地,豆荚的每个存储系统可以具有它自己的成员资格列表的副本,包括它最后知道哪些存储系统同步,以及它最后知道哪些存储系统包括豆荚成员的整个集合。
在此示例中,为了对豆荚来说联机,给定存储系统的成员资格列表指示给定存储系统对豆荚来说同步—并且给定存储系统能够与成员资格列表中的被指示为同步的所有其他存储系统进行通信。如果存储系统不能确立它既同步且与成员资格列表中的指示为同步的所有其他存储系统通信,则存储系统停止处理针对豆荚的新传入I/O命令或请求,直到存储系统能够确立它既同步且与成员资格列表中的指示为同步的所有其他存储系统通信为止。在一些示例中,如果存储系统不能确立它既同步且与成员资源列表中的指示为同步的所有其他存储系统通信,则不是停止新传入I/O命令或请求的处理,而是存储系统在错误或异常情况下完成I/O命令或请求。I/O命令或请求可以是SCSI请求以及使用不同的网络协议的其他类型的请求。作为示例,第一存储系统可以基于一个或多个准则确定成员资格列表内的第二存储系统应该被分离,其中第一存储系统分离第二存储系统的结果是第一存储系统继续接收和处理I/O命令,至少因为第一存储系统当前与在从成员资格列表中移除第二存储系统之后仍然在成员资格列表中的所有存储系统同步。然而,为了避免导致不可调和的数据集、数据集损坏或应用损坏以及其他危险的“裂脑”场景,必须防止第二存储系统分离第一存储系统,使得第二存储系统—除了第一存储系统之外—继续接收和处理针对用于豆荚的数据集的I/O命令。换句话说,如果豆荚中的两个不同的存储系统认为它们已成功地彼此分离,则裂脑场景可以确保。
确定如何在不与成员资格列表中的指示为同步的的另一存储系统进行通信时继续进行的情形可以在存储系统正在正常地操作、然后注意到一个或多个丢失的通信的同时出现,可以在存储系统正在从前一个故障中恢复的同时出现,可以在存储系统出于无论什么原因正在将操作从存储系统控制器的一个集合切换到存储系统控制器的另一集合的同时出现,可以在存储系统的启动期间或者在网络接口被连接或者启用时出现,或者可以在这些或其他种类的事件的任何组合期间或之后出现。换句话说,在与豆荚相关联的存储系统不能与成员资格列表的所有已知的非分离成员进行通信的任何时候,存储系统可以等待例如持续某个预定时间量,直到可以建立通信为止,或者脱机并可能继续等待,或者存储系统可以确定在没有引发裂脑场景的风险的情况下分离非通信存储系统并且然后继续是安全的。进一步地,如果安全分离发生得足够快,则存储系统可以在很少的短延迟情况下并在很少或没有故障请求情况下对于豆荚保持连续地联机,或者一些请求可以导致“忙”或“再次尝试”故障,其可通过较低级请求者侧操作处理来恢复而不会对应用或其他较高级操作产生负面影响。
在一些情形下,豆荚中的给定存储系统可以确定它相对于豆荚中的其他存储系统是过时的或者被不同地配置。例如,给定存储系统可以在首先被添加到同步的豆荚之后确定它是过时的或者被不同地配置,其中给定存储系统可以接收或者查询元数据,所述元数据指示豆荚中的现有存储系统可以被配置有软件、固件、硬件或者与给定存储系统相比更新或不同的软件、固件或硬件的组合。作为另一示例,给定存储系统可以响应于给定存储系统重新连接到另一存储系统而确定它是过时的或者被不同地配置,并且确定其他存储系统已将给定存储系统标记为被分离—在这种情况下,给定存储系统可以等待直到它连接到对豆荚来说同步的存储系统的某个其他集合。
在这些示例中,从豆荚中或从同步成员资格列表中添加或者移除存储系统的方式可以确定是否可以避免瞬时不一致。例如,因为每个存储系统可以具有成员资格列表的相应的副本并且因为豆荚内的两个或更多个独立存储系统可以在不同的时间更新其相应的成员资格列表—或者至少在除确切相同的时间以外的时间更新其相应的成员资格列表—并且因为可能与其他成员资格列表不一致的成员资格列表的本地副本可以是给定存储系统可以获得的所有成员资格信息,所以可以出现瞬时不一致。作为一个示例,如果第一存储系统对豆荚来说同步并且添加了第二存储系统,然后如果第二存储系统被更新以将第一存储系统和第二存储系统两者列举为在其相应的成员资格列表中同步—在第一存储系统将第一存储系统和第二存储系统两者列举为在其相应的成员资格列表中同步之前—然后如果故障发生并且导致第一存储系统和第二存储系统两者的重新重启,则第二存储系统可以在第一存储系统可能不知道它应该或者能等待第二存储系统的同时启动并等待连接到第一存储系统。继续此示例,如果第二存储系统然后通过经历分离第一存储系统的过程来对无法与第一存储系统连接做出响应,则第二存储系统可以成功完成第一存储系统不知道的过程,从而导致裂脑情形。
作为用于防止上述示例中描述的场景的示例技术,豆荚中的存储系统可以遵守单独的存储系统对它们是否可能选择在它们不正在通信的情形下经历分离过程意见不一的策略。用于确保单独的存储系统不同意的示例技术是确保在将新存储系统添加到用于豆荚的同步成员资格列表时,新存储系统首先存储新存储系统是分离成员。此时,在新存储系统在本地存储新存储系统是同步豆荚成员之前现有同步存储系统可以在本地存储新存储系统是同步豆荚成员的指示。结果,如果在新存储系统为它本身存储同步状态之前存在一组重新启动或网络故障或运转中断,则原始存储系统—在添加新存储系统的尝试之前是豆荚的同步成员的存储系统—可能由于非通信而分离新存储系统,但是新存储系统将等待。
继续此示例,成员资格中的这样的变化的相反版本可能是从豆荚中移除通信存储系统所需要的—其中,最初,正被移除或者分离的存储系统在本地存储不同步的指示,并且其中将保持在豆荚中的存储系统随后存储正被移除的系统不再同步的指示。此时,将保持在豆荚中的存储系统和正被移除的存储系统都删除正被从其相应的成员资格列表中移除的存储系统。在此示例中,取决于实施方式,中间存留的分离状态可能不是必要的。
进一步地,在成员资格列表的本地副本中是否要求小心可以取决于用于监视彼此或者用于验证其成员资格的模型存储系统。例如,如果共识模型被用于两者,或者如果外部系统—或外部分布式或集中式系统—用于存储和验证豆荚成员资格,则在本地存储的成员资格列表中的不一致可能变得无关紧要。
用于解决自主成员资格变化的一些示例模型包括群体、外部豆荚成员管理器或竞争已知资源的使用。可以响应于通信故障、豆荚中的一个或多个存储系统发生故障或不能与豆荚中的配对的存储系统进行通信的存储系统启动(或失效备援到辅控制器)而使用这些示例模型。给定可以触发豆荚成员资格中的变化的这些事件,不同的成员资格模型可以使用不同的机制来定义豆荚中的存储系统如何决定以安全的方式分离一个或多个配对的存储系统,并且如何在分离一个或多个存储系统时坚持到底。
在一些示例中,可以存在对成员资格变化达成共识时使用的成员资格列表。例如,对于存储系统的给定组,每个存储系统可以在同步列表上或者在不同步列表上,其中每个存储系统存储同步列表或不同步列表的本地相应的副本。在此示例中,存储系统的组可以是存储系统{A,B},并且最初,豆荚可以包括存储系统A,其中豆荚将被从存储系统A伸展或者扩展到存储系统B。豆荚的这种伸展(其相当于扩展用于豆荚的存储系统的成员资格)可以通过确保存储系统A和B被连接而开始。确保存储系统A和B被连接可以是在伸展操作之前的配置步骤—然而,存储系统A和B之间的仅有连接不会伸展豆荚,而是相反,存储系统A和B之间的连接允许豆荚被伸展。在此示例中,存储系统A可以例如从用于管理卷、豆荚和存储系统的管理控制台接收指示豆荚或豆荚在存储系统A上的特定卷被伸展到存储系统B的命令。给定存储系统A和B之间的连接,初始状态可以被描述为存储系统A存储指示{A}的同步列表和指示{B}的不同步列表,并且时期标识符等于n。并且成员资格序列等于m,其中存储系统B存储用于同步列表和不同步列表两者的空列表。响应于存储系统A接收到伸展命令,存储系统A可以向存储系统B发送指示通过豆荚标识符(时期标识符n)所标识的会话的消息,其中作为响应,存储系统B传送回到存储系统A。进一步地,存储系统A和B之间的配置级心跳可以将用于存储系统A的同步和不同步列表分发到存储系统B,其中作为响应,存储系统B确定它不是同步成员,并且可以发起与存储系统A的重新同步操作,其跨越存储系统A和B使豆荚同步。进一步地,响应于重新同步,存储系统A可以将更新的同步列表{A,B}写入到存储系统B,然后等待存储系统B响应。此时,存储系统A准备好就同步操作开始与存储系统B通信—然而,存储系统B在存储系统B接收到将{A,B}列举为豆荚的同步成员的更新的同步列表列表之前不参与这样的通信。例如,存储系统A可以通过发起与存储系统B的时钟交换操作来开始通信,然而存储系统B可以不开始时钟交换操作直到存储系统B接收到待定同步列表{A,B}为止。在被整体地包括在本文中的申请参考文献No.62/470,172和No.62/518,071中更详细地描述了时钟交换。
继续此示例,为了取消伸展存储系统或者从豆荚中的成员资格中移除存储系统,成员存储系统可以采取以下步骤。例如,如果豆荚成员资格当前是{A,B},其中存储系统A和B都具有相同的{A,B}的同步列表和{}的不同步列表、n的当前时期以及m的当前成员资格序列—则在这种场景中,存储系统A可以接收要取消伸展豆荚以排除存储系统B的请求。响应于取消伸展请求,存储系统A可以向存储系统B发送消息,所述消息指出指示{A,B}的同步列表和{}的不同步列表的提交成员资格列表,并且指出指示{A}的同步列表和{}的不同步列表的待定成员资格列表以及n的当前时期和(m+1)的成员资格序列。存储系统B响应于从存储系统A接收到消息而应用在消息内指示的状态信息,以及对存储系统A做出响应状态变化已被应用。存储系统A响应于接收到来自存储系统B的对状态变化的确认而更新其本地状态信息以指示针对{A}的同步列表和{}的不同步列表的提交成员资格列表、针对{A}的同步列表和{}的不同步列表的待定成员资格列表以及(n+1)的时期,并且存储系统B然后停止与存储系统B进行通信。存储系统B可以检测丢失的会话,但是具有{A}的同步列表,所以它请求从存储系统A重新建立会话,并且接收指示存储系统B不再是豆荚的成员的响应。
在使用群体作为成员资格模型的示例中,用于解决分离操作的一种技术是对于成员资格使用多数—或群体—模型。例如,给定三个存储系统,只要两个正在通信,在通信中的两个就能够同意分离不在通信的第三存储系统;然而,第三存储系统本身不能选择分离在通信中的两个存储系统中的任何一个。在一些情况下,当豆荚内的存储系统通信不一致时可能出现混淆。在此示例中,在存储系统{A,B,C}情况下,存储系统A可能正在与存储系统B进行通信,但是存储系统A可能不在与存储系统C进行通信,然而存储系统B可能正在与两个存储系统A和C进行通信。在这种场景中,存储系统A和B都可以分离存储系统C—或者存储系统B和C都可以分离存储系统A—但是可能需要豆荚成员之间的更多通信来算出成员资格。
继续此示例,群体策略或群体协议可以解决用于添加存储系统或者从豆荚中移除存储系统的这种场景。例如,如果第四存储系统被添加到豆荚,则多数存储系统变成三个存储系统。从三个存储系统(其中多数要求两个)到具有四个存储系统的豆荚(其中多数要求三个)的转变可能要求类似于先前描述的用于小心地将存储系统添加到同步列表的模型的东西。例如,第四存储系统(比如存储系统D)可以在附连状态但仍不是被附连状态下开始,其中它从不会煽动对群体投票。如果存储系统D处于附连状态,存储系统A、B和C可以各自被更新以知道存储系统D,并且被更新以了解对三个存储系统达成要从豆荚分离任何特定存储系统的多数决定的新要求。进一步地,从豆荚中移除给定存储系统可以类似地在更新豆荚中的其他存储系统之前将给定存储系统转变到分离状态。在一些示例中,群体模型的问题可能是公共配置是具有正好两个存储系统的豆荚,并且在这样的情况下,一种解决方案是将存储系统添加到仅参与对豆荚进行群体投票的网络中,但是不以其他方式为豆荚存储数据集。在这种情况下,这样的仅投票成员通常不会煽动一轮群体投票,而是只会参与由豆荚中的像在同步存储系统中一样配置的存储系统所煽动的投票。
在使用外部豆荚成员资格管理器作为成员资格模型的示例中,一种技术包括使用在存储系统本身外部的外部系统来管理成员资格转变以处理豆荚成员资格。例如,为了变成豆荚的成员,预期的存储系统被配置为联系豆荚成员资格系统以向豆荚请求成员资格,并且验证预期的存储系统对豆荚来说同步。在此模型中,对豆荚来说联机或同步的任何存储系统应该保持与豆荚成员资格系统通信,并且在与豆荚成员资格系统的通信丢失的情况下,应该等待或者脱机。在此示例中,可以使用各种集群工具(例如,OracleTM RAC、LinuxHA、VERITASTM Cluster Server、IBM TM HACMP等)来将豆荚成员资格系统实现为高度可用的集群。在其他示例中,可以使用诸如EtcdTM或ZookeeperTM这样的分布式配置工具或诸如亚马逊的DynamoDBTM这样的可靠分布式数据库来实现豆荚成员资格系统。进一步地,在其他示例中,可以使用诸如RAFT或PAXOS这样的分布式共识算法来确定豆荚成员资格,其中基于来自RAFT的构思的实施方式可以包括用于成员资格的基于RAFT的内部算法,或者可以包括用于对数样式更新一致性的RAFT启发的算法,其可以被用作用于确定有效的最新成员资格并且用于确定最新成员资格信息的当前值的整体解决方案的一部分。
在使用竞争已知资源作为成员资格模型或竞争协议的示例中,一种技术可以由集群管理器实现以便豆荚通过要求访问可能被以某种方式锁定以排除其他资源的某个资源或者通过要求访问多数若干这样的资源来解决成员资格变化。例如,一种技术是使用资源保留(诸如SCSI保留或SCSI持久保留)来得到一个或多个联网SCSI设备上的锁。在此示例中,如果一组配置的这些联网设备的多数可被存储系统锁定,则该存储系统可以分离其他存储系统;否则,该存储系统将不能分离其他存储系统。进一步地,为了保持联机或同步,存储系统可能需要频繁地对资源重新断言或者测试锁,或者与正在对资源断言、重新断言或者测试这些锁的某个其他存储系统通信。更进一步地,可以类似地使用可以以各种方式对照来断言和测试的联网计算资源。
继续此示例,为了确保可适当地处理通过豆荚的所有存储系统成员的延长运转中断同时允许一个存储系统作为成员重新开始并且分离其他存储系统成员,如上所述的网络资源必须具有可以用于测试某个其他存储系统先前尚未分离重新开始的存储系统豆荚成员的持久属性。然而,在服务可能仅提供用于资源保留而没有持久地存储状态信息或其他元数据的能力的情况下,那么资源保留服务可以用于获得对一些在外部存储的数据(诸如第三方数据库或者云存储装置)的访问,所述数据然后可以在特定存储系统赢得访问之后被查询和写入—其中写入的数据可以记录分离的存储系统可以查询以确定它已被分离的信息。
在一些示例中,可以使用调解服务来实现竞争协议,所述调解服务是解析一个存储系统是否有权使另一存储系统与豆荚分离的服务。在被整体地并入本文的申请参考文献No.15/703,559中进一步描述调解服务的示例实施方式,
在另一示例中,可以使用机制的组合,这在跨越多于两个存储系统伸展豆荚时可以是有用的。在一个示例中,偏好规则可以与调解组合。在架顶式示例中,数据中心或校园中的较大中央存储系统它本身可能被同步地复制到第二位置中的大存储系统。在那种情况下,架顶式存储系统可以从不单独重新开始,并且可能更喜欢两个位置中的较大中央存储系统中的任一个。两个较大存储系统在那种情况下可能被配置为在彼此之间调解,并且可连接到保持联机的两个较大存储系统中的无论哪一个的任何较小存储系统可以继续为其豆荚服务,并且不能连接到两个大存储系统中的任何一个(或者仅可连接到对豆荚来说脱机的一个存储系统)的任何较小存储系统可以停止为豆荚服务。进一步地,偏好模型还可以与基于群体的模型组合。例如,三个位置中的三个大存储系统可能在彼此之间使用群体模型,同时较小卫星或架顶式存储系统缺少任何投票并且只有当它们可连接到联机的较大同步存储系统中的一个时才工作。
在组合机制的另一示例中,调解可以与群体模型组合。例如,可以存在三个存储系统,所述三个存储系统在彼此之间正常地投票以确保两个存储系统可安全地分离不正在通信的第三存储系统,同时一个存储系统可从不单独地分离两个其他存储系统。然而,在两个存储系统已成功地分离第三个存储系统之后,配置现在下至同意它们同步并且同意第三存储系统被分离的事实的两个存储系统。在那种情况下,两个剩余的存储系统可以同意使用调解(诸如与云服务一起)来处理附加存储系统或网络故障。可以进一步扩展这种调解和群体组合。例如,在四个存储系统之间伸展的豆荚中,任何三个可分离第四个,但是如果两个同步存储系统正在彼此通信而不在与它们当前都认为同步的两个其他存储系统进行通信,则它们能使用调解来安全地分离其他两个。即使在五个存储系统豆荚配置中,如果四个存储系统投票要分离第五个,则剩余的四个可在它们被分成两个相等一半的情况下使用调解,并且一旦豆荚下至两个存储系统,它们就可使用调解来解决连续错误。五到三个然后可在三个之间使用群体从而允许下降到两个,同时如果有另一个故障则两个剩余的存储系统再次使用调解。这种一般的多模式群体和调解机制可处理对称存储系统之间的群体和调解都无法单独地处理的附加数量的情形。这种组合可以增加可以可靠地使用有故障的或偶尔不可达的调解器(或者在云调解器的情况下,客户可能不完全信任它们)的情况的数量。进一步地,这种组合更好地处理三个存储系统豆荚的情况,其中调解单独可能导致第一存储系统在只影响第一存储系统的网络故障时成功地分离第二存储系统和第三存储系统。这种组合还可以更好地处理一次影响一个存储系统的故障的序列,如在三到两个然后到一个示例中所描述的。这些组合工作,因为同步和分离操作产生具体状态—换句话说,系统是有状态的,因为它是从分离转到同步的过程,并且群体/调解器关系的序列中的每个阶段确保在每一点所有联机/同步存储系统对豆荚的当前持久状态意见一致。这与在简单地使多数集群节点再次通信预期足以重新开始操作的一些其他集群模型中不同。然而,可仍然加入偏好模型,其中卫星或架顶式存储系统从不参与调解或群体,并且只有当它们可连接到确实参与调解或群体的联机存储系统时才为豆荚服务。
图48中描绘的示例方法包括确定(4802)成员资格事件对应于同步地复制数据集(4858)的一组存储系统(4800A-4800B)的成员资格的变化。可以使用不同的技术来实现确定(4802)成员资格事件对应于同步地复制数据集(4858)的一组存储系统(4800A-4800B)的成员资格的变化。作为一个示例,存储系统(4800A)可以接收指示豆荚(4854)将被伸展以包括新存储系统(4800N)或者指示豆荚(4854)将被取消伸展以排除现有存储系统(4800N)的I/O命令。作为另一示例,存储系统(4800A)可以与一组存储系统中的特定存储系统(4800N)一起检测和确定通信已丢失或者通信已变得不可靠或效率低超出指定的阈值。
可以通过使用用于跨越网络传输分组或数据的一种或多种通信协议来实现在一组存储系统(4800A-4800N)中的存储系统(4800A)处接收针对豆荚(4854)的I/O命令或者针对数据集(4858)的I/O操作(4852),所述网络诸如存储区域网(158)、互联网、或主机计算机(4851)可以跨越来与存储系统(4800A)进行通信的任何计算机网络。在一些情况下,可以通过使用豆荚(4800A)的存储系统(4800A-4800N)中间的通信互连(173)—或在或存储系统(4800A)内部的某个其他通信信道—来实现接收针对豆荚(4854)的I/O命令或针对数据集(4858)的I/O操作(4852),其中I/O命令或操作是从驻留在存储系统计算资源上或者在存储系统计算资源上执行的应用或过程接收的。进一步地,驻留或远程的应用可以在实现文件系统、数据对象、数据库时使用存储系统(4800A-4800N),所述文件系统、数据对象、数据库可以提供依赖于同步和联机的存储系统(4800A-4800N)的功能性—并且其中这些协议或应用中的任一种可以是在同步地复制的并且对称可访问的底层存储实施方式上操作的分布式实施方式。在此示例中,存储系统(4800A)可以接收在网络端口(诸如SCSI端口)处接收到的I/O命令或I/O操作(4852),其中I/O操作(4852)是针对作为跨越豆荚中的存储系统(4800A-4800N)同步地复制的数据集(4858)的一部分的存储器位置的写入命令。
图48中描绘的示例方法还包括按照成员资格事件应用(4804)一种或多种成员资格协议以确定要同步地复制数据集(4858)的一组新的存储系统。可以如上所述使用群体协议、外部豆荚成员资格管理器协议或竞争协议中的任何一种或多种来按照成员资格事件应用(4804)一种或多种成员资格协议以确定要同步地复制数据集(4858)的一组新的存储系统。
图48中描绘的示例方法还包括,对于针对数据集(4858)的一个或多个I/O操作(4852),将所述一个或多个I/O操作(4852)应用(4806)于由一组新的一个或多个存储系统同步地复制的数据集(4858)。可以像申请参考文献No.62/470,172和No.62/518,071中所描述的那样实现将所述一个或多个I/O操作(4852)应用(4806)于由一组新的存储系统同步地复制的数据集(4858),所述申请参考文献被整体地包括在本文中,并且描述接收和处理I/O操作,使得跨越豆荚的所有同步存储系统成员同步地复制数据集的任何变化。
读者应领会的是,可以通过上述的存储系统的任何组合来执行上述的方法。此外,上述的存储系统中的任一个还可以与通过诸如例如AmazonTM Web服务(‘AWS’)、GoogleTMCloud Platform、MicrosoftTM Azure或其他这样的云服务提供商所提供的存储装置配对。在这样的示例中,特定豆荚的成员因此可以包括上述的存储系统中的一个以及由通过云服务提供商提供的存储装置构成的存储系统的逻辑表示。同样地,特定豆荚的成员可以仅由由通过云服务提供商提供的存储装置构成的存储系统的逻辑表示构成。例如,豆荚的第一成员可以是由第一AWS可用性区域中的存储装置构成的存储系统的逻辑表示,然而豆荚的第二成员可以是由第二AWS可用性区域中的存储装置构成的存储系统的逻辑表示。
为了促进将数据集(或诸如虚拟机这样的其他受管理对象)同步地复制到由通过云服务提供商提供的存储装置构成的存储系统并且执行本申请中描述的所有其他功能的能力,可以在通过云服务提供商提供的处理资源上执行实行各种存储系统功能的软件模块。这样的软件模块可以例如在通过云服务提供商所支持的一个或多个虚拟机(诸如块设备AmazonTM Machine Image(‘AMI’)实例)上执行。可替代地,这样的软件模块可以可替代地在通过云服务提供商提供的裸机环境(诸如能够直接访问硬件的AmazonTM EC2裸机实例)中执行。在这样的实施例中,AmazonTM EC2裸机实例可以与密集闪存驱动器配对以有效地形成存储系统。在任何一个实施方式中,软件模块将理想地与诸如例如通过诸如vSANTM的VMwareTM所提供的虚拟化软件和服务这样的其他传统数据中心服务一起被布置在云资源上。读者应领会的是,许多其他实施方式是可能的并且在本公开的范围内。
读者应领会的是,在豆荚中的数据集或其他受管理对象被保留在驻地存储系统中并且豆荚被伸展以包括其资源通过云服务提供商来提供的存储系统的情况下,可以将数据集或其他受管理对象转移到其资源通过云服务提供商作为加密数据来提供的存储系统。这样的数据可以由驻地存储系统加密,使得被存储在通过云服务提供商提供的资源上的数据被加密,但是而无需云服务提供商具有加密密钥。以这样的方式,存储在云中的数据可以是更安全的,因为云不能访问加密密钥。类似地,当数据被原先写入到驻地存储系统时能使用网络加密,并且能将加密数据转移到云,使得云继续不能够访问加密密钥。
通过使用由通过云服务提供商提供的存储装置构成的存储系统,可以将灾难恢复作为服务来提供。在这样的示例中,数据集、工作负载、其他受管理对象等可以驻留在驻地存储系统上并且可以被同步地复制到其资源通过云服务提供商提供的存储系统。如果驻地存储系统确实发生灾难,则其资源通过云服务提供商提供的存储系统可以接管针对数据集的请求的处理,协助将数据集迁移到另一存储系统等。同样地,其资源通过云服务提供商提供的存储系统可以用作可以在重度利用的时段期间或者否则视需要而定使用的按需辅存储系统。读者应领会的是,可以设计发起本文描述的许多功能的用户接口或类似的机制,使得将灾难恢复作为服务启用可以和执行单个鼠标点击一样简单。
通过使用由通过云服务提供商提供的存储装置构成的存储系统,也可以将高可用性作为服务来提供。在这样的示例中,可以将可以驻留在驻地存储系统上的数据集、工作负载、其他受管理对象同步地复制到其资源通过云服务提供商提供的存储系统。在这样的示例中,由于到诸如AWS Direct Connect这样的云的专用网络连接,可实现从各种位置到AWS的亚毫秒等待时间。应用因此可在无需预付大量支出的情况下在伸展集群模式下运行,并且可在无需购买、维护等多个不同地位于驻地的本地存储系统的情况下实现高可用性。读者应领会的是,可以设计发起本文描述的许多功能的用户接口或类似的机制,使得可以通过执行单个鼠标点击将启用应用缩放到云中。
通过使用由通过云服务提供商提供的存储装置构成的存储系统,也可以将系统恢复作为服务来提供。在这样的示例中,可以将可以驻留在驻地存储系统上的数据集、受管理对象和其他实体的时间点副本同步地复制到其资源通过云服务提供商提供的存储系统。在这样的示例中,如果出现要存储系统恢复到特定时间点的需要,则被包含在其资源通过云服务提供商提供的存储系统上的数据集和其他受管理对象的时间点副本可以用于恢复存储系统。
通过使用由通过云服务提供商提供的资源构成的存储系统,可以在本机将被存储在驻地存储系统上的数据以管输送到云中以供由各种云服务使用。在这样的示例中,随着它被存储在驻地存储系统而具有其本机格式的数据可以被克隆并转换成可用于各种云服务的格式。例如,随着它被存储在驻地存储系统中而具有其本机格式的数据可以被克隆并转换成由AmazonTM Redshift使用的格式,使得可以对照数据来执行数据分析查询。同样地,随着它被存储在驻地存储系统中而具有其本机格式的数据可以被克隆并转换成由AmazonTMDynamoDB、AmazonTM Aurora或某个其他云数据库服务使用的格式。因为这样的转换发生在驻地存储系统外部,所以可以保存和保留驻地存储系统内的资源以供在为I/O操作服务时使用,同时可按需加快自旋的云资源将用于执行数据转换,这在驻地存储系统作为I/O操作的主服务器来操作并且由通过云服务提供商提供的资源构成的存储系统更多作为备用存储系统来操作的实施例中可能是特别有价值的。事实上,因为可以跨越存储系统使受管理对象同步,所以在驻地存储系统最初负责执行提取、变换、加载(‘ETL’)流水线中要求的步骤的实施例中,这样的流水线的组件可以被导出到云并在云环境中运行。通过使用这样的技术,还可以提供分析即服务,包括使用数据集的时间点副本(即快照)作为分析服务的输入。
读者应领会的是,应用可在上述的存储系统中的任一个上运行,并且在一些实施例中,这样的应用可在主控制器、辅控制器上或者甚至同时在两个控制器上运行。这样的应用的示例可包括做后台批处理数据库扫描的应用、正在对运行时数据做统计分析的应用等。
主要在全功能计算机系统的上下文下描述示例实施例。然而,本领域的技术人员将认识到,本公开还可以用设置在计算机可读存储介质上以用于与任何适合的数据处理系统一起使用的计算机程序产品加以具体实现。这样的计算机可读存储介质可以是用于机器可读信息的任何存储介质,包括磁介质、光学介质或其他适合的介质。这样的介质的示例包括硬盘驱动器或磁碟中的磁盘、光驱用的光盘、磁带以及如本领域的技术人员将想到的其他介质。本领域的技术人员将立即认识到,具有适合的编程手段的任何计算机系统将能够执行如用计算机程序产品具体实现的方法的步骤。本领域的技术人员还将认识到,尽管本说明书中描述的示例实施例中的一些面向安装并在计算机硬件上执行的软件,然而,作为固件或者作为硬件实现的替代实施例也在本公开的范围内。
实施例可包括系统、方法和/或计算机程序产品。计算机程序产品可以包括其上有计算机可读程序指令以用于使处理器执行本公开的各方面的计算机可读存储介质(或媒体)。
计算机可读存储介质可以是可保留并存储指令以供由指令执行设备使用的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光学存储设备、电磁存储设备、半导体存储设备或前述的任何适合的组合。计算机可读存储介质的更具体示例的非详尽列表包括下列的:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、静态随机存取存储器(SRAM)、便携式紧致盘只读存储器(CD-ROM)、数字通用盘(DVD)、记忆棒、软盘、诸如上面记录有指令的凹槽中的穿孔卡或凸起结构这样的机械编码设备以及前述的任何适合的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤电缆传递的光脉冲)或通过电线发送的电信号。
本文描述的计算机可读程序指令可经由网络(例如,互联网、局域网、广域区域网络和/或无线网络)被从计算机可读存储介质下载到相应的计算/处理设备或者下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令并且转发计算机可读程序指令以用于存储在相应的计算/处理设备内的计算机可读存储介质中。
用于执行本公开的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微码、固件指令、状态设置数据,或用一种或多种编程语言的任意组合编写的任何一种源代码或目标代码,所述编程语言包括诸如Smalltalk、C++等的面向对象编程语言以及诸如“C”编程语言或类似的编程语言的传统过程编程语言。计算机可读程序指令可以完全在用户的计算机上、部分地在用户的计算机上、作为独立软件包、部分地在用户的计算机上并且部分地在远程计算机上或者完全在远程计算机或服务器上执行。在后者场景中,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以做出到外部计算机的连接(用于例如,使用互联网服务提供商来通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本公开的各方面。
在本文中参考根据本公开的一些实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述本公开的各方面。应理解的是,可通过计算机可读程序指令来实现流程图图示和/或框图的每个块以及流程图图示和/或框图中的块的组合。
可以将这些计算机可读程序指令提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由该计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现一个或多个流程图和/或框图块中指定的功能/行为的手段。这些计算机可读程序指令还可以被存储在计算机可读存储介质中,这些计算机可读程序指令可指示计算机、可编程数据处理装置和/或其他设备以特定方式起作用,使得其中存储有指令的计算机可读存储介质包括制品,所述制品包括实现一个或多个流程图和/或框图块中指定的功能/行为的各方面的指令。
还可以将计算机可读程序指令加载到计算机、其他可编程数据处理装置或其他设备上以使得在该计算机、其他可编程装置或其他设备上执行一系列操作步骤以产生计算机实现的过程,使得在该计算机、其他可编程装置或其他设备上执行的指令实现一个或多个流程图和/或框图块中指定的功能/行为。
图中的流程图和框图图示了根据本公开的各种实施例的系统、方法和计算机程序产品的可能的实施方式的架构、功能性和操作。在这方面,流程图或框图中的每个块可以表示指令的模块、段或一部分,其包括用于实现所指定的(一个或多个)逻辑功能的一个或多个可执行指令。在一些替代实施方式中,块中指出的功能可以不按图中指出的次序发生。例如,取决于所涉及的功能性,事实上可以基本上同时执行相继示出的两个块,或者有时可以以相反的次序执行块。还应注意的是,框图和/或流程图图示的每个块以及框图和/或流程图图示中的块的组合可由执行所指定的功能或行为或者实行专用硬件和计算机指令的组合的基于专用硬件的系统实现。
读者应领会的是,可以以各种方式执行本文描述的步骤并且不要求特定排序。从前面的描述中应进一步理解的是,可以在本公开的各种实施例中在不脱离其真实精神的情况下进行修改和变化。本说明书中的描述仅用于图示的目的,而不应为在限制性意义上进行解释。本公开的范围仅受所附权利要求书的语言限制。
Claims (17)
1.多个存储系统,数据集跨越所述多个存储系统同步地被复制为多个数据集,每个存储系统包括计算机存储器和计算机处理器,所述存储系统中的每一个中的所述计算机存储器包括计算机程序指令,所述计算机程序指令当由所述多个存储系统中的特定存储系统的所述计算机处理器执行时,使所述特定存储系统执行以下步骤:
附连到豆荚,其中所述豆荚包括所述数据集、一组受管理对象和管理操作、用于修改或者读取所述数据集的一组访问操作以及所述豆荚的多个成员存储系统,且其中:
管理操作通过所述多个成员存储系统中的任一个等效地修改或者查询受管理对象,
用于读取或者修改所述数据集的访问操作通过所述多个成员存储系统中的任一个等效地操作,
每个成员存储系统将所述数据集的单独的副本作为所述多个数据集的真子集来存储,所述真子集被存储和通告以供所述成员存储系统使用,并且
从存储客户端接收的通过任何一个成员存储系统执行和完成的修改受管理对象或所述数据集的输入/输出I/O操作被反映在用于查询所述豆荚的后续管理对象中或用于读取所述数据集的后续访问操作中。
2.根据权利要求1所述的多个存储系统,其中,所述存储系统中的一个或多个包括计算机程序指令,所述计算机程序指令当由特定存储系统的计算机处理器执行时,使所述特定存储系统执行以下步骤:
接收要读取所述数据集的一部分的请求;并且
在本地处理所述要读取所述数据集的一部分的请求。
3.根据权利要求1所述的多个存储系统,其中,所述存储系统中的一个或多个包括计算机程序指令,所述计算机程序指令当由特定存储系统的计算机处理器执行时,使所述特定存储系统执行以下步骤:
检测与所述多个成员存储系统中的其他存储系统中的一个或多个的数据通信中的中断;
确定所述特定存储系统是否应该保持在所述豆荚中;
响应于确定所述特定存储系统应该保持在所述豆荚中,使所述特定存储系统上的所述数据集保持对管理和数据集操作可访问;并且
响应于确定所述特定存储系统不应该保持在所述豆荚中,使所述特定存储系统上的所述数据集对管理和数据集操作不可访问。
4.根据权利要求3所述的多个存储系统,其中,所述存储系统中的一个或多个包括计算机程序指令,所述计算机程序指令当由特定存储系统的计算机处理器执行时,使所述特定存储系统执行以下步骤:
检测到与所述其他存储系统中的一个或多个的数据通信中的所述中断已被修复;并且
使所述特定存储系统上的所述数据集对管理和数据集操作可访问。
5.根据权利要求1所述的多个存储系统,其中,所述存储系统中的两个或更多个包括计算机程序指令,所述计算机程序指令当由每个存储系统的计算机处理器执行时,使每个存储系统执行以下步骤:
标识用于异步地接收所述数据集的目标存储系统,其中,所述目标存储系统不是同步地复制所述数据集所跨越的所述多个存储系统中的一个;
标识所述数据集的未被所述多个成员存储系统中的其他存储系统中的任一个异步地复制到所述目标存储系统的部分;并且
向所述目标存储系统异步地复制所述数据集的未被所述其他存储系统中的任一个异步地复制到所述目标存储系统的该部分,其中,所述其他存储系统中的两个或更多个共同地将整个数据集复制到所述目标存储系统。
6.根据权利要求1所述的多个存储系统,其中,所述存储系统中的至少一个被具体实现为通过云服务提供商提供的云存储装置。
7.一种跨越多个存储系统同步地复制数据集为多个数据集的方法,所述方法包括:
由所述多个存储系统附连到豆荚,其中所述豆荚包括所述数据集、一组受管理对象和管理操作、用于修改或者读取所述数据集的一组访问操作以及多个成员存储系统,且其中:
管理操作通过所述多个成员存储系统中的任一个等效地修改或者查询受管理对象,
用于读取或者修改所述数据集的访问操作通过所述多个成员存储系统中的任一个等效地操作,
每个成员存储系统将所述数据集的单独的副本作为所述多个数据集的真子集来存储,所述真子集被存储和通告以供所述存储系统使用,并且
从存储客户端接收的通过任何一个成员存储系统执行和完成的修改受管理对象或所述数据集的输入/输出I/O操作被反映在用于查询所述豆荚的后续管理对象中或用于读取所述数据集的后续访问操作中。
8.根据权利要求7所述的方法,进一步包括:
由作为所述多个存储系统中的一个的特定存储系统接收要读取所述数据集的一部分的请求;并且
由所述特定存储系统在本地处理所述要读取所述数据集的一部分的请求。
9.根据权利要求7所述的方法,进一步包括:
由作为所述多个存储系统中的一个的特定存储系统检测与所述多个成员存储系统中的其他存储系统中的一个或多个的数据通信中的中断;
确定所述特定存储系统是否应该保持在所述豆荚中;
响应于确定所述特定存储系统应该保持在所述豆荚中,使所述特定存储系统上的所述数据集保持对管理和数据集操作可访问;并且
响应于确定所述特定存储系统不应该保持在所述豆荚中,使所述特定存储系统上的所述数据集对管理和数据集操作不可访问。
10.根据权利要求9所述的方法,进一步包括:
检测到与所述其他存储系统中的一个或多个的数据通信中的所述中断已被修复;并且
使所述特定存储系统上的所述数据集对管理和数据集操作可访问。
11.根据权利要求7所述的方法,进一步包括:
标识用于异步地接收所述数据集的目标存储系统,其中,所述目标存储系统并不是同步地复制所述数据集所跨越的所述多个存储系统中的一个;
标识所述数据集的未被所述多个成员存储系统中的其他存储系统中的任一个异步地复制到所述目标存储系统的部分;并且
向所述目标存储系统异步地复制所述数据集的未被所述其他存储系统中的任一个异步地复制到所述目标存储系统的该部分,其中,所述其他存储系统中的两个或更多个共同地将整个数据集复制到所述目标存储系统。
12.根据权利要求7所述的方法,其中,所述存储系统中的至少一个被具体实现为通过云服务提供商提供的云存储装置。
13.一种用于跨越多个存储系统同步地复制数据集为多个数据集的装置,所述装置包括计算机处理器、在操作上耦合到所述计算机处理器的计算机存储器,所述计算机存储器具有设置在其内的计算机程序指令,所述计算机程序指令当由所述多个存储系统中的特定存储系统的所述计算机处理器执行时,使所述装置执行以下步骤:
附连到豆荚,其中所述豆荚包括所述数据集、一组受管理对象和管理操作、用于修改或者读取所述数据集的一组访问操作以及多个成员存储系统,且其中:
管理操作通过所述多个成员存储系统中的任一个等效地修改或者查询受管理对象,
用于读取或者修改所述数据集的访问操作通过所述多个成员存储系统中的任一个等效地操作,
每个成员存储系统将所述数据集的单独的副本作为所述多个数据集的真子集来存储,所述真子集被存储和通告以供所述存储系统使用,并且
从存储客户端接收的通过任何一个成员存储系统执行和完成的修改受管理对象或所述数据集的输入/输出I/O操作被反映在用于查询所述豆荚的后续管理对象中或用于读取所述数据集的后续访问操作中。
14.根据权利要求13所述的装置,进一步包括计算机程序指令,所述计算机程序指令当由所述计算机处理器执行时,使所述装置执行以下步骤:
接收要读取所述数据集的一部分的请求;并且
在本地处理所述要读取所述数据集的一部分的请求。
15.根据权利要求13所述的装置,进一步包括计算机程序指令,所述计算机程序指令当由所述计算机处理器执行时,使所述装置执行以下步骤:
检测与所述多个成员存储系统中的其他存储系统中的一个或多个的数据通信中的中断;
确定所述特定存储系统是否应该保持在所述豆荚中;
响应于确定所述特定存储系统应该保持在所述豆荚中,使所述特定存储系统上的所述数据集保持对管理和数据集操作可访问;并且
响应于确定所述特定存储系统不应该保持在所述豆荚中,使所述特定存储系统上的所述数据集对管理和数据集操作不可访问。
16.根据权利要求15所述的装置,进一步包括计算机程序指令,所述计算机程序指令当由所述计算机处理器执行时,使所述装置执行以下步骤:
检测到与所述其他存储系统中的一个或多个的数据通信中的所述中断已被修复;并且
使所述特定存储系统上的所述数据集对管理和数据集操作可访问。
17.根据权利要求13所述的装置,进一步包括计算机程序指令,所述计算机程序指令当由所述计算机处理器执行时,使所述装置执行以下步骤:
标识用于异步地接收所述数据集的目标存储系统,其中,所述目标存储系统并不是同步地复制所述数据集所跨越的所述多个存储系统中的一个;
标识所述数据集的未被所述多个成员存储系统中的其他存储系统中的任一个异步地复制到所述目标存储系统的部分;并且
向所述目标存储系统异步地复制所述数据集的未被所述多个成员存储系统中的所述其他存储系统中的任一个异步地复制到所述目标存储系统的该部分,其中所述多个成员存储系统中的两个或更多个存储系统共同地将整个数据集复制到所述目标存储系统。
Applications Claiming Priority (11)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762470172P | 2017-03-10 | 2017-03-10 | |
US62/470,172 | 2017-03-10 | ||
US201762502060P | 2017-05-05 | 2017-05-05 | |
US62/502,060 | 2017-05-05 | ||
US201762518071P | 2017-06-12 | 2017-06-12 | |
US62/518,071 | 2017-06-12 | ||
US201762598989P | 2017-12-14 | 2017-12-14 | |
US15/842,850 | 2017-12-14 | ||
US15/842,850 US10503427B2 (en) | 2017-03-10 | 2017-12-14 | Synchronously replicating datasets and other managed objects to cloud-based storage systems |
US62/598,989 | 2017-12-14 | ||
PCT/US2018/016125 WO2018164782A1 (en) | 2017-03-10 | 2018-01-31 | Synchronously replicating datasets and other managed objects to cloud-based storage systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110392876A CN110392876A (zh) | 2019-10-29 |
CN110392876B true CN110392876B (zh) | 2024-04-30 |
Family
ID=63445464
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880017374.0A Active CN110392876B (zh) | 2017-03-10 | 2018-01-31 | 用于将数据集和其他受管理对象同步地复制到基于云的存储系统的方法 |
Country Status (7)
Country | Link |
---|---|
US (2) | US10503427B2 (zh) |
EP (2) | EP3961365A1 (zh) |
JP (3) | JP7086093B2 (zh) |
CN (1) | CN110392876B (zh) |
AU (2) | AU2018230871A1 (zh) |
CA (1) | CA3054040A1 (zh) |
WO (1) | WO2018164782A1 (zh) |
Families Citing this family (294)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10454714B2 (en) | 2013-07-10 | 2019-10-22 | Nicira, Inc. | Method and system of overlay flow control |
US10749711B2 (en) | 2013-07-10 | 2020-08-18 | Nicira, Inc. | Network-link method useful for a last-mile connectivity in an edge-gateway multipath system |
US10681145B1 (en) * | 2014-12-22 | 2020-06-09 | Chelsio Communications, Inc. | Replication in a protocol offload network interface controller |
US10135789B2 (en) | 2015-04-13 | 2018-11-20 | Nicira, Inc. | Method and system of establishing a virtual private network in a cloud service for branch networking |
US10425382B2 (en) | 2015-04-13 | 2019-09-24 | Nicira, Inc. | Method and system of a cloud-based multipath routing protocol |
US10498652B2 (en) | 2015-04-13 | 2019-12-03 | Nicira, Inc. | Method and system of application-aware routing with crowdsourcing |
US10366247B2 (en) | 2015-06-02 | 2019-07-30 | ALTR Solutions, Inc. | Replacing distinct data in a relational database with a distinct reference to that data and distinct de-referencing of database data |
CN106357703B (zh) * | 2015-07-13 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 集群切换方法与设备 |
CN110431533B (zh) * | 2016-12-30 | 2021-09-14 | 华为技术有限公司 | 故障恢复的方法、设备和系统 |
US11252079B2 (en) | 2017-01-31 | 2022-02-15 | Vmware, Inc. | High performance software-defined core network |
US11121962B2 (en) | 2017-01-31 | 2021-09-14 | Vmware, Inc. | High performance software-defined core network |
US20200036624A1 (en) | 2017-01-31 | 2020-01-30 | The Mode Group | High performance software-defined core network |
US11706127B2 (en) | 2017-01-31 | 2023-07-18 | Vmware, Inc. | High performance software-defined core network |
US10992558B1 (en) | 2017-11-06 | 2021-04-27 | Vmware, Inc. | Method and apparatus for distributed data network traffic optimization |
US20180219765A1 (en) | 2017-01-31 | 2018-08-02 | Waltz Networks | Method and Apparatus for Network Traffic Control Optimization |
US10992568B2 (en) | 2017-01-31 | 2021-04-27 | Vmware, Inc. | High performance software-defined core network |
US10778528B2 (en) | 2017-02-11 | 2020-09-15 | Nicira, Inc. | Method and system of connecting to a multipath hub in a cluster |
US11941279B2 (en) | 2017-03-10 | 2024-03-26 | Pure Storage, Inc. | Data path virtualization |
US11089105B1 (en) * | 2017-12-14 | 2021-08-10 | Pure Storage, Inc. | Synchronously replicating datasets in cloud-based storage systems |
US10503427B2 (en) * | 2017-03-10 | 2019-12-10 | Pure Storage, Inc. | Synchronously replicating datasets and other managed objects to cloud-based storage systems |
US10521344B1 (en) * | 2017-03-10 | 2019-12-31 | Pure Storage, Inc. | Servicing input/output (‘I/O’) operations directed to a dataset that is synchronized across a plurality of storage systems |
US11675520B2 (en) | 2017-03-10 | 2023-06-13 | Pure Storage, Inc. | Application replication among storage systems synchronously replicating a dataset |
US11169727B1 (en) | 2017-03-10 | 2021-11-09 | Pure Storage, Inc. | Synchronous replication between storage systems with virtualized storage |
US11360942B2 (en) * | 2017-03-13 | 2022-06-14 | Wandisco Inc. | Methods, devices and systems for maintaining consistency of metadata and data across data centers |
US10459806B1 (en) * | 2017-04-19 | 2019-10-29 | EMC IP Holding Company LLC | Cloud storage replica of a storage array device |
US10733137B2 (en) * | 2017-04-25 | 2020-08-04 | Samsung Electronics Co., Ltd. | Low latency direct access block storage in NVME-of ethernet SSD |
CN107256363B (zh) * | 2017-06-13 | 2020-03-06 | 杭州华澜微电子股份有限公司 | 一种由加解密模块阵列组成的高速加解密装置 |
US10523539B2 (en) | 2017-06-22 | 2019-12-31 | Nicira, Inc. | Method and system of resiliency in cloud-delivered SD-WAN |
US11238164B2 (en) * | 2017-07-10 | 2022-02-01 | Burstiq, Inc. | Secure adaptive data storage platform |
US10521400B1 (en) * | 2017-07-31 | 2019-12-31 | EMC IP Holding Company LLC | Data reduction reporting in storage systems |
US20190044809A1 (en) * | 2017-08-30 | 2019-02-07 | Intel Corporation | Technologies for managing a flexible host interface of a network interface controller |
US10831935B2 (en) * | 2017-08-31 | 2020-11-10 | Pure Storage, Inc. | Encryption management with host-side data reduction |
US10999165B2 (en) | 2017-10-02 | 2021-05-04 | Vmware, Inc. | Three tiers of SaaS providers for deploying compute and network infrastructure in the public cloud |
US11115480B2 (en) | 2017-10-02 | 2021-09-07 | Vmware, Inc. | Layer four optimization for a virtual network defined over public cloud |
US10666460B2 (en) | 2017-10-02 | 2020-05-26 | Vmware, Inc. | Measurement based routing through multiple public clouds |
US11089111B2 (en) | 2017-10-02 | 2021-08-10 | Vmware, Inc. | Layer four optimization for a virtual network defined over public cloud |
US10959098B2 (en) | 2017-10-02 | 2021-03-23 | Vmware, Inc. | Dynamically specifying multiple public cloud edge nodes to connect to an external multi-computer node |
US10999100B2 (en) | 2017-10-02 | 2021-05-04 | Vmware, Inc. | Identifying multiple nodes in a virtual network defined over a set of public clouds to connect to an external SAAS provider |
US10671435B1 (en) * | 2017-10-19 | 2020-06-02 | Pure Storage, Inc. | Data transformation caching in an artificial intelligence infrastructure |
US10671494B1 (en) * | 2017-11-01 | 2020-06-02 | Pure Storage, Inc. | Consistent selection of replicated datasets during storage system recovery |
US11240306B2 (en) * | 2017-11-06 | 2022-02-01 | Vast Data Ltd. | Scalable storage system |
US10652308B2 (en) * | 2017-11-08 | 2020-05-12 | International Business Machines Corporation | Cognitive storage management for a mobile computing device |
US11223514B2 (en) * | 2017-11-09 | 2022-01-11 | Nicira, Inc. | Method and system of a dynamic high-availability mode based on current wide area network connectivity |
US10915267B2 (en) * | 2017-12-06 | 2021-02-09 | Intel Corporation | Atomic cross-media writes on a storage device |
US10866963B2 (en) | 2017-12-28 | 2020-12-15 | Dropbox, Inc. | File system authentication |
US10534738B2 (en) * | 2018-01-17 | 2020-01-14 | Western Digital Technologies, Inc. | Host bus adaptor with configurable interface |
US10740202B2 (en) * | 2018-02-07 | 2020-08-11 | Excelero Storage Ltd. | System and method for efficient comparison of mirrored storage devices |
US11108857B2 (en) | 2018-02-27 | 2021-08-31 | Elasticsearch B.V. | Self-replicating management services for distributed computing architectures |
US11019166B2 (en) | 2018-02-27 | 2021-05-25 | Elasticsearch B.V. | Management services for distributed computing architectures using rolling changes |
US10931453B2 (en) * | 2018-03-05 | 2021-02-23 | International Business Machines Corporation | Distributed encryption keys for tokens in a cloud environment |
US11397738B2 (en) * | 2018-03-07 | 2022-07-26 | Iguazio Systems Ltd. | Stateless stream handling and resharding |
US10897499B2 (en) * | 2018-04-24 | 2021-01-19 | International Business Machines Corporation | Resolving status and synchronization discrepancies in a distributed computing environment using blockchains |
US10795747B2 (en) * | 2018-05-17 | 2020-10-06 | Microsoft Technology Licensing, Llc | File synchronizing service status monitoring and error handling |
US10592873B2 (en) * | 2018-05-21 | 2020-03-17 | Microsoft Technology Licensing, Llc | Edit transactions for blockchains |
US11394776B2 (en) * | 2018-06-07 | 2022-07-19 | Tuxera, Inc. | Systems and methods for transport layer processing of server message block protocol messages |
US20190042133A1 (en) * | 2018-06-29 | 2019-02-07 | Intel Corporation | Technologies for providing adaptive data access request routing in a distributed storage system |
US10649855B2 (en) * | 2018-07-12 | 2020-05-12 | EMC IP Holding Company LLC | Network configuration method to allow access to the backup and restores to Mtrees on a clustered backup appliance |
US11163723B2 (en) * | 2018-07-19 | 2021-11-02 | Weka.IO Ltd. | Pushing a point in time to a backend object storage for a distributed storage system |
US10423573B1 (en) * | 2018-07-24 | 2019-09-24 | Nasuni Corporation | Cloud-native global file system with multi-site support using push classes |
US11099753B2 (en) * | 2018-07-27 | 2021-08-24 | EMC IP Holding Company LLC | Method and apparatus for dynamic flow control in distributed storage systems |
US10860444B2 (en) * | 2018-07-30 | 2020-12-08 | EMC IP Holding Company LLC | Seamless mobility for kubernetes based stateful pods using moving target defense |
US11099934B2 (en) * | 2018-08-24 | 2021-08-24 | International Business Machines Corporation | Data rebuilding |
US11237750B2 (en) | 2018-08-30 | 2022-02-01 | Portworx, Inc. | Dynamic volume replication factor adjustment |
US11354060B2 (en) * | 2018-09-11 | 2022-06-07 | Portworx, Inc. | Application snapshot for highly available and distributed volumes |
RU2731321C2 (ru) | 2018-09-14 | 2020-09-01 | Общество С Ограниченной Ответственностью "Яндекс" | Способ определения потенциальной неисправности запоминающего устройства |
RU2718215C2 (ru) | 2018-09-14 | 2020-03-31 | Общество С Ограниченной Ответственностью "Яндекс" | Система обработки данных и способ обнаружения затора в системе обработки данных |
US11212076B2 (en) | 2018-09-19 | 2021-12-28 | International Business Machines Corporation | Distributed platform for computation and trusted validation |
US11032063B2 (en) | 2018-09-19 | 2021-06-08 | International Business Machines Corporation | Distributed platform for computation and trusted validation |
US11940978B2 (en) * | 2018-09-19 | 2024-03-26 | International Business Machines Corporation | Distributed platform for computation and trusted validation |
US11044312B2 (en) * | 2018-09-21 | 2021-06-22 | Microsoft Technology Licensing, Llc | Storage segment server covered cache |
RU2721235C2 (ru) | 2018-10-09 | 2020-05-18 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и система для маршрутизации и выполнения транзакций |
CN109274754B (zh) * | 2018-10-11 | 2021-05-04 | 上海保险交易所股份有限公司 | 用于在区块链网络中同步数据的方法、设备和存储介质 |
CN111046007B (zh) * | 2018-10-12 | 2023-08-18 | 伊姆西Ip控股有限责任公司 | 管理存储系统的方法、装置和计算机程序产品 |
RU2711348C1 (ru) | 2018-10-15 | 2020-01-16 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и система для обработки запросов в распределенной базе данных |
JP7361711B2 (ja) * | 2018-10-22 | 2023-10-16 | パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ | 制御方法、コンテンツ管理システム、及び、プログラム |
US10747474B2 (en) * | 2018-10-22 | 2020-08-18 | EMC IP Holding Company LLC | Online cluster expansion for storage system with decoupled logical and physical capacity |
US10819589B2 (en) * | 2018-10-24 | 2020-10-27 | Cognizant Technology Solutions India Pvt. Ltd. | System and a method for optimized server-less service virtualization |
US10944850B2 (en) | 2018-10-29 | 2021-03-09 | Wandisco, Inc. | Methods, devices and systems for non-disruptive upgrades to a distributed coordination engine in a distributed computing environment |
US10977217B2 (en) * | 2018-10-31 | 2021-04-13 | EMC IP Holding Company LLC | Method and system to efficiently recovering a consistent view of a file system image from an asynchronously remote system |
US11023493B2 (en) * | 2018-11-06 | 2021-06-01 | Vmware, Inc. | Intelligently scheduling resynchronization jobs in a distributed object-based storage system |
US11212079B2 (en) | 2018-11-12 | 2021-12-28 | Cisco Technology, Inc. | Seamless rotation of keys for data analytics and machine learning on encrypted data |
US11132339B2 (en) | 2018-11-13 | 2021-09-28 | Netapp Inc. | Synchronous replication for synchronous mirror copy guarantee |
US11379254B1 (en) * | 2018-11-18 | 2022-07-05 | Pure Storage, Inc. | Dynamic configuration of a cloud-based storage system |
CN109635037B (zh) * | 2018-11-19 | 2022-12-09 | 中山大学 | 一种关系型分布式数据库的分片存储方法及装置 |
US10833949B2 (en) * | 2018-11-20 | 2020-11-10 | Amazon Technologies, Inc | Extension resource groups of provider network services |
US11411921B2 (en) | 2018-11-23 | 2022-08-09 | Amazon Technologies, Inc. | Enabling access across private networks for a managed blockchain service |
US11762815B2 (en) * | 2018-11-23 | 2023-09-19 | Amazon Technologies, Inc. | Multi-framework managed blockchain service |
US11405455B2 (en) * | 2018-11-27 | 2022-08-02 | Ovh Us Llc | Elastic scaling in a storage network environment |
CN111241189A (zh) * | 2018-11-29 | 2020-06-05 | 北京京东尚科信息技术有限公司 | 一种同步数据的方法和装置 |
US10326802B1 (en) * | 2018-12-04 | 2019-06-18 | Xage Security, Inc. | Centrally managing data for orchestrating and managing user accounts and access control and security policies remotely across multiple devices |
US10742567B2 (en) * | 2018-12-13 | 2020-08-11 | Accenture Global Solutions Limited | Prescriptive analytics based storage class placement stack for cloud computing |
RU2714373C1 (ru) | 2018-12-13 | 2020-02-14 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и система для планирования выполнения операций ввода/вывода |
CN111343484A (zh) * | 2018-12-19 | 2020-06-26 | 飞思达技术(北京)有限公司 | 基于人工智能的iptv/ott智能质量告警方法 |
RU2749649C2 (ru) | 2018-12-21 | 2021-06-16 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и система для планирования обработки операций ввода/вывода |
RU2720951C1 (ru) * | 2018-12-29 | 2020-05-15 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и распределенная компьютерная система для обработки данных |
US11811769B2 (en) | 2019-01-31 | 2023-11-07 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative, metadata driven, cryptographically verifiable multi-network (multi-tenant) shared ledger |
US11824864B2 (en) | 2019-01-31 | 2023-11-21 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative and metadata driven blockchain platform using distributed ledger technology (DLT) |
US11899817B2 (en) | 2019-01-31 | 2024-02-13 | Salesforce, Inc. | Systems, methods, and apparatuses for storing PII information via a metadata driven blockchain using distributed and decentralized storage for sensitive user information |
US11876910B2 (en) * | 2019-01-31 | 2024-01-16 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a multi tenant blockchain platform for managing Einstein platform decisions using distributed ledger technology (DLT) |
US10719249B1 (en) | 2019-01-31 | 2020-07-21 | EMC IP Holding Company LLC | Extent lock resolution in active/active replication |
US10853200B2 (en) | 2019-02-01 | 2020-12-01 | EMC IP Holding Company LLC | Consistent input/output (IO) recovery for active/active cluster replication |
US11221923B2 (en) * | 2019-02-05 | 2022-01-11 | International Business Machines Corporation | Performing selective backup operations |
RU2746042C1 (ru) | 2019-02-06 | 2021-04-06 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и система для передачи сообщения |
US11245750B2 (en) * | 2019-02-16 | 2022-02-08 | International Business Machines Corporation | File server load balancing |
US10936010B2 (en) * | 2019-03-08 | 2021-03-02 | EMC IP Holding Company LLC | Clock synchronization for storage systems in an active-active configuration |
US10754559B1 (en) * | 2019-03-08 | 2020-08-25 | EMC IP Holding Company LLC | Active-active storage clustering with clock synchronization |
US10852985B2 (en) | 2019-03-19 | 2020-12-01 | Netapp Inc. | Persistent hole reservation |
US11157455B2 (en) | 2019-03-19 | 2021-10-26 | Netapp Inc. | Inofile management and access control list file handle parity |
US11086551B2 (en) | 2019-03-19 | 2021-08-10 | Netapp, Inc. | Freeing and utilizing unused inodes |
US11151162B2 (en) | 2019-03-19 | 2021-10-19 | Netapp Inc. | Timestamp consistency for synchronous replication |
US11322236B1 (en) * | 2019-04-03 | 2022-05-03 | Precis, Llc | Data abstraction system architecture not requiring interoperability between data providers |
US10719257B1 (en) * | 2019-04-29 | 2020-07-21 | EMC IP Holding Company LLC | Time-to-live (TTL) license management in an active/active replication session |
US11296867B2 (en) * | 2019-05-01 | 2022-04-05 | Intuit Inc. | Systems and methods for hash chain migration |
US11397653B2 (en) | 2019-05-29 | 2022-07-26 | Intel Corporation | Technologies for fast recovery of distributed storage systems on disaggregated storage |
US11228643B2 (en) * | 2019-06-04 | 2022-01-18 | Capital One Services, Llc | System and method for fast application auto-scaling |
US11599431B2 (en) * | 2019-06-04 | 2023-03-07 | International Business Machines Corporation | Database optimized disaster recovery orchestrator |
US11533391B2 (en) * | 2019-06-05 | 2022-12-20 | Microsoft Technology Licensing, Llc | State replication, allocation and failover in stream processing |
US11606442B2 (en) | 2019-06-07 | 2023-03-14 | Microsoft Technology Licensing, Llc | Subscription to edits of blockchain transaction |
US11789824B2 (en) * | 2019-07-18 | 2023-10-17 | EMC IP Holding Company LLC | Hyper-scale P2P deduplicated storage system using a distributed ledger |
US11797197B1 (en) | 2019-07-18 | 2023-10-24 | Pure Storage, Inc. | Dynamic scaling of a virtual storage system |
US11526408B2 (en) | 2019-07-18 | 2022-12-13 | Pure Storage, Inc. | Data recovery in a virtual storage system |
US20210019067A1 (en) * | 2019-07-18 | 2021-01-21 | Pure Storage, Inc. | Data deduplication across storage systems |
CN110351760B (zh) * | 2019-07-19 | 2022-06-03 | 重庆邮电大学 | 一种移动边缘计算系统动态任务卸载及资源分配方法 |
CN112286441A (zh) * | 2019-07-24 | 2021-01-29 | 伊姆西Ip控股有限责任公司 | 提供视觉表示的方法、设备和计算机介质 |
US11119682B2 (en) * | 2019-07-30 | 2021-09-14 | Hewlett Packard Enterprise Development Lp | Compressed extent versions |
CN112306746A (zh) * | 2019-07-30 | 2021-02-02 | 伊姆西Ip控股有限责任公司 | 在应用环境中管理快照的方法、设备和计算机程序产品 |
US11144529B2 (en) | 2019-08-09 | 2021-10-12 | Sap Se | Consistent data replication in an event-driven architecture |
CN115422284B (zh) * | 2019-08-22 | 2023-11-10 | 华为技术有限公司 | 存储设备、分布式存储系统以及数据处理方法 |
US20210056220A1 (en) * | 2019-08-22 | 2021-02-25 | Mediatek Inc. | Method for improving confidentiality protection of neural network model |
US11144219B2 (en) | 2019-08-23 | 2021-10-12 | Vmware, Inc. | Ensuring sufficient available storage capacity for data resynchronization/reconstruction in a hyper-converged infrastructure |
US11252105B2 (en) | 2019-08-27 | 2022-02-15 | Vmware, Inc. | Identifying different SaaS optimal egress nodes for virtual networks of different entities |
US11153173B1 (en) * | 2019-09-10 | 2021-10-19 | Juniper Networks, Inc. | Dynamically updating compute node location information in a distributed computing environment |
CN110569109B (zh) * | 2019-09-11 | 2022-05-31 | 广州虎牙科技有限公司 | 容器更新方法、控制节点及边缘节点 |
SG11202002588RA (en) * | 2019-09-12 | 2020-04-29 | Alibaba Group Holding Ltd | Log-structured storage systems |
US11537725B2 (en) | 2019-09-23 | 2022-12-27 | Amazon Technologies, Inc. | Encrypted cross-zone replication for cross-zone replicated block storage devices |
US11494108B2 (en) * | 2019-09-23 | 2022-11-08 | Amazon Technologies, Inc. | Cross-zone replicated block storage devices |
US11520530B2 (en) | 2019-09-24 | 2022-12-06 | Amazon Technologies, Inc. | Peripheral device for configuring compute instances at client-selected servers |
US11064017B2 (en) | 2019-09-24 | 2021-07-13 | Amazon Technologies, Inc. | Peripheral device enabling virtualized computing service extensions |
CN112559562A (zh) * | 2019-09-25 | 2021-03-26 | 上海哔哩哔哩科技有限公司 | 一种信息处理方法及系统 |
CN110807063B (zh) * | 2019-09-27 | 2022-04-01 | 国电南瑞科技股份有限公司 | 基于边缘计算的变电站实时数据快速分发同步系统及方法 |
US11474977B2 (en) | 2019-09-30 | 2022-10-18 | Dropbox, Inc. | Snapshot isolation in a distributed storage system |
US11169795B2 (en) | 2019-10-09 | 2021-11-09 | Toyota Motor North America, Inc. | Management of transport software updates |
US11422792B2 (en) | 2019-10-09 | 2022-08-23 | Toyota Motor North America, Inc. | Management of transport software updates |
US11294662B2 (en) | 2019-10-09 | 2022-04-05 | Toyota Motor North America, Inc. | Management of transport software updates |
JP7376695B2 (ja) | 2019-10-09 | 2023-11-08 | トヨタ モーター ノース アメリカ,インコーポレイティド | 輸送装置ソフトウェアアップデートの管理 |
US11449238B2 (en) | 2019-10-11 | 2022-09-20 | Seagate Technology Llc | Low cost data storage system |
US11044190B2 (en) | 2019-10-28 | 2021-06-22 | Vmware, Inc. | Managing forwarding elements at edge nodes connected to a virtual network |
CN110825758B (zh) * | 2019-10-31 | 2022-11-15 | 中国银联股份有限公司 | 一种交易处理的方法及装置 |
CN110889539B (zh) * | 2019-11-01 | 2023-03-24 | 中国南方电网有限责任公司 | 基于云平台的现货市场出清案例组织方法、系统和装置 |
CN111079144B (zh) * | 2019-11-25 | 2022-07-01 | 杭州迪普科技股份有限公司 | 一种病毒传播行为检测方法及装置 |
US11605033B2 (en) | 2019-11-27 | 2023-03-14 | Amazon Technologies, Inc. | Quantum computing task translation supporting multiple quantum computing technologies |
US11605016B2 (en) | 2019-11-27 | 2023-03-14 | Amazon Technologies, Inc. | Quantum computing service supporting local execution of hybrid algorithms |
US11704715B2 (en) | 2019-11-27 | 2023-07-18 | Amazon Technologies, Inc. | Quantum computing service supporting multiple quantum computing technologies |
US11650869B2 (en) | 2019-11-27 | 2023-05-16 | Amazon Technologies, Inc. | Quantum computing service with local edge devices supporting multiple quantum computing technologies |
EP3769230B1 (en) * | 2019-11-29 | 2023-10-11 | Alipay (Hangzhou) Information Technology Co., Ltd. | Taking snapshots of blockchain data |
US11567899B2 (en) | 2019-12-03 | 2023-01-31 | Western Digital Technologies, Inc. | Managing dependent delete operations among data stores |
TWI737074B (zh) * | 2019-12-11 | 2021-08-21 | 新加坡商鴻運科股份有限公司 | 消防資料分析方法、裝置、電腦裝置及存儲介質 |
US11489783B2 (en) | 2019-12-12 | 2022-11-01 | Vmware, Inc. | Performing deep packet inspection in a software defined wide area network |
US11394640B2 (en) | 2019-12-12 | 2022-07-19 | Vmware, Inc. | Collecting and analyzing data regarding flows associated with DPI parameters |
CN111046061B (zh) * | 2019-12-13 | 2023-08-25 | 医渡云(北京)技术有限公司 | 数据查询方法、装置、系统、设备及存储介质 |
US11442960B2 (en) * | 2019-12-17 | 2022-09-13 | Verizon Patent And Licensing Inc. | Edge key value store for a distributed platform |
CN111046107B (zh) * | 2019-12-19 | 2023-05-26 | 北京中兵智航科技有限公司 | 基于区块链技术机场中心数据的分布式存储系统 |
US11218396B2 (en) * | 2019-12-23 | 2022-01-04 | Seagate Technology Llc | Port-to-port network routing using a storage device |
EP4081909A4 (en) * | 2019-12-27 | 2023-09-13 | Hitachi Vantara LLC | ASYNCHRONOUS DATA SYNCHRONIZATION IN HYBRID CLOUD |
CN111159156B (zh) * | 2019-12-31 | 2023-04-28 | 杭州迪普科技股份有限公司 | SQLite数据库的备份方法和装置 |
CN111241042B (zh) * | 2019-12-31 | 2022-11-11 | 苏州浪潮智能科技有限公司 | 一种基于Etcd的分布锁实现方法、系统及设备 |
CN113127414B (zh) * | 2019-12-31 | 2023-05-23 | 贵州白山云科技股份有限公司 | 一种请求处理方法和系统及边缘节点 |
US11379317B2 (en) * | 2020-01-03 | 2022-07-05 | EMC IP Holding Company LLC | Uninterrupted file level restore service using siamese engine |
US11722925B2 (en) | 2020-01-24 | 2023-08-08 | Vmware, Inc. | Performing service class aware load balancing to distribute packets of a flow among multiple network links |
CN111259060B (zh) * | 2020-02-18 | 2023-08-15 | 北京百度网讯科技有限公司 | 数据查询的方法及装置 |
US11144232B2 (en) * | 2020-02-21 | 2021-10-12 | EMC IP Holding Company LLC | Storage system with efficient snapshot pair creation during synchronous replication of logical storage volumes |
US11405215B2 (en) | 2020-02-26 | 2022-08-02 | International Business Machines Corporation | Generation of a secure key exchange authentication response in a computing environment |
US11546137B2 (en) * | 2020-02-26 | 2023-01-03 | International Business Machines Corporation | Generation of a request to initiate a secure data transfer in a computing environment |
US11652616B2 (en) * | 2020-02-26 | 2023-05-16 | International Business Machines Corporation | Initializing a local key manager for providing secure data transfer in a computing environment |
US11502834B2 (en) | 2020-02-26 | 2022-11-15 | International Business Machines Corporation | Refreshing keys in a computing environment that provides secure data transfer |
US11489821B2 (en) | 2020-02-26 | 2022-11-01 | International Business Machines Corporation | Processing a request to initiate a secure data transfer in a computing environment |
US11184160B2 (en) | 2020-02-26 | 2021-11-23 | International Business Machines Corporation | Channel key loading in a computing environment |
EP3872583B1 (de) * | 2020-02-26 | 2023-07-19 | Siemens Aktiengesellschaft | Redundant ausgelegtes automatisierungssystem |
US11132321B2 (en) * | 2020-02-26 | 2021-09-28 | Quanta Computer Inc. | Method and system for automatic bifurcation of PCIe in BIOS |
US11569997B1 (en) | 2020-03-09 | 2023-01-31 | Amazon Technologies, Inc. | Security mechanisms for data plane extensions of provider network services |
US20210303164A1 (en) * | 2020-03-25 | 2021-09-30 | Pure Storage, Inc. | Managing host mappings for replication endpoints |
CN113452730B (zh) * | 2020-03-25 | 2022-04-29 | 阿里巴巴集团控股有限公司 | 对象读取管理方法、装置、电子设备及计算机存储介质 |
TWI740429B (zh) | 2020-03-26 | 2021-09-21 | 威聯通科技股份有限公司 | 管理資料備份的方法及系統 |
US11392617B2 (en) * | 2020-03-26 | 2022-07-19 | International Business Machines Corporation | Recovering from a failure of an asynchronous replication node |
US11704035B2 (en) | 2020-03-30 | 2023-07-18 | Pure Storage, Inc. | Unified storage on block containers |
US11080215B1 (en) * | 2020-03-31 | 2021-08-03 | EMC IP Holding Company LLC | Host device providing automated prediction of change intervals to reduce adverse impacts on applications |
US11586649B2 (en) * | 2020-04-21 | 2023-02-21 | International Business Machines Corporation | Declarative configuration for database replication |
CN111630545B (zh) | 2020-04-22 | 2022-05-27 | 支付宝(杭州)信息技术有限公司 | 管理账本系统中的交易请求 |
SG11202103218YA (en) | 2020-04-22 | 2021-04-29 | Alipay Hangzhou Inf Tech Co Ltd | Managing transaction requests in ledger systems |
US11669494B2 (en) * | 2020-05-22 | 2023-06-06 | EMC IP Holding Company LLC | Scaling out data protection infrastructure |
CN111651457B (zh) * | 2020-05-29 | 2023-09-22 | 中国平安财产保险股份有限公司 | 数据分组方法、装置、计算机设备及存储介质 |
US11962518B2 (en) | 2020-06-02 | 2024-04-16 | VMware LLC | Hardware acceleration techniques using flow selection |
US11818114B2 (en) * | 2020-06-12 | 2023-11-14 | Strata Identity, Inc. | Systems, methods, and storage media for synchronizing identity information across identity domains in an identity infrastructure |
CN111443876A (zh) * | 2020-06-17 | 2020-07-24 | 南京信易达计算技术有限公司 | 一种融合型存储专用操作系统、方法和存储介质 |
CN111752960B (zh) * | 2020-06-28 | 2023-07-28 | 北京百度网讯科技有限公司 | 数据处理方法和装置 |
CN113204187B (zh) * | 2020-06-30 | 2023-05-09 | 欧姆龙(上海)有限公司 | 控制系统及其控制方法 |
US11245641B2 (en) | 2020-07-02 | 2022-02-08 | Vmware, Inc. | Methods and apparatus for application aware hub clustering techniques for a hyper scale SD-WAN |
CN113296792B (zh) * | 2020-07-10 | 2022-04-12 | 阿里巴巴集团控股有限公司 | 存储方法、装置、设备、存储介质和系统 |
AT524620A1 (de) * | 2020-12-07 | 2022-06-15 | Fachhochschule St Poelten Gmbh | Verfahren zum Migrieren einer IT-Anwendung |
US11882222B2 (en) | 2020-07-23 | 2024-01-23 | The Toronto-Dominion Bank | Multidirectional synchronization of confidential data using distributed ledgers |
US11709710B2 (en) | 2020-07-30 | 2023-07-25 | Vmware, Inc. | Memory allocator for I/O operations |
US11019023B1 (en) * | 2020-08-13 | 2021-05-25 | Salesforce.Com, Inc. | Container orchestration system (COS) services discovery across multiple COS clusters based on COS cluster domain name system |
JP7153942B2 (ja) * | 2020-08-17 | 2022-10-17 | ラトナ株式会社 | 情報処理装置、方法、コンピュータプログラム、及び、記録媒体 |
US11481273B2 (en) * | 2020-08-17 | 2022-10-25 | Micron Technology, Inc. | Partitioned memory having error detection capability |
US11651096B2 (en) | 2020-08-24 | 2023-05-16 | Burstiq, Inc. | Systems and methods for accessing digital assets in a blockchain using global consent contracts |
WO2022044459A1 (ja) * | 2020-08-24 | 2022-03-03 | 富士フイルム株式会社 | 情報処理装置、情報処理方法、及び情報処理プログラム |
US11811867B2 (en) | 2020-09-01 | 2023-11-07 | International Business Machines Corporation | Data transmission routing based on replication path capability |
CN112259071A (zh) * | 2020-09-22 | 2021-01-22 | 北京百度网讯科技有限公司 | 语音处理系统、语音处理方法、电子设备和可读存储介质 |
CN112046556B (zh) * | 2020-09-22 | 2022-02-22 | 大连交通大学 | 一种图形化场景现车与调车作业计划内容双向同步系统 |
CN112328512B (zh) * | 2020-09-22 | 2023-07-28 | 北京计算机技术及应用研究所 | 一种应用于多控存储系统的缓存同步系统及方法 |
US11281407B1 (en) * | 2020-09-23 | 2022-03-22 | EMC IP Holding Company LLC | Verified write command in active-active replication |
US11636053B2 (en) * | 2020-09-28 | 2023-04-25 | Vmware, Inc. | Emulating a local storage by accessing an external storage through a shared port of a NIC |
US11593278B2 (en) | 2020-09-28 | 2023-02-28 | Vmware, Inc. | Using machine executing on a NIC to access a third party storage not supported by a NIC or host |
US11736566B2 (en) | 2020-09-28 | 2023-08-22 | Vmware, Inc. | Using a NIC as a network accelerator to allow VM access to an external storage via a PF module, bus, and VF module |
US11792134B2 (en) | 2020-09-28 | 2023-10-17 | Vmware, Inc. | Configuring PNIC to perform flow processing offload using virtual port identifiers |
US11829793B2 (en) | 2020-09-28 | 2023-11-28 | Vmware, Inc. | Unified management of virtual machines and bare metal computers |
US11343136B2 (en) | 2020-10-01 | 2022-05-24 | Bank Of America Corporation | System for real time recovery of resource transfers over a distributed server network |
US11290330B1 (en) * | 2020-10-30 | 2022-03-29 | Nutanix, Inc. | Reconciliation of the edge state in a telemetry platform |
US11223516B1 (en) | 2020-10-30 | 2022-01-11 | Nutanix, Inc. | Smart collection and processing in telemetry system |
US11700178B2 (en) | 2020-10-30 | 2023-07-11 | Nutanix, Inc. | System and method for managing clusters in an edge network |
US20220141658A1 (en) * | 2020-11-05 | 2022-05-05 | Visa International Service Association | One-time wireless authentication of an internet-of-things device |
US11575591B2 (en) | 2020-11-17 | 2023-02-07 | Vmware, Inc. | Autonomous distributed forwarding plane traceability based anomaly detection in application traffic for hyper-scale SD-WAN |
CN112464116B (zh) * | 2020-11-18 | 2024-03-01 | 金蝶云科技有限公司 | 页面显示方法、装置、计算机设备和存储介质 |
CN112491606B (zh) * | 2020-11-20 | 2022-05-24 | 湖南麒麟信安科技股份有限公司 | 一种基于ansible的自动化部署业务系统高可用集群的方法 |
US11575600B2 (en) | 2020-11-24 | 2023-02-07 | Vmware, Inc. | Tunnel-less SD-WAN |
CN112416263B (zh) * | 2020-12-10 | 2022-09-30 | 从法信息科技有限公司 | 基于随机验证的时空证明成块存储方法、装置和电子设备 |
US11929903B2 (en) | 2020-12-29 | 2024-03-12 | VMware LLC | Emulating packet flows to assess network links for SD-WAN |
US11372553B1 (en) | 2020-12-31 | 2022-06-28 | Seagate Technology Llc | System and method to increase data center availability using rack-to-rack storage link cable |
CN116783874A (zh) | 2021-01-18 | 2023-09-19 | Vm维尔股份有限公司 | 网络感知的负载平衡 |
CN112532750B (zh) * | 2021-01-18 | 2021-06-22 | 深圳博士创新技术转移有限公司 | 一种大数据推送处理方法、系统及云平台 |
CN112865273B (zh) * | 2021-01-20 | 2023-09-12 | 成都铁工科技有限公司 | 一种道岔连接销振动能量收集电路、模块及系统 |
US11979325B2 (en) | 2021-01-28 | 2024-05-07 | VMware LLC | Dynamic SD-WAN hub cluster scaling with machine learning |
US11803571B2 (en) * | 2021-02-04 | 2023-10-31 | Hewlett Packard Enterprise Development Lp | Transfer of synchronous and asynchronous replication |
CN112929180B (zh) * | 2021-02-05 | 2022-07-08 | 中国—东盟信息港股份有限公司 | 一种Kubernetes零信任网络安全系统及其实现方法 |
US11693579B2 (en) | 2021-03-09 | 2023-07-04 | International Business Machines Corporation | Value-based replication of streaming data |
US11709743B2 (en) * | 2021-03-31 | 2023-07-25 | Netapp, Inc. | Methods and systems for a non-disruptive automatic unplanned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
US11360867B1 (en) | 2021-03-31 | 2022-06-14 | Netapp, Inc. | Re-aligning data replication configuration of primary and secondary data serving entities of a cross-site storage solution after a failover event |
US11481139B1 (en) | 2021-03-31 | 2022-10-25 | Netapp, Inc. | Methods and systems to interface between a multi-site distributed storage system and an external mediator to efficiently process events related to continuity |
US11934670B2 (en) | 2021-03-31 | 2024-03-19 | Netapp, Inc. | Performing various operations at the granularity of a consistency group within a cross-site storage solution |
US11740811B2 (en) | 2021-03-31 | 2023-08-29 | Netapp, Inc. | Reseeding a mediator of a cross-site storage solution |
US11550679B2 (en) | 2021-03-31 | 2023-01-10 | Netapp, Inc. | Methods and systems for a non-disruptive planned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
US11914617B2 (en) * | 2021-04-19 | 2024-02-27 | Wealthfront Corporation | Executing updates of records in a distributed database system |
US20220342908A1 (en) * | 2021-04-22 | 2022-10-27 | EMC IP Holding Company LLC | Synchronous remote replication of snapshots |
US11409622B1 (en) * | 2021-04-23 | 2022-08-09 | Netapp, Inc. | Methods and systems for a non-disruptive planned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system without using an external mediator |
US11388086B1 (en) | 2021-05-03 | 2022-07-12 | Vmware, Inc. | On demand routing mesh for dynamically adjusting SD-WAN edge forwarding node roles to facilitate routing through an SD-WAN |
US11893261B2 (en) | 2021-05-05 | 2024-02-06 | Netapp, Inc. | Usage of OP logs to synchronize across primary and secondary storage clusters of a cross-site distributed storage system and lightweight OP logging |
US11729065B2 (en) | 2021-05-06 | 2023-08-15 | Vmware, Inc. | Methods for application defined virtual network service among multiple transport in SD-WAN |
CN113378187A (zh) * | 2021-05-11 | 2021-09-10 | 广西电网有限责任公司电力科学研究院 | 基于物联网的智能电网数据查询方法及系统 |
US11886411B2 (en) * | 2021-05-24 | 2024-01-30 | Molecula Corp. | Data storage using roaring binary-tree format |
US11625294B2 (en) | 2021-05-27 | 2023-04-11 | Capital One Services, Llc | Techniques to provide self-healing data pipelines in a cloud computing environment |
TWI783514B (zh) * | 2021-06-10 | 2022-11-11 | 瑞昱半導體股份有限公司 | 訊號處理系統與訊號傳輸裝置的識別與配對方法 |
US11489720B1 (en) | 2021-06-18 | 2022-11-01 | Vmware, Inc. | Method and apparatus to evaluate resource elements and public clouds for deploying tenant deployable elements based on harvested performance metrics |
CN113419823B (zh) * | 2021-06-22 | 2023-07-18 | 东北大学 | 一种适用于高并发事务的联盟链系统及其设计方法 |
CN115643205A (zh) * | 2021-07-19 | 2023-01-24 | 平头哥(上海)半导体技术有限公司 | 数据生产和消费主体的通信控制单元、及相关装置和方法 |
US11412040B1 (en) * | 2021-07-23 | 2022-08-09 | Vmware, Inc. | Using maintenance mode to upgrade a distributed system |
US11375005B1 (en) | 2021-07-24 | 2022-06-28 | Vmware, Inc. | High availability solutions for a secure access service edge application |
CN113535330B (zh) * | 2021-07-26 | 2023-08-08 | 北京计算机技术及应用研究所 | 一种基于节点评价函数的超融合系统数据本地化存储方法 |
US11977957B2 (en) | 2021-08-03 | 2024-05-07 | Amazon Technologies, Inc. | Quantum computing program compilation using cached compiled quantum circuit files |
CN113806268B (zh) * | 2021-08-04 | 2024-03-19 | 方一信息科技(上海)有限公司 | 基于aurora接口的多通道数据同步接收方法及系统 |
US20230065823A1 (en) * | 2021-08-24 | 2023-03-02 | Twitter, Inc. | Updating records in a real-time storage system |
CN113687920B (zh) * | 2021-08-30 | 2024-02-13 | 济南浪潮数据技术有限公司 | 一种分布式系统的对象策略操作方法、装置及设备 |
US11635918B2 (en) | 2021-08-31 | 2023-04-25 | International Business Machines Corporation | Data migration and replication |
CN113742285B (zh) * | 2021-08-31 | 2022-09-20 | 珠海读书郎软件科技有限公司 | 一种资源管理及同步的方法 |
CN113641763B (zh) * | 2021-08-31 | 2023-11-10 | 优刻得科技股份有限公司 | 一种分布式时序数据库系统以及电子设备和存储介质 |
CN113515468B (zh) * | 2021-09-14 | 2021-11-30 | 成都时识科技有限公司 | 数据更新方法和存储空间设置方法及装置、芯片、设备 |
CN113535738B (zh) * | 2021-09-16 | 2021-12-17 | 上海爱可生信息技术股份有限公司 | MySQL数据库系统的故障转移方法、高可用系统及电子设备 |
US11928131B2 (en) * | 2021-09-27 | 2024-03-12 | International Business Machines Corporation | Synchronized activation of datasets in multicloud computing environment |
US11797276B1 (en) | 2021-09-30 | 2023-10-24 | Amazon Technologies, Inc. | Assisted composition of quantum algorithms |
US11943146B2 (en) | 2021-10-01 | 2024-03-26 | VMware LLC | Traffic prioritization in SD-WAN |
US11892982B2 (en) | 2021-10-20 | 2024-02-06 | Netapp, Inc. | Facilitating immediate performance of volume resynchronization with the use of passive cache entries |
WO2023069448A1 (en) | 2021-10-20 | 2023-04-27 | Pure Storage, Inc. | Independent security threat detection and remediation by storage systems in a synchronous replication arrangement |
US11907092B2 (en) | 2021-11-12 | 2024-02-20 | Amazon Technologies, Inc. | Quantum computing monitoring system |
US11425196B1 (en) | 2021-11-18 | 2022-08-23 | International Business Machines Corporation | Prioritizing data replication packets in cloud environment |
US11863376B2 (en) | 2021-12-22 | 2024-01-02 | Vmware, Inc. | Smart NIC leader election |
US20230283666A1 (en) * | 2022-01-10 | 2023-09-07 | Pure Storage, Inc. | Establishing A Guarantee For Maintaining A Replication Relationship Between Object Stores During A Communications Outage |
US20230236937A1 (en) * | 2022-01-21 | 2023-07-27 | International Business Machines Corporation | Coordinated cycling cyber protection managers and repositories |
US11894973B2 (en) | 2022-03-10 | 2024-02-06 | Ricoh Company, Ltd. | Assigning and prioritizing mediation servers for monitoring legacy devices |
US11606242B1 (en) * | 2022-03-10 | 2023-03-14 | Ricoh Company, Ltd. | Coordinated monitoring of legacy output devices |
US20230291794A1 (en) * | 2022-03-14 | 2023-09-14 | Section.io Incorporated | Systems, methods, and storage media for orchestrating a distributed global computing cluster model and interface |
US11765065B1 (en) | 2022-03-23 | 2023-09-19 | Nutanix, Inc. | System and method for scalable telemetry |
CN114866483B (zh) * | 2022-03-25 | 2023-10-03 | 新华三大数据技术有限公司 | 数据压缩流控方法、装置及电子设备 |
US11909815B2 (en) | 2022-06-06 | 2024-02-20 | VMware LLC | Routing based on geolocation costs |
WO2023240012A1 (en) * | 2022-06-07 | 2023-12-14 | Bio-Rad Laboratories, Inc. | Cloud-based quality control data management |
US11928062B2 (en) | 2022-06-21 | 2024-03-12 | VMware LLC | Accelerating data message classification with smart NICs |
US11899594B2 (en) | 2022-06-21 | 2024-02-13 | VMware LLC | Maintenance of data message classification cache on smart NIC |
US11928367B2 (en) | 2022-06-21 | 2024-03-12 | VMware LLC | Logical memory addressing for network devices |
CN115189994B (zh) * | 2022-07-08 | 2023-05-16 | 中国联合网络通信集团有限公司 | 数据同步方法及装置、计算机可读存储介质 |
US11907562B2 (en) | 2022-07-11 | 2024-02-20 | Netapp, Inc. | Methods and storage nodes to decrease delay in resuming input output (I/O) operations after a non-disruptive event for a storage object of a distributed storage system by utilizing asynchronous inflight replay of the I/O operations |
US20240036997A1 (en) * | 2022-07-28 | 2024-02-01 | Netapp, Inc. | Methods and systems to improve input/output (i/o) resumption time during a non-disruptive automatic unplanned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
US20240036732A1 (en) * | 2022-07-28 | 2024-02-01 | Netapp, Inc. | Methods and systems to improve resumption time of input/output (i/o) operations based on prefetching of configuration data and early abort of conflicting workflows during a non-disruptive automatic unplanned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
CN115599316B (zh) * | 2022-12-15 | 2023-03-21 | 南京鹏云网络科技有限公司 | 分布式数据处理方法、装置、设备、介质和计算机程序产品 |
CN116418505A (zh) * | 2023-06-12 | 2023-07-11 | 天津金城银行股份有限公司 | 数据处理方法、系统、计算机设备及存储介质 |
CN117170818B (zh) * | 2023-09-25 | 2024-04-12 | 中关村科学城城市大脑股份有限公司 | 容器处理方法、装置、电子设备和计算机可读介质 |
CN117614805A (zh) * | 2023-11-21 | 2024-02-27 | 杭州沃趣科技股份有限公司 | 一种监控数据中心状态的数据处理系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016004120A2 (en) * | 2014-07-02 | 2016-01-07 | Hedvig, Inc. | Storage system with virtual disks |
WO2016100790A1 (en) * | 2014-12-19 | 2016-06-23 | Pure Storage, Inc. | Replication to the cloud |
CN106462545A (zh) * | 2014-03-31 | 2017-02-22 | 亚马逊科技公司 | 可缩放文件存储服务 |
Family Cites Families (178)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5651133A (en) | 1995-02-01 | 1997-07-22 | Hewlett-Packard Company | Methods for avoiding over-commitment of virtual capacity in a redundant hierarchic data storage system |
JPH08242229A (ja) | 1995-03-01 | 1996-09-17 | Fujitsu Ltd | ネットワーク監視における状態整合処理システム |
US5799200A (en) | 1995-09-28 | 1998-08-25 | Emc Corporation | Power failure responsive apparatus and method having a shadow dram, a flash ROM, an auxiliary battery, and a controller |
US6012032A (en) | 1995-11-30 | 2000-01-04 | Electronic Data Systems Corporation | System and method for accounting of computer data storage utilization |
US5933598A (en) | 1996-07-17 | 1999-08-03 | Digital Equipment Corporation | Method for sharing variable-grained memory of workstations by sending particular block including line and size of the block to exchange shared data structures |
US6085333A (en) | 1997-12-19 | 2000-07-04 | Lsi Logic Corporation | Method and apparatus for synchronization of code in redundant controllers in a swappable environment |
US6647514B1 (en) | 2000-03-23 | 2003-11-11 | Hewlett-Packard Development Company, L.P. | Host I/O performance and availability of a storage array during rebuild by prioritizing I/O request |
US6643641B1 (en) | 2000-04-27 | 2003-11-04 | Russell Snyder | Web search engine with graphic snapshots |
JP2002041305A (ja) | 2000-07-26 | 2002-02-08 | Hitachi Ltd | 仮想計算機システムにおける計算機資源の割当て方法および仮想計算機システム |
US6789162B1 (en) | 2000-10-17 | 2004-09-07 | Sun Microsystems, Inc. | Storage controller configured to select unused regions of a storage device for data storage according to head position |
US6785678B2 (en) * | 2000-12-21 | 2004-08-31 | Emc Corporation | Method of improving the availability of a computer clustering system through the use of a network medium link state function |
US6857045B2 (en) | 2002-01-25 | 2005-02-15 | International Business Machines Corporation | Method and system for updating data in a compressed read cache |
US6728738B2 (en) | 2002-04-03 | 2004-04-27 | Sun Microsystems, Inc. | Fast lifetime analysis of objects in a garbage-collected system |
US6895464B2 (en) | 2002-06-03 | 2005-05-17 | Honeywell International Inc. | Flash memory management system and method utilizing multiple block list windows |
US7334124B2 (en) | 2002-07-22 | 2008-02-19 | Vormetric, Inc. | Logical access block processing protocol for transparent secure file storage |
US7146521B1 (en) | 2002-08-21 | 2006-12-05 | 3Pardata, Inc. | Preventing damage of storage devices and data loss in a data storage system |
EP1533702A4 (en) | 2002-08-29 | 2007-05-23 | Matsushita Electric Ind Co Ltd | SEMICONDUCTOR MEMORY AND METHOD FOR RECORDING DATA IN A FLASH MEMORY |
US20040153844A1 (en) | 2002-10-28 | 2004-08-05 | Gautam Ghose | Failure analysis method and system for storage area networks |
US6831865B2 (en) | 2002-10-28 | 2004-12-14 | Sandisk Corporation | Maintaining erase counts in non-volatile storage systems |
US7072905B2 (en) | 2002-12-06 | 2006-07-04 | Sun Microsystems, Inc. | Better placement of objects reachable from outside a generation managed by the train algorithm |
US7181580B2 (en) | 2003-03-27 | 2007-02-20 | International Business Machines Corporation | Secure pointers |
US7809252B2 (en) | 2003-04-09 | 2010-10-05 | Corel Inc. | Systems and methods for caching multimedia data |
US7437530B1 (en) | 2003-04-24 | 2008-10-14 | Network Appliance, Inc. | System and method for mapping file block numbers to logical block addresses |
US7434097B2 (en) | 2003-06-05 | 2008-10-07 | Copan System, Inc. | Method and apparatus for efficient fault-tolerant disk drive replacement in raid storage systems |
US7089272B1 (en) | 2003-06-18 | 2006-08-08 | Sun Microsystems, Inc. | Specializing write-barriers for objects in a garbage collected heap |
US7434214B2 (en) | 2004-01-21 | 2008-10-07 | International Business Machines Corporation | Method for determining a close approximate benefit of reducing memory footprint of a Java application |
US20050188246A1 (en) | 2004-02-25 | 2005-08-25 | Emberty Robert G. | Persistent worldwide names assigned to removable media storage |
US7120769B2 (en) * | 2004-03-08 | 2006-10-10 | Hitachi, Ltd. | Point in time remote copy for multiple sites |
US7526684B2 (en) | 2004-03-24 | 2009-04-28 | Seagate Technology Llc | Deterministic preventive recovery from a predicted failure in a distributed storage system |
JP4476683B2 (ja) | 2004-04-28 | 2010-06-09 | 株式会社日立製作所 | データ処理システム |
US7493424B1 (en) | 2004-04-30 | 2009-02-17 | Netapp, Inc. | Network storage system with shared software stack for LDMA and RDMA |
JP4392601B2 (ja) | 2004-05-07 | 2010-01-06 | パナソニック株式会社 | データアクセス装置および記録媒体 |
US8042163B1 (en) | 2004-05-20 | 2011-10-18 | Symatec Operating Corporation | Secure storage access using third party capability tokens |
US7478263B1 (en) * | 2004-06-01 | 2009-01-13 | Network Appliance, Inc. | System and method for establishing bi-directional failover in a two node cluster |
US7533292B2 (en) | 2004-07-15 | 2009-05-12 | International Business Machines Corporation | Management method for spare disk drives in a raid system |
EP1829332A2 (en) | 2004-12-15 | 2007-09-05 | Exostar Corporation | Enabling trust in a federated collaboration of networks |
US7426623B2 (en) | 2005-01-14 | 2008-09-16 | Sandisk Il Ltd | System and method for configuring flash memory partitions as super-units |
JP2006285919A (ja) | 2005-04-05 | 2006-10-19 | Hitachi Ltd | 計算機システム、計算機及びリモートコピー処理方法 |
US20060230245A1 (en) | 2005-04-08 | 2006-10-12 | Microsoft Corporation | Data storage safety indicator and expander |
US8200887B2 (en) | 2007-03-29 | 2012-06-12 | Violin Memory, Inc. | Memory management system and method |
US7689609B2 (en) | 2005-04-25 | 2010-03-30 | Netapp, Inc. | Architecture for supporting sparse volumes |
US7366825B2 (en) | 2005-04-26 | 2008-04-29 | Microsoft Corporation | NAND flash memory management |
JP4506594B2 (ja) | 2005-07-22 | 2010-07-21 | 日本電気株式会社 | 冗長パス制御方法 |
US7694082B2 (en) | 2005-07-29 | 2010-04-06 | International Business Machines Corporation | Computer program and method for managing resources in a distributed storage system |
US7617216B2 (en) | 2005-09-07 | 2009-11-10 | Emc Corporation | Metadata offload for a file server cluster |
ITVA20050061A1 (it) | 2005-11-08 | 2007-05-09 | St Microelectronics Srl | Metodo di gestione di un dispositivo di memoria non volatile e relativa memoria |
US7831783B2 (en) | 2005-12-22 | 2010-11-09 | Honeywell International Inc. | Effective wear-leveling and concurrent reclamation method for embedded linear flash file systems |
US7421552B2 (en) | 2006-03-17 | 2008-09-02 | Emc Corporation | Techniques for managing data within a data storage system utilizing a flash-based memory vault |
US7899780B1 (en) | 2006-03-30 | 2011-03-01 | Emc Corporation | Methods and apparatus for structured partitioning of management information |
US20070294564A1 (en) | 2006-04-27 | 2007-12-20 | Tim Reddin | High availability storage system |
US8266472B2 (en) | 2006-05-03 | 2012-09-11 | Cisco Technology, Inc. | Method and system to provide high availability of shared data |
US9455955B2 (en) | 2006-05-17 | 2016-09-27 | Richard Fetik | Customizable storage controller with integrated F+ storage firewall protection |
US7743239B2 (en) | 2006-06-30 | 2010-06-22 | Intel Corporation | Accelerating integrity checks of code and data stored in non-volatile memory |
US7627786B2 (en) | 2006-09-26 | 2009-12-01 | International Business Machines Corporation | Tracking error events relating to data storage drives and/or media of automated data storage library subsystems |
US8620970B2 (en) | 2006-10-03 | 2013-12-31 | Network Appliance, Inc. | Methods and apparatus for changing versions of a filesystem |
US7669029B1 (en) | 2006-11-15 | 2010-02-23 | Network Appliance, Inc. | Load balancing a data storage system |
US7710777B1 (en) | 2006-12-20 | 2010-05-04 | Marvell International Ltd. | Semi-volatile NAND flash memory |
US7640332B2 (en) | 2006-12-27 | 2009-12-29 | Hewlett-Packard Development Company, L.P. | System and method for hot deployment/redeployment in grid computing environment |
KR100923990B1 (ko) | 2007-02-13 | 2009-10-28 | 삼성전자주식회사 | 플래시 저장 장치의 특성을 기반으로 한 컴퓨팅 시스템 |
US9632870B2 (en) | 2007-03-29 | 2017-04-25 | Violin Memory, Inc. | Memory system with multiple striping of raid groups and method for performing the same |
US7996599B2 (en) | 2007-04-25 | 2011-08-09 | Apple Inc. | Command resequencing in memory operations |
US7991942B2 (en) | 2007-05-09 | 2011-08-02 | Stmicroelectronics S.R.L. | Memory block compaction method, circuit, and system in storage devices based on flash memories |
US7870360B2 (en) | 2007-09-14 | 2011-01-11 | International Business Machines Corporation | Storage area network (SAN) forecasting in a heterogeneous environment |
KR101433859B1 (ko) | 2007-10-12 | 2014-08-27 | 삼성전자주식회사 | 불휘발성 메모리 시스템 및 그것의 파일 데이터 관리 방법 |
US8271700B1 (en) | 2007-11-23 | 2012-09-18 | Pmc-Sierra Us, Inc. | Logical address direct memory access with multiple concurrent physical ports and internal switching |
US7743191B1 (en) | 2007-12-20 | 2010-06-22 | Pmc-Sierra, Inc. | On-chip shared memory based device architecture |
JP4471007B2 (ja) | 2008-02-05 | 2010-06-02 | ソニー株式会社 | 記録装置、記録装置の制御方法、記録装置の制御方法のプログラム及び記録装置の制御方法のプログラムを記録した記録媒体 |
US8949863B1 (en) | 2008-04-30 | 2015-02-03 | Netapp, Inc. | Creating environmental snapshots of storage device failure events |
JP2010018736A (ja) | 2008-07-11 | 2010-01-28 | Nitto Denko Corp | 半導体封止用エポキシ樹脂組成物およびその製法ならびにそれにより得られる半導体装置 |
US8093868B2 (en) | 2008-09-04 | 2012-01-10 | International Business Machines Corporation | In situ verification of capacitive power support |
US8086585B1 (en) | 2008-09-30 | 2011-12-27 | Emc Corporation | Access control to block storage devices for a shared disk based file system |
US9473419B2 (en) | 2008-12-22 | 2016-10-18 | Ctera Networks, Ltd. | Multi-tenant cloud storage system |
US8762642B2 (en) | 2009-01-30 | 2014-06-24 | Twinstrata Inc | System and method for secure and reliable multi-cloud data replication |
JP5218121B2 (ja) | 2009-02-06 | 2013-06-26 | 日本電気株式会社 | 情報システム及びディザスタリカバリ方法 |
JP4844639B2 (ja) | 2009-02-19 | 2011-12-28 | Tdk株式会社 | メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法 |
US9134922B2 (en) | 2009-03-12 | 2015-09-15 | Vmware, Inc. | System and method for allocating datastores for virtual machines |
KR101586047B1 (ko) | 2009-03-25 | 2016-01-18 | 삼성전자주식회사 | 불휘발성 메모리 장치 및 그것의 프로그램 방법 |
US8805953B2 (en) | 2009-04-03 | 2014-08-12 | Microsoft Corporation | Differential file and system restores from peers and the cloud |
TWI408689B (zh) | 2009-04-14 | 2013-09-11 | Jmicron Technology Corp | 存取儲存裝置的方法及相關控制電路 |
JP4874368B2 (ja) | 2009-06-22 | 2012-02-15 | 株式会社日立製作所 | フラッシュメモリを用いたストレージシステムの管理方法及び計算機 |
US7948798B1 (en) | 2009-07-22 | 2011-05-24 | Marvell International Ltd. | Mixed multi-level cell and single level cell storage device |
US8402242B2 (en) | 2009-07-29 | 2013-03-19 | International Business Machines Corporation | Write-erase endurance lifetime of memory storage devices |
US8868957B2 (en) | 2009-09-24 | 2014-10-21 | Xyratex Technology Limited | Auxiliary power supply, a method of providing power to a data storage system and a back-up power supply charging circuit |
TWI428917B (zh) | 2009-11-25 | 2014-03-01 | Silicon Motion Inc | 快閃記憶裝置、資料儲存系統、以及資料儲存系統之運作方法 |
US8250324B2 (en) | 2009-11-30 | 2012-08-21 | International Business Machines Corporation | Method to efficiently locate meta-data structures on a flash-based storage device |
US8423737B2 (en) * | 2009-12-17 | 2013-04-16 | International Business Machines Corporation | Systems and methods for virtualizing storage systems and managing data independently |
US8387136B2 (en) | 2010-01-05 | 2013-02-26 | Red Hat, Inc. | Role-based access control utilizing token profiles |
US8452932B2 (en) | 2010-01-06 | 2013-05-28 | Storsimple, Inc. | System and method for efficiently creating off-site data volume back-ups |
US20120023144A1 (en) | 2010-07-21 | 2012-01-26 | Seagate Technology Llc | Managing Wear in Flash Memory |
US20120054264A1 (en) | 2010-08-31 | 2012-03-01 | International Business Machines Corporation | Techniques for Migrating Active I/O Connections with Migrating Servers and Clients |
US8566546B1 (en) | 2010-09-27 | 2013-10-22 | Emc Corporation | Techniques for enforcing capacity restrictions of an allocation policy |
US8775868B2 (en) | 2010-09-28 | 2014-07-08 | Pure Storage, Inc. | Adaptive RAID for an SSD environment |
US8949502B2 (en) | 2010-11-18 | 2015-02-03 | Nimble Storage, Inc. | PCIe NVRAM card based on NVDIMM |
US8812860B1 (en) | 2010-12-03 | 2014-08-19 | Symantec Corporation | Systems and methods for protecting data stored on removable storage devices by requiring external user authentication |
US8438277B1 (en) * | 2010-12-08 | 2013-05-07 | Symantec Corporation | Systems and methods for preventing data inconsistency within computer clusters |
US9208071B2 (en) | 2010-12-13 | 2015-12-08 | SanDisk Technologies, Inc. | Apparatus, system, and method for accessing memory |
US8589723B2 (en) | 2010-12-22 | 2013-11-19 | Intel Corporation | Method and apparatus to provide a high availability solid state drive |
US8465332B2 (en) | 2011-01-13 | 2013-06-18 | Tyco Electronics Corporation | Contact assembly for an electrical connector |
US8578442B1 (en) | 2011-03-11 | 2013-11-05 | Symantec Corporation | Enforcing consistent enterprise and cloud security profiles |
US8738882B2 (en) | 2011-06-03 | 2014-05-27 | Apple Inc. | Pre-organization of data |
US8751463B1 (en) | 2011-06-30 | 2014-06-10 | Emc Corporation | Capacity forecasting for a deduplicating storage system |
US8769622B2 (en) | 2011-06-30 | 2014-07-01 | International Business Machines Corporation | Authentication and authorization methods for cloud computing security |
US9852017B2 (en) | 2011-07-27 | 2017-12-26 | International Business Machines Corporation | Generating dispersed storage network event records |
US8931041B1 (en) | 2011-07-29 | 2015-01-06 | Symantec Corporation | Method and system for visibility and control over access transactions between clouds using resource authorization messages |
US20130036272A1 (en) | 2011-08-02 | 2013-02-07 | Microsoft Corporation | Storage engine node for cloud-based storage |
US8527544B1 (en) | 2011-08-11 | 2013-09-03 | Pure Storage Inc. | Garbage collection in a storage system |
US9525900B2 (en) | 2011-09-15 | 2016-12-20 | Google Inc. | Video management system |
JP2013077278A (ja) | 2011-09-16 | 2013-04-25 | Toshiba Corp | メモリ・デバイス |
US9374356B2 (en) | 2011-09-29 | 2016-06-21 | Oracle International Corporation | Mobile oauth service |
EP2771802A4 (en) | 2011-10-24 | 2016-05-25 | Schneider Electric Ind Sas | SYSTEM AND METHOD FOR MANAGING INDUSTRIAL PROCESSES |
WO2013071087A1 (en) | 2011-11-09 | 2013-05-16 | Unisys Corporation | Single sign on for cloud |
US20130311434A1 (en) | 2011-11-17 | 2013-11-21 | Marc T. Jones | Method, apparatus and system for data deduplication |
US9330245B2 (en) | 2011-12-01 | 2016-05-03 | Dashlane SAS | Cloud-based data backup and sync with secure local storage of access keys |
US20130219164A1 (en) | 2011-12-29 | 2013-08-22 | Imation Corp. | Cloud-based hardware security modules |
US8613066B1 (en) | 2011-12-30 | 2013-12-17 | Amazon Technologies, Inc. | Techniques for user authentication |
US8800009B1 (en) | 2011-12-30 | 2014-08-05 | Google Inc. | Virtual machine service access |
US9423983B2 (en) | 2012-01-19 | 2016-08-23 | Syncsort Incorporated | Intelligent storage controller |
US9116812B2 (en) | 2012-01-27 | 2015-08-25 | Intelligent Intellectual Property Holdings 2 Llc | Systems and methods for a de-duplication cache |
JP2013161235A (ja) | 2012-02-03 | 2013-08-19 | Fujitsu Ltd | ストレージ装置、ストレージ装置の制御方法及びストレージ装置の制御プログラム |
US9237195B2 (en) | 2012-04-27 | 2016-01-12 | Netapp, Inc. | Virtual storage appliance gateway |
US10474584B2 (en) | 2012-04-30 | 2019-11-12 | Hewlett Packard Enterprise Development Lp | Storing cache metadata separately from integrated circuit containing cache controller |
US8832372B2 (en) | 2012-05-24 | 2014-09-09 | Netapp, Inc. | Network storage systems having clustered raids for improved redundancy and load balancing |
WO2013188382A2 (en) | 2012-06-12 | 2013-12-19 | Centurylink Intellectual Property Llc | High performance cloud storage |
WO2014007516A1 (ko) | 2012-07-02 | 2014-01-09 | 에스케이플래닛 주식회사 | 단일 인증 서비스 시스템 및 이의 운용 방법 |
US9047181B2 (en) | 2012-09-07 | 2015-06-02 | Splunk Inc. | Visualization of data from clusters |
US8769651B2 (en) | 2012-09-19 | 2014-07-01 | Secureauth Corporation | Mobile multifactor single-sign-on authentication |
WO2014051552A1 (en) | 2012-09-25 | 2014-04-03 | Empire Technology Development Llc | Limiting data usage of a device connected to the internet via tethering |
US9245144B2 (en) | 2012-09-27 | 2016-01-26 | Intel Corporation | Secure data container for web applications |
US8990905B1 (en) | 2012-09-28 | 2015-03-24 | Emc Corporation | Protected resource access control utilizing intermediate values of a hash chain |
US8990914B2 (en) | 2012-09-28 | 2015-03-24 | Intel Corporation | Device, method, and system for augmented reality security |
US8850546B1 (en) | 2012-09-30 | 2014-09-30 | Emc Corporation | Privacy-preserving user attribute release and session management |
US20140101434A1 (en) | 2012-10-04 | 2014-04-10 | Msi Security, Ltd. | Cloud-based file distribution and management using real identity authentication |
WO2014077918A1 (en) | 2012-11-19 | 2014-05-22 | Board Of Regents, The University Of Texas System | Robustness in a scalable block storage system |
US9209973B2 (en) | 2012-11-20 | 2015-12-08 | Google Inc. | Delegate authorization in cloud-based storage system |
US8997197B2 (en) | 2012-12-12 | 2015-03-31 | Citrix Systems, Inc. | Encryption-based data access management |
US9317223B2 (en) | 2012-12-17 | 2016-04-19 | International Business Machines Corporation | Method and apparatus for automated migration of data among storage centers |
US9075529B2 (en) | 2013-01-04 | 2015-07-07 | International Business Machines Corporation | Cloud based data migration and replication |
US9646039B2 (en) | 2013-01-10 | 2017-05-09 | Pure Storage, Inc. | Snapshots in a storage system |
US9052917B2 (en) | 2013-01-14 | 2015-06-09 | Lenovo (Singapore) Pte. Ltd. | Data storage for remote environment |
US9483657B2 (en) | 2013-01-14 | 2016-11-01 | Accenture Global Services Limited | Secure online distributed data storage services |
US9009526B2 (en) | 2013-01-24 | 2015-04-14 | Hewlett-Packard Development Company, L.P. | Rebuilding drive data |
US20140229654A1 (en) | 2013-02-08 | 2014-08-14 | Seagate Technology Llc | Garbage Collection with Demotion of Valid Data to a Lower Memory Tier |
US20140230017A1 (en) | 2013-02-12 | 2014-08-14 | Appsense Limited | Programmable security token |
US8902532B2 (en) | 2013-03-20 | 2014-12-02 | International Business Machines Corporation | Write avoidance areas around bad blocks on a hard disk drive platter |
GB2513377A (en) | 2013-04-25 | 2014-10-29 | Ibm | Controlling data storage in an array of storage devices |
US9317382B2 (en) | 2013-05-21 | 2016-04-19 | International Business Machines Corporation | Storage device with error recovery indication |
US10038726B2 (en) | 2013-06-12 | 2018-07-31 | Visa International Service Association | Data sensitivity based authentication and authorization |
US9124569B2 (en) | 2013-06-14 | 2015-09-01 | Microsoft Technology Licensing, Llc | User authentication in a cloud environment |
US8898346B1 (en) | 2013-06-20 | 2014-11-25 | Qlogic, Corporation | Method and system for configuring network devices |
US8984602B1 (en) | 2013-06-28 | 2015-03-17 | Emc Corporation | Protected resource access control utilizing credentials based on message authentication codes and hash chain values |
US9454423B2 (en) | 2013-09-11 | 2016-09-27 | Dell Products, Lp | SAN performance analysis tool |
US9577953B2 (en) | 2013-09-27 | 2017-02-21 | Intel Corporation | Determination of a suitable target for an initiator by a control plane processor |
US9378219B1 (en) * | 2013-09-30 | 2016-06-28 | Emc Corporation | Metro-cluster based on synchronous replication of virtualized storage processors |
US9442662B2 (en) | 2013-10-18 | 2016-09-13 | Sandisk Technologies Llc | Device and method for managing die groups |
US9519580B2 (en) | 2013-11-11 | 2016-12-13 | Globalfoundries Inc. | Load balancing logical units in an active/passive storage system |
US9619311B2 (en) | 2013-11-26 | 2017-04-11 | International Business Machines Corporation | Error identification and handling in storage area networks |
US9529546B2 (en) | 2014-01-08 | 2016-12-27 | Netapp, Inc. | Global in-line extent-based deduplication |
WO2015104833A1 (ja) * | 2014-01-10 | 2015-07-16 | 株式会社日立製作所 | 情報システム及びi/o処理方法 |
WO2015162634A1 (en) * | 2014-04-21 | 2015-10-29 | Hitachi, Ltd. | Information storage system |
US9250823B1 (en) | 2014-05-20 | 2016-02-02 | Emc Corporation | Online replacement of physical storage in a virtual storage system |
CN105830166B (zh) | 2014-06-27 | 2018-02-23 | 华为技术有限公司 | 一种控制器、闪存装置和将数据写入闪存装置的方法 |
US9516167B2 (en) | 2014-07-24 | 2016-12-06 | Genesys Telecommunications Laboratories, Inc. | Media channel management apparatus for network communications sessions |
US10204010B2 (en) | 2014-10-03 | 2019-02-12 | Commvault Systems, Inc. | Intelligent protection of off-line mail data |
US10027574B2 (en) * | 2014-12-15 | 2018-07-17 | Ciena Corporation | Redundant pathways for network elements |
JP6569476B2 (ja) | 2014-12-19 | 2019-09-04 | 富士通株式会社 | ストレージ装置、ストレージシステムおよびストレージ制御プログラム |
US9912748B2 (en) * | 2015-01-12 | 2018-03-06 | Strato Scale Ltd. | Synchronization of snapshots in a distributed storage system |
US10459805B2 (en) * | 2015-04-03 | 2019-10-29 | Oath Inc. | Method and system for data recovery in a data system |
US9521200B1 (en) | 2015-05-26 | 2016-12-13 | Pure Storage, Inc. | Locally providing cloud storage array services |
US9716755B2 (en) | 2015-05-26 | 2017-07-25 | Pure Storage, Inc. | Providing cloud storage array services by a local storage array in a data center |
US10021170B2 (en) | 2015-05-29 | 2018-07-10 | Pure Storage, Inc. | Managing a storage array using client-side services |
US9300660B1 (en) | 2015-05-29 | 2016-03-29 | Pure Storage, Inc. | Providing authorization and authentication in a cloud for a user of a storage array |
US20160350009A1 (en) | 2015-05-29 | 2016-12-01 | Pure Storage, Inc. | Buffering data to be written to an array of non-volatile storage devices |
US9444822B1 (en) | 2015-05-29 | 2016-09-13 | Pure Storage, Inc. | Storage array access control from cloud-based user authorization and authentication |
US20170149883A1 (en) * | 2015-11-20 | 2017-05-25 | Datadirect Networks, Inc. | Data replication in a data storage system having a disjointed network |
US9917896B2 (en) * | 2015-11-27 | 2018-03-13 | Netapp Inc. | Synchronous replication for storage area network protocol storage |
US10095428B1 (en) * | 2016-03-30 | 2018-10-09 | EMC IP Holding Company LLC | Live migration of a tree of replicas in a storage system |
US9507532B1 (en) | 2016-05-20 | 2016-11-29 | Pure Storage, Inc. | Migrating data in a storage array that includes a plurality of storage devices and a plurality of write buffer devices |
US10503427B2 (en) | 2017-03-10 | 2019-12-10 | Pure Storage, Inc. | Synchronously replicating datasets and other managed objects to cloud-based storage systems |
-
2017
- 2017-12-14 US US15/842,850 patent/US10503427B2/en active Active
-
2018
- 2018-01-31 AU AU2018230871A patent/AU2018230871A1/en not_active Abandoned
- 2018-01-31 CN CN201880017374.0A patent/CN110392876B/zh active Active
- 2018-01-31 EP EP21191545.9A patent/EP3961365A1/en active Pending
- 2018-01-31 EP EP18705275.8A patent/EP3414653A1/en not_active Ceased
- 2018-01-31 CA CA3054040A patent/CA3054040A1/en active Pending
- 2018-01-31 WO PCT/US2018/016125 patent/WO2018164782A1/en active Application Filing
- 2018-01-31 JP JP2019548937A patent/JP7086093B2/ja active Active
-
2019
- 2019-10-23 US US16/661,724 patent/US11086555B1/en active Active
-
2022
- 2022-06-07 JP JP2022092451A patent/JP7419439B2/ja active Active
- 2022-11-09 AU AU2022268336A patent/AU2022268336A1/en active Pending
-
2024
- 2024-01-10 JP JP2024001666A patent/JP2024041875A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462545A (zh) * | 2014-03-31 | 2017-02-22 | 亚马逊科技公司 | 可缩放文件存储服务 |
WO2016004120A2 (en) * | 2014-07-02 | 2016-01-07 | Hedvig, Inc. | Storage system with virtual disks |
WO2016100790A1 (en) * | 2014-12-19 | 2016-06-23 | Pure Storage, Inc. | Replication to the cloud |
Also Published As
Publication number | Publication date |
---|---|
WO2018164782A1 (en) | 2018-09-13 |
JP7419439B2 (ja) | 2024-01-22 |
AU2022268336A1 (en) | 2022-12-15 |
JP7086093B2 (ja) | 2022-06-17 |
CA3054040A1 (en) | 2018-09-13 |
EP3414653A1 (en) | 2018-12-19 |
US10503427B2 (en) | 2019-12-10 |
CN110392876A (zh) | 2019-10-29 |
EP3961365A1 (en) | 2022-03-02 |
AU2018230871A1 (en) | 2019-08-15 |
JP2020514902A (ja) | 2020-05-21 |
JP2024041875A (ja) | 2024-03-27 |
JP2022122993A (ja) | 2022-08-23 |
US11086555B1 (en) | 2021-08-10 |
US20180260125A1 (en) | 2018-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110392876B (zh) | 用于将数据集和其他受管理对象同步地复制到基于云的存储系统的方法 | |
US11716385B2 (en) | Utilizing cloud-based storage systems to support synchronous replication of a dataset | |
US11941279B2 (en) | Data path virtualization | |
US11757795B2 (en) | Resolving mediator unavailability | |
US11675520B2 (en) | Application replication among storage systems synchronously replicating a dataset | |
US11882179B2 (en) | Supporting multiple replication schemes across distinct network layers | |
US20220263897A1 (en) | Replicating Multiple Storage Systems Utilizing Coordinated Snapshots | |
US11789638B2 (en) | Continuing replication during storage system transportation | |
EP4204941A1 (en) | Data path virtualization | |
US20230353635A1 (en) | Replication Utilizing Cloud-Based Storage Systems | |
US11803453B1 (en) | Using host connectivity states to avoid queuing I/O requests | |
WO2022159157A1 (en) | Application replication among storage systems synchronously replicating a dataset |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |