具体实施方式
针对现有技术中存在的问题,本发明中提出一种录像数据管理方案。
图1为本发明录像数据管理系统实施例的组成结构示意图。如图1所示。主要包括:应用程序接口(API,Application Programming Interface)模块、管理服务器集群以及存储节点(VS,Video Slave),其中,管理服务器集群中包括:主管理服务器(VM-Master)以及VM,VS和VM的个数都为一个以上,通常都为多个,API模块中可包括多个API接口。
图1所示系统采用录像池技术来实现集群内部存储的虚拟化,以直写磁盘的方式完成录像数据的存储,通过VM-Master管理录像池和各VS,实现资源的分配,对外提供使用资源的API接口;并且,在实际应用中,可提供界面友好的管理程序,用户可通过互联网等随时随地查看系统的运行状态,并对系统进行简单的维护等。
具体来说,VM-Master,用于当通过API模块每接收到一条录像池创建指令时,根据录像池创建指令中携带的创建要求信息选出符合要求的VS,并通知选出的VS进行属于要创建的录像池的录像卷的创建;
相应地,VS,用于根据接收自VM-Master的通知在自身创建录像卷;
VM-Master还可进一步用于,为各录像卷分配摄像头,以便摄像头将获取到的录像数据通过API模块写入到对应的录像卷中;当任一VS发生故障时,将该发生故障的VS上的录像卷对应的摄像头切换到所选定的符合切入要求的录像卷上,继续进行录像数据的写入。
其中,VM-Master中可具体包括:管理单元和维护单元;VS中可具体包括:处理单元。为简化附图,未对管理单元、维护单元和处理单元进行图示。
管理单元用于当通过API模块每接收到一条录像池创建指令时,根据录像池创建指令中携带的创建要求信息选出符合要求的VS,并通知选出的VS进行属于要创建的录像池的录像卷的创建;并为各录像卷分配摄像头,以便摄像头将获取到的录像数据通过API模块写入到对应的录像卷中;处理单元用于根据接收自管理单元的通知在自身创建录像卷;维护单元用于当任一VS发生故障时,将该发生故障的VS上的录像卷对应的摄像头切换到所选定的符合切入要求的录像卷上,继续进行录像数据的写入。
另外,维护单元还可进一步用于,当任一VS发生压力过载时,将该VS上的录像卷对应的部分摄像头切换到所选定的符合切入要求的录像卷上;当任一录像卷发生卷压力过载和/或卷周期过载时,将该录像卷对应的部分摄像头切换到所选定的符合切入要求的录像卷上。
下面对上述相关内容分别进行详细介绍。
一)录像池的创建
为实现本发明所述方案,需要预先对各VS进行初始化,即在各VS上创建磁盘阵列(RAID,Redundant Arrays of Inexpensive Disks),并在各RAID上创建逻辑单元(LUN,Logical Unit Number)作为基本存储单元,后续涉及到的空闲容量均是以基本存储单元为单位进行统计的,如何对各VS进行初始化为现有技术。
管理单元获取接收到的录像池创建指令中携带的创建要求信息,创建要求信息中包括:要创建的录像池的类型以及要创建的录像池的容量指示信息,并根据要创建的录像池的容量指示信息确定出要创建的录像池的容量;其中,录像池的类型包括:高性能录像池、休眠录像池和备份录像池。
要创建的录像池的容量指示信息中可包括:录像数据的平均码流(设定的要创建的录像池中的录像数据的平均码流,单位为Mb/s)、录像数据的存储周期(设定的要创建的录像池中的录像数据的存储周期,单位为天)以及要创建的录像池对应的摄像头路数(设定的要创建的录像池中承载的摄像头路数)。相应地,要创建的录像池的容量=(要创建的录像池对应的摄像头路数×录像数据的平均码流×录像数据的存储周期)/8+1,其中,在计算时,录像数据的存储周期以秒为单位。
另外,在实际应用中,管理单元在接收到录像池创建指令后,通常会先确定其中携带的创建要求信息是否有效,即要创建的录像池的类型、录像数据的平均码流、录像数据的存储周期以及要创建的录像池对应的摄像头路数是否为0,如果有一个为0,则无效,如果有效,则根据要创建的录像池的容量指示信息确定出要创建的录像池的容量。之后,还可进一步确定各VS的总空闲容量是否大于或等于要创建的录像池的容量,如果是,则继续之后的处理,否则,创建录像池失败。
当要创建的录像池为高性能录像池时,管理单元将各VS按照空闲容量从小到大的顺序进行排序,并选出排序后处于前两位的VS,确定选出的两个VS的总空闲容量是否大于或等于要创建的录像池的容量,如果否,则选出排序后处于前三位的VS,确定选出的三个VS的总空闲容量是否大于或等于要创建的录像池的容量,依次类推,直到当选出的VS的总空闲容量大于或等于要创建的录像池的容量时,将要创建的录像池的容量按照各选出的VS的空闲容量之比分配给各选出的VS,并通知各选出的VS按照要创建的录像池的类型以及所分配的容量进行录像卷的创建。比如,要创建的录像池的容量为12M,选出的VS的个数为2个,其空闲容量之比为1∶2,那么,则为空闲容量较少的VS分配4M的容量,为空闲容量较多的VS分配8M的容量,4∶8=1∶2。
当要创建的录像池为休眠录像池或备份录像池时,管理单元将各VS按照空闲容量从大到小的顺序进行排序,并选出排序后处于第一位的VS,确定选出的VS的空闲容量是否大于或等于要创建的录像池的容量,如果否,则选出排序后处于前两位的VS,确定选出的两个VS的总空闲容量是否大于或等于要创建的录像池的容量,依次类推,直到当选出的VS的总空闲容量大于或等于要创建的录像池的容量时,通知各选出的VS按照要创建的录像池的类型以及所分配的容量进行录像卷的创建;其中,对于各选出的VS中未排在最后一位的各VS,其所分配的容量等于其空闲容量,对于各选出的VS中排在最后一位的VS,其所分配的容量等于要创建的录像池的容量减去各选出的VS中未排在最后一位的各VS的总空闲容量。也就是说,假设选出的VS的个数为3个,那么按照排序顺序,前两个VS中的空闲容量都将会被用于创建录像卷,只有最后一个VS中在创建完录像卷之后还可能会有空闲容量。
相应地,当要创建的录像池为高性能录像池时,处理单元将所在VS所分配的容量按照所在VS中各存在空闲容量的RAID的空闲容量之比分配给各存在空闲容量的RAID,并在各存在空闲容量的RAID上分别创建一个容量等于该RAID所分配的容量的录像卷。
当要创建的录像池为休眠录像池或备份录像池时,处理单元将所在VS中各存在空闲容量的RAID按照空闲容量从大到小的顺序进行排序,并选出排序后处于第一位的RAID,确定选出的RAID的空闲容量是否大于或等于所在VS所分配的容量,如果否,则选出排序后处于前两位的RAID,确定选出的两个RAID的总空闲容量是否大于或等于所在VS所分配的容量,依次类推,直到当选出的RAID的总空闲容量大于或等于所在VS所分配的容量时,利用各选出的RAID的总空闲容量创建一个容量等于所在VS所分配的容量的录像卷。
可以看出,对于高性能录像池,需要尽可能地增加录像卷的个数,而对于休眠录像池和备份录像池,则需要尽可能地减少录像卷的个数。
而且,一个RAID上至多只能有一个属于同一高性能录像池的录像卷,一个VS上至多只能有一个属于同一休眠录像池或同一备份录像池的录像卷。
录像池是由一个或多个录像卷组成的,管理单元可为各录像卷分别分配相应路数的摄像头,以便摄像头将获取到的录像数据通过API模块写入到对应的录像卷中。理论上,每个录像卷可被分配到的摄像头的路数=该录像卷的容量×8/该录像卷所属录像池中的录像数据的存储周期×该录像卷所属录像池中的录像数据的平均码流+1,其中,在计算时,录像数据的存储周期以秒为单位。
在实际应用中,随着系统的长期运行,即随着录像数据的不断写入,各录像卷中可用于存储录像数据的空闲容量会越来越小,如果不及时进行清理,则会影响后续录像数据的写入。为此,本发明所述方案中提出一种周期循环覆盖策略,即各VS中的处理单元可在当所在VS中的任一录像卷中的录像数据的存储周期超过该录像卷所属的录像池中的录像数据的存储周期时,删除该录像数据,从而达到用新写入的录像数据周期性地自动覆盖旧的录像数据的效果。通常,上述周期循环覆盖策略可只应用于高性能录像池和休眠录像池,备份录像池中的录像数据由于起到备份作用,因此可由用户手动删除,以确保安全。
在实际应用中,还可能会出现以下问题:由于瞬时码流变大等原因,对于某一录像卷,当有新的录像数据写入时,旧的录像数据还不能删除,但此时该录像卷中的空闲容量已不足以存储新写入的录像数据,从而发生前述的卷周期过载。
何时创建高性能录像池、何时创建休眠录像池、何时创建备份录像池、创建的不同录像池的个数和容量,以及分别将哪些不同的摄像头分配给不同的录像卷等均可根据实际需要而定。
二)当任一VS发生故障
1)当任一VS发生故障时,维护单元确定该发生故障的VS上的各录像卷分别所属的录像池,并针对确定出的每个录像池x,分别按照下述A~D所示方式进行处理。
假设该发生故障的VS上存在四个录像卷,其中的两个录像卷属于同一个录像池,另两个录像卷同属于另一个录像池,那么,可针对每个录像池(为便于表述,用录像池x来代表任一录像池),分别按照下述A~D所示方式进行处理。
A、将该发生故障的VS上属于录像池x的各录像卷对应的正在录像的摄像头路数之和作为录像池x的需要切出的摄像头路数。
B、确定从除发生故障的VS外的其它VS上存在的属于录像池x的录像卷中选出的一个或部分或全部录像卷是否满足以下条件:选出的录像卷上允许切入的摄像头路数之和大于或等于录像池x的需要切出的摄像头路数,如果是,则将录像池x的需要切出的摄像头全部切换到选出的录像卷上;否则,将录像池x的需要切出的摄像头中的N路切换到除发生故障的VS外的其它VS上存在的属于录像池x的录像卷上,N等于除发生故障的VS外的其它VS上的属于录像池x的录像卷上允许切入的摄像头路数之和。
C、针对剩余的录像池x的需要切出的摄像头,分别依次向除发生故障的VS外的存在属于录像池x的录像卷的VS发送扩卷指令,并在当每次发出扩卷指令后,如果接收到扩卷成功消息,则进一步确定扩卷后的录像卷上允许切入的摄像头路数是否大于或等于剩余的录像池x的需要切出的摄像头路数,如果是,则将剩余的录像池x的需要切出的摄像头全部切换到扩卷后的录像卷上,否则,将剩余的录像池x的需要切出的摄像头中的M路切换到扩卷后的录像卷上,M等于扩卷后的录像卷上允许切入的摄像头路数,直到不存在剩余的录像池x的需要切出的摄像头为止。
D、如果向除发生故障的VS外的存在属于录像池x的录像卷的VS均发送过扩卷指令后,仍存在剩余的录像池x的需要切出的摄像头,则根据剩余的录像池x的需要切出的摄像头路数确定出要创建的录像卷的总容量,并从各VS中选出符合要求的VS,向选出的VS发送创卷指令,将剩余的录像池x的需要切出的摄像头切换到所创建的录像卷上。
举例如下:
假设录像池x下属三个录像卷,分别为录像卷1、录像卷2和录像卷3,其中,录像卷1和录像卷2位于该发生故障的VS上,录像卷3位于一个未发生故障的VS上;并假设录像卷3允许切入的摄像头路数为三,如果录像池x的需要切出的摄像头路数为二,那么则可将录像池x的需要切出的摄像头全部切换到录像卷3上,如果录像池x的需要切出的摄像头路数为六,那么则只能将其中的三路切换到录像卷3上,剩余三路未切换;针对剩余的未切换的三路,可向录像卷3所在的VS发送扩卷指令,假设录像卷3扩卷后可切入的摄像头路数为二,则再将两路未切换的摄像头切换到录像卷3上,剩余一路未切换;针对剩余的未切换的一路,可在某一VS上创建一个新的录像卷,并将最后一路未切换的摄像头切换到新创建的录像卷上。
其中,对于每个录像卷,在未进行扩卷之前,如果该录像卷的卷压力小于或等于1,则维护单元可将以下三个值的最小值作为该录像卷上允许切入的摄像头路数:
该录像卷的容量×0.85×8/该录像卷所属录像池中的录像数据的存储周期×24×3600×该录像卷所属录像池中的录像数据的平均码流;
该录像卷所在VS上最大能承载的摄像头路数(为一个预设的恒定值)-该录像卷所在VS上当前正在录像的摄像头的路数;
该录像卷的容量×0.85×8/该录像卷所属录像池中的录像数据的存储周期×24×3600×该录像卷所属录像池中的录像数据的平均码流该录像卷上当前正在录像的摄像头的路数;
如果该录像卷的卷压力大于1,则维护单元可将以下三个值的最小值作为该录像卷上允许切入的摄像头路数:
0.8×该录像卷的最大卷压力×该录像卷上当前正在录像的摄像头的路数/该录像卷的当前卷压力-该录像卷上当前正在录像的摄像头的路数;
该录像卷所在VS上最大能承载的摄像头路数-该录像卷上当前正在录像的摄像头的路数;
该录像卷最大能承载的摄像头路数该录像卷上当前正在录像的摄像头的路数;
如果对该录像卷进行了扩卷,则维护单元可将以下两个值的最小值作为该录像卷上允许切入的摄像头路数:
该录像卷所在VS上最大能承载的摄像头路数-该录像卷所在VS上当前正在录像的摄像头的路数;
该录像卷扩卷后的容量×8/该录像卷所属录像池中的录像数据的存储周期×该录像卷所属录像池中的录像数据的平均码流-该录像卷上当前正在录像的摄像头的路数;
其中,在计算时,录像数据的存储周期以秒为单位。
2)相应地,对于处理单元,根据接收自维护单元的指令为扩卷指令或创卷指令的不同,采用不同的处理方式。
A、当接收到来自维护单元的扩卷指令时,获取其中携带的需要扩充的容量以及要扩卷的录像卷所属的录像池的类型;
如果要扩卷的录像卷所属的录像池为高性能录像池,则确定要扩卷的录像卷所在的RAID的空闲容量是否大于或等于需要扩充的容量,如果是,则按照需要扩充的容量,利用所在RAID的空闲容量对要扩卷的录像卷进行扩展容量操作,并向维护单元返回扩卷成功消息;
如果要扩卷的录像卷所属的录像池为休眠录像池或备份录像池,则确定所在VS上的各RAID的总空闲容量是否大于或等于需要扩充的容量,如果是,则按照需要扩充的容量,利用各RAID的总空闲容量对要扩卷的录像卷进行扩展容量操作,并向维护单元返回扩卷成功消息。
B、当接收到来自维护单元的创卷指令时,获取其中携带的需要创建的录像卷的总容量以及需要创建的录像卷所属的录像池的类型;
如果要创建的录像卷所属的录像池为高性能录像池,则确定所在VS上不存在与要创建的录像卷属于同一录像池的录像卷且存在空闲容量的各RAID的总空闲容量是否大于或等于需要创建的录像卷的总容量,如果是,则在所在VS上不存在与要创建的录像卷属于同一录像池的录像卷且存在空闲容量的各RAID上创建录像卷,即:按照所在VS上不存在与要创建的录像卷属于同一录像池的录像卷且存在空闲容量的各RAID的空闲容量之比,将需要创建的录像卷的总容量分配给所在VS上不存在与要创建的录像卷属于同一录像池的录像卷且存在空闲容量的各RAID,并利用空闲容量在所在VS上不存在与要创建的录像卷属于同一录像池的录像卷且存在空闲容量的各RAID上创建录像卷。
否则,进一步确定所在VS上的各RAID的总空闲容量是否大于或等于需要创建的录像卷的总容量,如果否,则创卷失败,如果是,则在所在VS上不存在与要创建的录像卷属于同一录像池的录像卷且存在空闲容量的各RAID上创建录像卷,并在创建完成后,对所在VS上存在与要创建的录像卷属于同一录像池的录像卷进行扩展容量操作,扩展的总容量等于需要创建的录像卷的总容量减去在所在VS上不存在与要创建的录像卷属于同一录像池的录像卷且存在空闲容量的各RAID上创建的录像卷的总容量。
如果要创建的录像卷所属的录像池为休眠录像池或备份录像池,则确定所在VS上的各RAID的总空闲容量是否大于或等于需要创建的录像卷的总容量,如果否,则创卷失败,如果是,则进一步确定所在VS上是否存在与要创建的录像卷属于同一录像池的录像卷,如果不存在,则按照需要创建的录像卷的总容量创建录像卷,如果存在,则对已存在的与要创建的录像卷属于同一录像池的录像卷进行扩展容量操作,扩展的总容量等于需要创建的录像卷的总容量,如何针对休眠录像池或备份录像池进行创建录像卷和扩展容量操作请参照前述相关说明,不再赘述。
三)当任一VS发生压力过载时
当任一VS发生压力过载时,维护单元确定该压力过载的VS上的每个录像卷需要切出的摄像头路数,并确定该压力过载的VS上的各录像卷分别所属的录像池,针对确定出的每个录像池y(为便于表述,用录像池y来代表确定出的任一录像池),分别按照下述A~D所示方式进行处理。
在实际应用中,当任一VS发生压力过载,且该压力过载的VS上的所有录像卷的卷压力全部过载时,该压力过载的VS上的每个录像卷上需要切出的摄像头路数=该录像卷上当前正在录像的摄像头的路数-0.8×该录像卷的最大卷压力×该录像卷上当前正在录像的摄像头的路数/该录像卷的当前卷压力。
当任一VS发生压力过载,且该压力过载的VS上只有部分录像卷的卷压力过载时,该压力过载的VS上的每个卷压力过载的录像卷上需要切出的摄像头路数=该录像卷上当前正在录像的摄像头的路数-0.8×该录像卷的最大卷压力×该录像卷上当前正在录像的摄像头的路数/该录像卷的当前卷压力;该压力过载的VS上的每个卷压力未过载的录像卷上需要切出的摄像头路数=该录像卷上当前正在录像的摄像头的路数×0.1+1。
当任一VS发生压力过载,且该压力过载的VS上的全部录像卷的卷压力均未过载时,该压力过载的VS上的每个录像卷上需要切出的摄像头路数=(该压力过载的VS上当前正在录像的摄像头的路数×0.1+1)×该录像卷上当前正在录像的摄像头的路数/该压力过载的VS上当前正在录像的摄像头的路数+1。
确定一录像卷的卷压力过载的条件是:该录像卷的当前卷压力>该录像卷的最大卷压力×85%,该录像卷的最大卷压力=该录像卷的容量/该录像卷所属录像池中的录像数据的存储周期。
如何确定VS是否压力过载为现有技术。
A、将该压力过载的VS上属于录像池y的各录像卷需要切出的摄像头路数之和作为录像池y的需要切出的摄像头路数。
B、确定从除压力过载的VS外的其它VS上的属于录像池y的录像卷中选出的一个或部分或全部录像卷是否满足以下条件:选出的录像卷上允许切入的摄像头路数之和大于或等于录像池y的需要切出的摄像头路数,如果是,则将录像池y的需要切出的摄像头全部切换到选出的录像卷上;否则,将录像池y的需要切出的摄像头中的N路切换到除压力过载的VS外的其它VS上存在的属于录像池y的录像卷上,N等于除压力过载的VS外的其它VS上的属于录像池y的录像卷上允许切入的摄像头路数之和。
C、针对剩余的录像池y的需要切出的摄像头,分别依次向除压力过载的VS外的存在属于录像池y的录像卷的VS发送扩卷指令,并在当每次发出扩卷指令后,如果接收到扩卷成功消息,则进一步确定扩卷后的录像卷上允许切入的摄像头路数是否大于或等于剩余的录像池y的需要切出的摄像头路数,如果是,则将剩余的录像池y的需要切出的摄像头全部切换到扩卷后的录像卷上,否则,将剩余的录像池y的需要切出的摄像头中的M路切换到扩卷后的录像卷上,M等于扩卷后的录像卷上允许切入的摄像头路数,直到不存在剩余的录像池y的需要切出的摄像头为止。
D、如果向除压力过载的VS外的存在属于录像池y的录像卷的VS均发送过扩卷指令后,仍存在剩余的录像池y的需要切出的摄像头,则根据剩余的录像池y的需要切出的摄像头路数确定出要创建的录像卷的总容量,并从各VS中选出符合要求的VS,向选出的VS发送创卷指令,将剩余的录像池y的需要切出的摄像头切换到所创建的录像卷上。
处理单元接收到扩卷指令和创卷指令后的处理方式以及维护单元如何确定扩卷前和扩卷后的录像卷允许切入的摄像头路数等请参照前述相关说明,不再赘述。
四)当任一录像卷z发生卷压力过载和/或卷周期过载时
当任一录像卷z发生卷压力过载和/或卷周期过载时(为便于表述,用录像卷z来代表任一卷压力过载和/或卷周期过载的录像卷),维护单元确定录像卷z需要切出的摄像头路数。
具体来说,当任一录像卷发生卷压力过载且卷周期过载时,该录像卷上需要切出的摄像头路数=该录像卷上当前正在录像的摄像头的路数-该录像卷的最大卷压力×0.8×该录像卷上当前正在录像的摄像头的路数/该录像卷的当前卷压力;当任一录像卷发生卷压力过载或卷周期过载时,该录像卷上需要切出的摄像头路数=该录像卷上当前正在录像的摄像头的路数×0.1+1。
之后,可按照下述A~C所示方式进行处理。
A、确定从与录像卷z属于同一录像池的其它录像卷中选出的一个或部分或全部录像卷是否满足以下条件:选出的录像卷上允许切入的摄像头路数之和大于或等于录像卷z需要切出的摄像头路数,如果是,则将录像卷z需要切出的摄像头全部切换到选出的录像卷上;否则,将录像卷z需要切出的摄像头中的N路切换到与录像卷z属于同一录像池的其它录像卷上,N等于与录像卷z属于同一录像池的其它录像卷上允许切入的摄像头路数之和。
B、针对剩余的录像卷z需要切出的摄像头,分别依次向录像卷z所在VS以及与录像卷z属于同一录像池的其它录像卷所在VS发送扩卷指令,并在当每次发出扩卷指令后,如果接收到扩卷成功消息,则确定扩卷后的录像卷上允许切入摄像头路数是否大于或等于剩余的录像卷z需要切出的摄像头路数,如果是,则将剩余的录像卷z需要切出的摄像头全部切换到扩卷后的录像卷上,否则,将剩余的录像卷z需要切出的摄像头中的M路切换到扩卷后的录像卷上,M等于扩卷后的录像卷上允许切入的摄像头路数,直到不存在剩余的录像卷z需要切出的摄像头为止。
C、如果向录像卷z所在VS以及与录像卷z属于同一录像池的其它录像卷所在VS均发送过扩卷指令后,仍存在剩余的录像卷z需要切出的摄像头,则根据剩余的录像卷z需要切出的摄像头路数确定出要创建的录像卷的总容量,并从各VS中选出符合要求的VS,向选出的VS发送创卷指令,将剩余的录像卷z需要切出的摄像头切换到所创建的录像卷上。
处理单元接收到扩卷指令和创卷指令后的处理方式以及维护单元如何确定扩卷前和扩卷后的录像卷允许切入的摄像头路数等请参照前述相关说明,不再赘述。
上述二)~四)所示情况触发的后续操作可统称为智能负载均衡。如果通过扩卷和创卷等处理仍不能将需要切出的摄像头全部切换到符合要求的录像卷上,还可采用其它处理方式,如增加VS等。
另外,如图1所示,本发明所述方案中还可引入第三方存储设备,第三方存储设备可挂载在存储服务器(VSS,Video Slave Server)下,对于挂载有第三方存储设备的VSS,可按照前述VS的处理方式进行处理,如进行录像卷的创建、进行周期循环覆盖以及智能负载均衡等,具体实现不再赘述。
再有,如图1所示,管理服务器集群中除了包括VM-Master外,还会包括多个VM,VM可用于存储录像数据的索引,为用户提供录像数据的查询等功能,VM的具体功能为本领域公知。如果某个VM出现故障,当API模块需要服务时,其它正常运行的VM仍可为API模块提供相应的服务,也就是说,单个VM故障不会对系统的正常运行造成影响。
再有,在实际应用中,管理服务器集群有可能会发生脑裂,图2为本发明管理服务器集群发生脑裂的示意图。脑裂是指由于网络原因或其它原因使得管理服务器集群分裂为两个以上小集群,每个小集群中的各VM通过竞争算法竞争出自己的VM-Master,并分别对外提供服务,造成的数据不一致的问题。
脑裂发生时,不同的API接口可能连接上不同小集群中的VM-Master,每个小集群分别为不同的API接口提供服务,每个小集群中的VM-Master可定时向下属各VM发送组播消息,告知各VM自己是Master,当VM-Master中的数据发生改变时,会和下属各VM进行数据同步。
当管理服务器集群恢复正常后,即各小集群之间可正常通讯时,在管理服务器集群中会存在多个VM-Master,此时每个VM-Master均会接收到其它多个VM-Master发送来的组播消息,所有VM-Master会自动取消自己的Master资格,管理服务器集群中的所有VM通过竞争算法竞争出一个新的VM-Master,该新的VM-Master与下属各VM进行数据同步,并在当数据同步完成后,对外提供服务。
新的VM-Master与下属各VM进行数据同步的方式可为:新的VM-Master通知下属各VM将各自的数据记录发送给自身,针对接收到的每条数据记录,新的VM-Master会分别检查自身的数据库,以确定自身的数据库中是否保存有与接收到的该条数据记录对应的数据记录,如果否,则将接收到的该条数据记录保存到自身的数据库中,否则,确定接收到的该条数据记录与自身数据库中保存的对应的数据记录是否存在数据字段更新,如果是,则对自身数据库中保存的对应的数据记录进行更新,否则,不作处理。
基于上述介绍,图3为本发明录像数据管理方法实施例的流程图。如图3所示,包括以下步骤:
步骤31:当通过API模块每接收到一条录像池创建指令时,VM-Master根据录像池创建指令中携带的创建要求信息选出符合要求的VS,并通知选出的VS进行属于要创建的录像池的录像卷的创建;VS根据接收自VM-Master的通知在自身创建录像卷。
步骤32:VM-Master为各录像卷分配摄像头,以便摄像头将获取到的录像数据通过API模块写入到对应的录像卷中;当任一VS发生故障时,将该发生故障的VS上的录像卷对应的摄像头切换到所选定的符合切入要求的录像卷上,继续进行录像数据的写入。
该方法还可进一步包括以下之一或任意组合:
当任一VS发生压力过载时,VM-Master将该VS上的录像卷对应的部分摄像头切换到所选定的符合切入要求的录像卷上;
当任一录像卷发生卷压力过载和/或卷周期过载时,VM-Master将该录像卷对应的部分摄像头切换到所选定的符合切入要求的录像卷上;
当任一VS确定自身一录像卷中的录像数据的存储周期超过预定时长时,删除该录像数据;
当管理服务器集群发生脑裂,分裂为两个以上小集群时,每个小集群中的VM-Master分别对外提供服务;当管理服务器集群恢复正常后,每个小集群中的VM-Master分别取消自身的Master资格,并通过竞争算法竞争出一个新的VM-Master,该新的VM-Master与管理服务器集群中的各非VM-Master(各VM)进行数据同步,并在当数据同步完成后,对外提供服务。
图3所示方法实施例的具体工作流程请参照前述系统实施例中的相应说明,此处不再赘述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。