本发明涉及系统双机热备技术,具体涉及ac双机热备技术。
背景技术:
双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(active-standby方式)和双主机方式(active-active方式)。
主-备方式即指的是一台服务器处于某种业务的激活状态(即active状态),另一台服务器处于该业务的备用状态(即standby状态)。
而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即active-standby和standby-active状态)。
现有的ac双机热备方案中,仅能够实现一台ac使用一个vrrp组,无法对应多vrrp组,使得热备无法实现多组热备的功能,无法实现利用vrrp多组的优势。
技术实现要素:
针对现有ac双机热备技术所存在的问题,需要一种新的ac双机热备方案。
为此,本发明所要解决的技术问题是提供一种hsb备份系统及基于二层组网vrrp协议的ac双机热备方法,实现一台ac对应多vrrp组,实现高可靠性的ac双机热备。
为了解决上述技术问题,本发明提供的hsb备份系统,包括:
hsbservice(热备份服务)模块,用于统一管理ac上的备份策略,为应用程序的主备同步数据提供通道、缓存服务;
hsbgroup(热备份组)模块,提供相应的备份策略组,每个备份策略组内具有相同的备份策略;
hsb(热备控制库)模块,内嵌在应用程序内,建立备份通道到其他ac,进行批量备份或/和实时备份。
进一步的,所述热备份服务模块可对外关心vrrp的主备切换动作,以整合本ac与主备相关的所有状态、动作、数据。
进一步的,所述热备份服务模块在进程空间,通过socket通道,与其他应用模块或者内核模块,建立通信;同时为各模块当前的热备状态、热备数据做缓存,并且通知给其他热备组内的ac的热备份服务模块,以建立不同ac间,各应用模块的交互通道。
进一步的,所述热备份服务模块通过读取热备份组模块对应的acip地址,同时针对所有ac,都建立控制通道,该控制通道中交互本地所有的热备控制库模块的状态、端口号。
进一步的,所述热备份组模块进行vrrp实例或/和双链路备份,并将vrrpgroup的所有apid通知给对应热备份组模块。
进一步的,所述热备份组模块在数据库中,存储hsb应用程序的监听端口,热备份服务模块对应应用程序的监听端口,hsb整个热备组中其他ac对应的热备份服务模块的监听端口的集合。
进一步的,所述热备份组模块主要包括groupid,{apid,...},acip;
其中,groupid、apid和acip都是32位长度整型,acip是主、备ac的ip,该条目供热备控制库模块和热备份服务模块通过sql调用。
进一步的,所述热备控制库模块用动态库,实现热备控制库模块相关接口,使得应用程序或者内核应用程序可通过该动态库,与应用程序所在ac的热备份服务模块建立联系,传递状态和数据。
进一步的,所述热备控制库模块通过udp端口号为互为热备的两ac中的每个进程之间建立同步通道。
为了解决上述技术问题,本发明提供的基于二层组网vrrp协议的ac双机热备方法,其通过绑定vrrp组和ap集合的对应关系,通过vrrp的主备状态,为ac热备提供主备依据;通过多组的vrrp为ac热备提供多组热备。
进一步的,所述ac双机热备方法包括:
主备协商;由热备份组模块通过vrrp或者双链路capwap协议进行主备协商;
主备切换通知;在主备切换以后,通过热备份服务模块通知热备控制库模块,再由热备控制库模块通知各模块,回调应用程序回调函数,以使得应用程序能够得到当前数据对应的热备份组模块主备切换消息;
数据同步;通过热备控制库模块建立的备份通道进行数据同步。
进一步的,互为热备的两ac之间,对ap上线、ap离线、终端上线、终端认证、终端离线、数据库同步、主备切换事件引起的状态变换进行同步。
本发明提供的方案能够有效解决ac双机热备问题,其通过hsb模块来统一管理ac上的备份策略,并提供给各模块的各种接口、服务,建立备份通道到其他ac。
本发明提供的双机热备方案可以防范由于单个设备故障所引起的服务器中断,避免了单点故障引起整网业务中断。
本发明提供的双机热备方案价格实惠,多部署一套冗余网络,双机热备方案需要将主控设备冗余或者负载均衡,成本要便宜的多。
本发明提供的双机热备方案可以在很远的距离实施热备,两台服务设备是不会受到电缆长度的限制的,这样可以让服务器更具备灵活性,并且能够更好的提高安全性。
附图说明
以下结合附图和具体实施方式来进一步说明本发明。
图1为本发明中hsb备份系统的逻辑框图;
图2为本发明中ac双机热备的基本原理图;
图3为本发明中ac双机热备模块在ac系统中的关系图;
图4为本发明中进行ac主备切换的流程图;
图5为本发明中进行vrrp热备启动的流程图;
图6为本发明中hsbgroup建立ap关联的流程图;
图7为本发明中各模块热备的流程图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
热备是为了能够完成两个任务:基于热备的负载均衡和主备冗余。以便在一个模块工作不正常,能够直接切换到相应的冗余模块继续工作。
这里的冗余模块一般不在同一台物理机上,当然也不排除在同一台物理机上的可行性。
常规的备份三种形式:1+1热备、多机负载均衡、n+1冷备。
为了能够很好的解决现有技术所存在的问题,本方案提供的热备方案,进行数据库静态配置和各模块起效配置,在配置时需要考虑配置同步,以能够独立出ap的配置。
同时,本方案提供的热备方案能够兼容vrrp热备、双链路热备、ac集群、应用集群、n+1冷备份的逻辑需求,由此来有效解决现有应用模块异常、设备整机异常、网络异常等问题。
参见图1,其所示为本方案提供的hsb备份系统的组成逻辑框图。
由图可知,本hsb备份系统主要由hsbservice(hotstandbyservice,热备份服务)、hsbgroup(hotstandbygroup,热备份组)以及hsb(应用程序内嵌热备控制库)相互配合构成。
hsbservice:负责统一管理ac上的备份策略。
该hsbservice为应用程序的主备同步数据提供通道、缓存服务。同时可以对外关心vrrp的主备切换等动作,从而实现可以整合本ac与主备相关的所有状态、动作、数据。
hsbgroup:提供备份策略组,每个组内的备份策略是相同的。用于进行vrrp实例或/和双链路备份,并将vrrpgroup中的所有apid通知给对应hsb。
hsb:建立备份通道进行批量备份或/和实时备份。
该hsb提供给各进程模块的各种接口、服务,并且建立备份通道到其他ac。
基于该hsb备份系统进行ac双机热备配置时,应用分布式通道使得每个进程模块都有自己的通道与对端ac的进程模块连通,使得模块间进行同步时的效率最高,且模块间耦合性最小。
这里的通道之间通过udp端口号建立,建立之前由hsbservice来对端口号来统一规划。
另外,基于该hsb备份系统进行ac双机热备配置时,需要同步状态的事件包括如下:
1.ap上线(非hsb通知);
2.ap离线(非hsb通知);
3.终端上线(非hsb通知);
4.终端认证(非hsb通知);
5.终端离线(非hsb通知);
6.数据库同步;
7.主备切换。
据此构成的hsb备份方案可很好的实现在负载均衡时,逻辑上区分互为主备,多组的区分;即如果热备分为多组热备,即有ap集合a和b,他们分别在ac1和ac2上上线,同时又互相作为备份ac,那么即完成了负载均衡的功能,又可以互为主备。
以下具体说明一下,基于上述的hsb备份系统来进行ac双机热备的实现方案。
参见图2,基于hsb备份系统来进行ac双机热备配置时,热备内部模块之间相互的逻辑关系图。
由图可知,本ac双机热备主要由hsbservice、hsbgroup、hsb三个热备模块来配合实现。
其中的hsbservice负责ac集群,热备分为多组热备,将多组热备涉及的所有ac,称为ac集群,即有ap集合a和b,他们分别在ac1和ac2上上线,同时又互相作为备份ac,那么即完成了负载均衡的功能,又可以互为主备;而hsbservice用来协调各个主备组之间的关系。
hsbservice具体用来统一管理热备数据,一台设备内运行一个hsbservice进程。
hsbservice首先需要从配置中读取hsbgroup对应的acip地址,针对所有ac,建立相应的控制通道。该控制通道中交互本地所有的hsb的状态、端口号信息,由此来帮助本机的hsb找到对端的hsb端口号,以便hsb建立通信隧道(即同步通道或备份通道)。
hsbgroup负责vrrp实例和双链路备份,并将group的所有apid通知给对应hsb。
在数据库中,存储hsb应用程序的监听端口,hsbservice对应应用程序的监听端口,hsb(热备)整个热备组中其他ac对应的hsbservice的监听端口的集合。
该hsbgroup是热备的组织结构配置,存在数据库中。其主要包括groupid,{apid,...},acip。
其中,groupid、apid和acip都是32位长度整型,acip是主、备ac的ip,该条目供hsb和hsbservice通过sql调用。
hsb负责批量备份和实时备份。
本方案利用动态库来实现hsb相关接口,从而使得应用程序或者内核应用程序能够通过这套动态库与应用程序所在ac的hsbservice建立联系,以传递状态和数据。
hsb是热备实体,其具体进行通道建立,该通道是hsbservice建立通信通道,保持心跳、同步、通知等。
该hsb在建立通道时,需要带上当前版本,兼容的最低版本,由此实现在升级版本时,能够实现兼容性。
参见图3,其所示为基于上述方案构建的ac双机热备方案中热备模块在ac系统中的关系图。
由此,每个应用对应一个hsbsync通道,可以为集群打下基础,也可以避免socket层面的互相数据隔离。
一致性检查callback,主要是为了解决各模块的依赖关系提出的。需要流程是注册了各模块的调用顺序,在主备切换以后,按照顺序调用各模块,各模块自己按照需求,检查依赖关系,数据一致性。这里的callback是应用模块向hsb应用内嵌库,注册的回调函数,用来将热备过程中各种消息、数据传递给应用模块。
ap上线callback,通知ap上线。
备升主callback,通知各模块备升主。
主降备callback,通知各模块主降备。
同步成功callback,通知各模块同步成功。
同步失败callback,通知各模块同步失败。
批量同步信息callback,批量同步信息。
单元信息同步callback,同步单元信息。
一致性检查callback,进行一次性检查。
据此构成的ac双机热备方案中,通过主备协商、主备切换通知、数据同步这三大逻辑功能来实现ac双机热备。
1)主备协商
交给vrrp或者双链路capwap,或者其他可能的能够协商主备的协议。
在hsb系统启动后,将配置好相关ac之间的vrrp组,通过vrrp协议完成主备协商。使得hsbservice通过关心vrrp的协商结果,实现使得hsbgroup与vrrpgroup实现主备状态的完全同步。
2)主备切换通知
主备切换以后,需要通知给各模块,具有由hsbservice通知hsb,再由hsb通知各模块,回调函数。
备份系统主要关系vrrp的热备组,热备状态的切换。当vrrp的热备组处于主时,hsbservice会通知应用程序的hsb控制块,将数据开始传递给备份ac,hsb将数据传递给hsbservice后,hsbservcie通过查询hsbgroup,获取该数据应该发送给哪个ac上的hsbservice,并且发送;当vrrp的热备组切换成备时,该ac上的hsbservice会通知应用程序的hsb控制块,需要接受主组传递过来的数据。
3)数据同步
基于hsb建立的模块间的同步通道,各模块间发送需要同步的数据,并交由hsb负责封装发送。
以下说明一下据此构成的ac双机热备方案的运行过程。
一、主备切换动作
1.主ac重启;
如果发生ac重启,那么备hsb需要做如下动作:
备hsb:收取到最后一条data,如果一定时间内没有回包,或者链路断,则删除数据。
各模块需要做的动作是:备ac被通知切换之前,不做任何动作。
2.备升主;
由此,先进行备升主,在进行一致性检查,由此可提高切换效率;
其中,一致性检查由各模块自己内部考虑容错。如需要关心终端表,那么在表项有依赖的情况下,需要做数据检查,以主表为准。
备升主,需要由hsb向apcom向对应的ap发出主备倒换通知(即需要由hsbservcie,通过ac和ap之间的通信通道,一般为capwap,向ap下发备升主的通知消息),ap上各模块做一致性检查上报。
3.主降备
1)主hsbservice通知各模块hsb主降备,再由hsb通知各模块、回调函数。
2)hsb收到hsbservice的通知消息后,清空所有hsb发送队列,各模块关闭当前group的状态机。
4.数据同步
数据块同步,同步apid。
各模块的同步控制块hsb,需要将同步数据传递给hsbservice,每个数据应该都有一个同步id,这个id用来标识该控制块是属于哪个主备组的。这个id号应该选用apid,这样hsbservice可以在hsbgroup中,通过apid查到与主备组的对应关系。
全局数据,需要同步给所有相关ac,那么填写apid为0。
有如下几种情况,hsb对对应数据的处理方式不同:
1)主hsb接收到待发数据
模块将需要同步的对象号放到队列中,并标注增删改。
若参有groupid或者apid,hsb查找他们对应的ac地址和端口号(通道号)进行发包。
发包需要封装版本信息,数据块号。数据块号可以是各模块自己的链表的key。
并且返回发送结果
2)备hsb接收到待发数据
丢弃
3)主hsb接收到备发送的数据
如果是数据报文,那么丢弃报错
如果是控制报文,那么确认发送窗口
4)备hsb接收到主发送的数据
通知模块接收到了数据
通知主ac数据接收正常,返回数据块号,返回key值。
5.备份链路建立
hsbservice,hsbservice同步各种hsb之间通信的端口号给各个hsb,便于hsb之间互联。hsbservice需要将每个hsbgroup中的hsb,当做同步对象,建立同步链路。
hsb,其中需要设置hsbsync,是在hsb可以与对应的需要同步的hsb之间,建立同步链路。
6.ac主备切换-hsb
如图4所示,本方案进行ac主备切换的流程如下:
ap从dhcp的option43获取到ac地址和域zoneid和对应优先级,然后确定当前链路的主备状态。
capwap上线,或者叫capwap双链路主备切换。
hsbsevice查找该ap属于哪个hsbgroup,若没找到hsbgroup,则流程结束,若找到,判断当前组是vrrp还是双链路,是vrrp则从vrrp获取主备信息,是双链路则等待capwap决定主备。
然后更新hsbgroup的状态,若hsbgroup状态未改变,则流程结束,若改变则通知hsb主备状态改变。vrrp流程才会在此时触发主降备,各模块被通知主降备,各模块关闭当前group的状态机(其实实现上整个状态机应该是开着的,但是对应的group的对象不需要改变状态)。
若备升主,各模块被通知备升主,各模块状态机恢复(状态机原来应该就是开着的,只是对应的groupid的对象不需要状态改变)。
7.vrrp热备启动流程
如图5所示,本方案进行vrrp热备启动的流程如下:
ac开机后,启动vrrp,设备默认是备,最终通过vrrp报文确定当前状态。
如果在当前组中,该设备是主,通知capwap、portal、数据库等各模块当前是主;
如果在当前组中,该设备是备,获取当前组的主ac的相关版本兼容性,若不兼容则报错,兼容则通知各模块当前组,该设备是备,各模块准备接收同步数据。
8.hsbgroup建立ap关联。
如图6所示,本方案hsbgroup建立ap关联的流程如下:
vrrpgroup对应一个hsbgroup,主设备上capwap上线的ap,则为该hsbgroup的ap集合。
ap上线后,需要判断,并且将集合同步到备上。
双链路一个ap成为一个group,hsb自己同步,另外一个链路的ac需要同步这个group信息。
由此就分配ap到不同的hsbgroup组,如果是vrrp,那么应该是配置上的group写死的组id,如果是双链路,也应该是在配置的时候,将所有的ap配置到写死的单独的groupid。从而使得所有的ap都有了groupid。
9.各模块热备
如图7所示,本方案中各模块热备的流程如下:
如果hsb不使用vrrp,而使用capwap双通道,那么设置的时候,只需要将一个ap设置成一个group,每个hsb都用一个socket来监听,对应一组对端ac来发送,目的端口号都是相同的。
配置修改后,读取hsbgroup配置,计算对端ac的通道引用计数,然后启动心跳(1.上报hsbid保活信息2.上报所有hsbsync的通道状态),启动hsbsync(1.启动hsbsynclisten2.对所有对端ac的hsbsync建立连接3.一个独立线程用来收包4.运行通道状态机),初始化超时线程和等待队列,判断是否保续,若不保续,启动接收线程,进入收包流程;启动发送线程(若是不保续的,那么是单线程,若是保续的,那么可以是多线程)。
然后线程等待信号,发送封包,若不保续继续等待信号,若保续,进入收包流程。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。