iCMS负载均衡&冗余&热备设计
1 动态负载分配设计
为了使整个ICMS系统能高效的运行,需要对整个系统的资源进行统一管理和分配,以便达到以最小的资源消息,稳定高效的完成各项功能的目的。在此基础上,我们提出了动态进行负载分配的方案。
2.1 媒体和设备负载分配
2.1.1 基本原则
1)负载管理的基本单位选择为子设备。出于性能上的考虑,需要保证同一个设备只被一个iSwitch打开,则当某个通道有负载请求的时候,优先选择已经被打开的设备(设备多次打开会造成设备的性能下降/有些设备的连接数是有限的,连接过多的情况下新的连接就会失败)。
2)为了达到统一管理的目的,所有的设备打开由MC负责,iSwitch不主动打开设备,只有iMC分配设备相关的功能的时候,iSwitch才打开相应设备。
3)iSwitch会定时关闭打开后长期不使用的设备。关闭设备信息也在定时发送的负载信息里一起发送。
4)iMC的负载分配不跨域,不跨集群。集群内部的设备,只分配到本集群的iSwitch。
2.1.2 负载计算说明
1)每个iSwitch定时向iMC发送负载信息,包括已经打开的子设备数目,设备列表,子设备列表,子设备和设备对应关系,当前iSwitch负载总数。间隔保持原来的20秒。
2)iMC 需要维持两个关系来计算负载。
一是,需要维持一个已打开设备和子设备的一对多的映射表
二是,需要维持一个每一个iSwich的总负载和打开的子设备列表。
(这里需要注意的是,为了避免出现关闭设备和打开设备时间上不一致的情况,iMC对每个子设备维护一个关闭标识,默认置0,第一次收到iSwitch负载信息中,如果关闭了该设备则置未1,这时候不真正删除,直到第二次收到负载中该设备也关闭了,才删除。如果这时候设备又被打开了,则重新将标识置为0)
3)当Monitor/Manage/Alarm向iMC请求iSwitch地址的时候,iMC需要分配负载。
4) 分配规则:
步骤一:首先判断请求的功能类型,如果是 “实时监看,计划录像,语音对讲,报警
预录,报警录像,报警抓帧”。则继续进行下一步,如果不是则跳到第四步。
步骤二:判断请求的子设备是否已打开,如果已经打开则直接分配打开了该子设备的iSwitch。如果该没有打开则进行下一步。
步骤三:判断该子设备所对应的设备是否打开,如果设备已经打开,并且没有超过最大负载,则分配打开了该设备的iSwitch,否则进行下一步。如果对应设备没有打开则进行下一步。
步骤四:从当前在线iSwitch中找一个总负载最小的分配。
5)iMC将分配的iSwitch地址和端口发送到Monitor/Manage/Alarm,如果分配失败则返回信令里说明原因。
2.1.3 异常处理
1)如果iSwitch关闭/宕机,对iMC的负载没有影响。该iSwitch重启之后,将当前未执行完的计划任务发送给iMC(信令待定),iMC查询数据库,比较计划任务后重新进行分配。
2)如果iMC关闭/宕机,当iMC重启好的时候,iSwitch登陆,将当前未执行完的计划任务发送给iMC(信令待定),iMC从数据库读取iMC关闭/宕机的时间开始的所有计划录像,然后和iSwitch发送的相比较,只要是结束时间大于当前时间和大于iSwitch未执行的结束时间的任务,则进行分配。
2.2 报警设备分配
2.2.1基本原则
1) 报警设备分配的基本单位为设备,包括IPC/DVS/DVR/NVR/门禁/报警主机等。
2)分配由Alarm进行统一管理,各集群的设备平均分配到集群内的iSwitch。
3)报警设备分配和其他负载不干涉,独立计算
2.2.2 流程说明
1)Alarm初始化的时候,从数据库获取全部的设备列表。
2)当iSwitch登录的时候,发送自己能支持的报警设备最大数目。
3)当iSwitch登录的时候,Alarm根据iSwitch数目,在不超出每个iSwitch报警设备最大数目的情况下,将设备平均分配,发送给每个iSwitch。如果平均分配都还超出最大支持数目,则将这些设备保留。
4)iSwitch收到设备分配通知的时候,更新自己的设备列表。
5)iSwitch退出/断线的时候,在不超出每个iSwitch报警设备最大数目的情况下,Alarm将该iSwitch所属集群的设备平均分配给剩下的iSwitch,iSwitch收到设备分配通知,更新自己的设备列表。如果有多余的设备,则将这些设备保留。
6)当用户增加/删除设备的时候,Alarm更新集群设备信息,并重新分配该集群的设备。(这儿需要设备更新通知加上增加设备的集群号)
7)Alarm在进行设备重分配的时候尽量保持各个iSwitch原来的设备分配列表。
2.3 存储负载分配
2.4.1基本原则
1) 存储分配的对象为磁盘,包括本地磁盘和网络磁盘。
2)总体策略在Manage上配置。
3)目前只有在录像/上载/迁移的时候会涉及存储的负载。
4)存储的分配由iSwitch执行。
2.4.2 流程说明
1) 首先在iManage上,用户可以选择本地磁盘或网络磁盘作为一个存储区域。
2) 用户可以在iManage上选择每个子设备对应的存储区域(可能包括多个盘)
3)当用户请求录像/上载/迁移的时候,iSwitch根据数据库的设置进行判断,如果只有一个盘,那么就直接用这个盘
4)一子设备分配的磁盘存储空间中,如果某一个磁盘容量已经无可用空间或可用空间小于一定的数则在分配存储负载时忽略此存储空间。
5) 在同时存在可写的网络盘和本地盘的情况下,优先选择本地盘。
6)如果该存在多个可写的本地盘,则将存储任务平均分配到多个盘。
2 冗余服务器设计
2.1 系统说明
1)对于iSwitch来说,并不适合主从那种一对一的备份,而是采用N+X的备份方式.
2)冗余服务器和正常的iSwitch服务器完全一样,只是在数据库中用一个字段标识。该标识在添加冗余服务器的时候由Manage配置,之后由iMC维护。
3)当某个iSwitch退出/宕机则由冗余服务器接替该iSwitch工作。而宕机的iSwitch重新启动后,作为新的冗余服务器。
4)冗余服务器R需要接替宕机服务器的工作包括:实时流,点播,计划任务。
2.2 冗余服务器切换流程描述
1) iMC保存每个iSwitch当前的负载状态,任务状态。