一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

容器切换方法及节点设备与流程

2022-07-15 22:44:06 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别涉及一种容器切换方法及节点设备。


背景技术:

2.容器技术由于具备易部署、移植性好、易管理等优点,近年已经在计算行业得到广泛应用。随着越来越多的关键业务在容器中运行,当容器发生故障时可能导致关键业务损伤,因此如何实现容器故障的保护已经成为时下的热点问题。
3.相关技术中,在网络中部署一个负载均衡器(load balancer)以及多个容器副本。负载均衡器负责检测每个容器副本是否发生故障。当负载均衡器检测到一个容器副本发生故障时,负载均衡器不再分配业务给故障的容器副本,而是指示剩下的容器副本处理业务。
4.上述方案故障检测慢,导致故障恢复时间较长。


技术实现要素:

5.本技术实施例提供了一种容器切换方法及节点设备,有助于在容器发生故障时更快速地进行故障检测和故障恢复。所述技术方案如下。
6.第一方面,提供了一种容器切换方法。该方法将多个容器分别部署在不同节点设备上,并通过保护组将不同节点设备上的容器关联起来,一个节点设备上的容器扮演保护组中的主容器,另一个节点设备上的容器扮演保护组中的备容器。以主容器所在节点为第一节点设备,备容器所在节点为第二节点设备为例,该方法例如包括:当所述第一节点设备上部署的第一容器(保护组中的主容器)发生故障时,第一节点设备检测本地的第一容器发生故障,那么所述第一节点设备生成保护倒换消息,所述保护倒换消息包括所述保护组的组标识和第一状态信息,所述第一状态信息指示所述第一容器处于故障状态。所述第一节点设备向第二容器(备容器)所在的第二节点设备发送所述保护倒换消息。
7.上述方法中,主容器所在的节点通过在检测到主容器故障时,在保护倒换消息中携带容器处于故障的状态信息以及保护组的组标识,并将保护倒换消息发给备容器所在节点,从而向对端通告主容器故障,触发备容器所在节点将备容器切换为工作状态。相对于负载均衡器等基于集中控制进行容器保护的方案而言,由于故障检测在各个容器所在的节点设备之间进行,而不依赖于集中控制节点去探测容器故障,因此不受集中控制节点信息处理能力的限制,从而提高了故障检测的速度,进而提高了故障恢复的速度。
8.在一些实施例中,所述方法还包括:所述第一节点设备检测所述第一节点设备上部署的第一容器处于工作状态;所述第一节点设备生成状态通知消息,所述状态通知消息包括所述保护组的组标识和第二状态信息,所述第二状态信息指示所述第一容器处于工作状态;所述第一节点设备向所述第二节点设备发送所述状态通知消息。
9.通过上述方式,主容器所在的节点在检测到主容器处于工作状态时,在状态通知消息中携带容器工作的状态信息以及保护组的组标识,并将状态通知消息发给备容器所在节点,从而向对端通告主容器正常,从而让对端知道本端的状态机还存活,有助于保护组中
各容器所在节点之间的连接持续有效。
10.在一些实施例中,所述第一节点设备向所述第二节点设备发送所述状态通知消息,包括:所述第一节点设备周期性向所述第二节点设备发送所述状态通知消息。
11.在一些实施例中,所述方法还包括:所述第一节点设备根据所述第一容器的标识,从保存的保护组配置中,查询得到所述组标识,所述保护组配置包括所述第一容器的标识与所述组标识之间的对应关系。
12.通过预先配置容器的标识与组标识的对应关系,在主容器所在节点上部署多个容器的情况下,能够将各个本地容器和对应的保护组关联起来,便于容器的维护管理。
13.在一些实施例中,所述第一节点设备向第二容器所在的第二节点设备发送所述保护倒换消息,包括:所述第一节点设备根据所述组标识,从保存的保护组配置中,查询得到所述第二节点设备的互联网协议(internet protocol,ip)地址,所述保护组配置包括所述组标识与所述第二节点设备的ip地址之间的对应关系;所述第一节点设备以所述第二节点设备的ip地址为目的ip地址,发送所述保护倒换消息。
14.在一些实施例中,所述第一节点设备检测所述第一节点设备上部署的第一容器发生故障之后,所述方法还包括:所述第一节点设备拦截目的端口号为第一端口号的业务请求,所述第一端口号为所述第一容器提供服务所基于的端口号。
15.第二方面,提供了一种容器切换方法,在该方法中,第二节点设备接收来自于第一节点设备的保护倒换消息,所述保护倒换消息包括保护组的组标识和第一状态信息;响应于第一状态信息指示第一容器处于故障状态,所述第二节点设备根据所述组标识确定第二容器,所述第一容器为所述第一节点设备上部署的容器,所述第一容器为所述保护组中的主容器,所述第二容器为所述第二节点设备上部署的容器,所述第二容器为所述保护组中的备容器;所述第二节点设备将所述第二容器的状态从备用状态切换为工作状态。
16.上述方法中,备容器所在的节点通过在收到主容器所在节点发来的保护倒换消息时,根据保护倒换消息中的所述组标识确定对应的备容器,将备容器切换为工作状态,从而通过备容器代替故障的主容器继续处理业务,实现保护倒换。相对于负载均衡器等基于集中控制进行容器保护的方案而言,由于故障检测在各个容器所在的节点设备之间进行,而不依赖于集中控制节点去探测容器故障,因此不受集中控制节点信息处理能力的限制,从而提高了故障检测的速度,进而提高了故障恢复的速度。
17.在一些实施例中,所述第二节点设备将所述第二容器的状态从备用状态切换为工作状态之前,所述方法还包括:所述第二节点设备拦截目的端口号为第二端口号的业务请求,所述第二端口号为所述第二容器提供服务所基于的端口号。
18.在一些实施例中,所述第二节点设备将所述第二容器的状态从备用状态切换为工作状态之后,所述方法还包括:所述第二节点设备停止拦截目的端口号为所述第二端口号的业务请求。
19.在一些实施例中,所述第二节点设备接收来自于第一节点设备的保护倒换消息之前,所述方法包括:所述第二节点设备接收来自于第一节点设备的状态通知消息,所述状态通知消息包括所述组标识和第二状态信息;响应于所述第二状态信息指示所述第一容器处于工作状态,所述第二节点设备将所述第二容器的状态保持为备用状态。
20.在一些实施例中,所述第二节点设备根据所述组标识确定第二容器,包括:所述第
二节点设备根据所述组标识,从保存的保护组配置中,查询得到所述第二容器的标识,所述保护组配置包括所述组标识与所述第二容器的标识之间的对应关系。
21.通过这种方式,在备容器所在节点上部署多个容器的情况下,能够指明具体切换哪个容器的状态,降低了实现复杂度。
22.第三方面,提供了一种第一节点设备,该第一节点设备具有实现上述第一方面或第一方面任一种可选方式的功能。该第一节点设备包括至少一个单元,至少一个单元用于实现上述第一方面或第一方面任一种可选方式所提供的方法。在一些实施例中,第一节点设备中的单元通过软件实现,第一节点设备中的单元是程序模块。在另一些实施例中,第一节点设备中的单元通过硬件或固件实现。第三方面提供的第一节点设备的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。
23.第四方面,提供了一种第二节点设备,该第二节点设备具有实现上述第二方面或第二方面任一种可选方式的功能。该第二节点设备包括至少一个单元,至少一个单元用于实现上述第二方面或第二方面任一种可选方式所提供的方法。
24.在一些实施例中,第二节点设备中的单元通过软件实现,第二节点设备中的单元是程序模块。在另一些实施例中,第二节点设备中的单元通过硬件或固件实现。第四方面提供的第二节点设备的具体细节可参见上述第二方面或第二方面任一种可选方式,此处不再赘述。
25.第五方面,提供了一种第一节点设备,该第一节点设备包括处理器和通信接口,该处理器用于执行指令,使得该第一节点设备执行上述第一方面或第一方面任一种可选方式所提供的方法,所述通信接口用于接收或发送保护倒换消息。第五方面提供的第一节点设备的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。
26.第六方面,提供了一种第二节点设备,该第二节点设备包括处理器和通信接口,该处理器用于执行指令,使得该第二节点设备执行上述第二方面或第二方面任一种可选方式所提供的方法,所述通信接口用于接收或发送保护倒换消息。第六方面提供的第二节点设备的具体细节可参见上述第二方面或第二方面任一种可选方式,此处不再赘述。
27.第七方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令在计算机上运行时,使得计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。
28.第八方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令在计算机上运行时,使得计算机执行上述第二方面或第二方面任一种可选方式所提供的方法。
29.第九方面,提供了一种计算机程序产品,所述计算机程序产品包括一个或多个计算机程序指令,当所述计算机程序指令被计算机加载并运行时,使得所述计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。
30.第十方面,提供了一种计算机程序产品,所述计算机程序产品包括一个或多个计算机程序指令,当所述计算机程序指令被计算机加载并运行时,使得所述计算机执行上述第二方面或第二方面任一种可选方式所提供的方法。
31.第十一方面,提供了一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行该计算机指令,以执行上述第一方面及其第一方面
text transfer protocol,http)接口,这样主节点能实时地对容器进行监控。另一方面,通过节点错误探测器(node-problem-detector)检测节点在硬件、操作系统(operation system,os)、运行时(runtime)、环境等方面的错误。此外,提供容错自愈机制:如果检测到容器故障,k8s会终止该容器并基于重启策略创建一个新的容器。然而,研究中发现,这种方案检测周期普遍在秒级,容器从发生故障到完成倒换的时间普遍在10秒以上。
47.总结来看,上面介绍的两种方案都属于通过集中控制的方式进行容器保护,即由集中控制节点负责探测容器是否故障。例如,基于负载均衡的方案由负载均衡器充当集中控制节点,故障检测在负载均衡器和容器之间进行;基于故障后快速重启的方案由k8s充当集中控制节点,故障检测在k8s和pod之间进行。然而,通过集中控制的方式进行容器保护会受到集中控制节点信息处理能力的限制,导致故障检测和状态交换的速度慢,同时导致集中控制节点处理压力大。
48.而本技术实施例提供了一种容器发生故障时进行快速切换的方法,能够在避免集中控制节点处理压力大的同时,加速容器之间的保护倒换。具体地,通过建立保护组,节点设备监控本地部署的容器的状态,并在保护组之间实时交换容器的状态信息,根据容器的状态进行保护倒换。相对于上述集中控制的方式进行容器保护的方案而言,由于状态检测和状态交换的速度更快,且不受集中控制节点信息处理能力的限制,从而实现更快的倒换速度。
49.其中,保护组也称容器保护组。保护组包括多个容器。保护组中的多个容器部署在多个节点设备上。保护组中容器的角色分为主(primary)和备(secondary)。保护组中部分容器扮演主容器的角色,部分容器扮演着备容器的角色。正常情况下,主容器处于工作状态(active),用于接收业务请求并处理业务,而备容器处于备用状态(standby),不处理业务。当主容器发生故障时,主容器处于故障状态(failure),备容器从备用状态切换为工作状态,代替原来的主容器继续处理业务,使得业务倒换到备容器上。
50.下面,从应用场景、硬件装置、软件装置、方法流程等多个角度,对本技术方案进行详细介绍。
51.附图1是本技术实施例的典型应用场景的示意图。附图1所示的应用场景包括计算集群10以及客户端设备13。
52.客户端设备13包括而不限于主机、服务器、个人计算机、移动电话、笔记本电脑、ip电话、摄像头、平板电脑、可穿戴设备等。客户端设备13用于生成并向计算集群10发送业务请求。业务请求用于请求计算集群10处理业务。在实际网络系统中,可选地有大量客户端设备13,为了简明起见,附图1仅以一个客户端设备13为例进行说明。客户端设备13与计算集群10通过网络相连。
53.计算集群10用于根据来自客户端设备13的业务请求进行业务处理,将业务处理得到的结果返回给客户端设备13。计算集群10包括节点设备11以及节点设备12。节点设备11以及节点设备12为计算集群10中的计算节点。节点设备11与节点设备12是两个不同的节点设备。在实际网络系统中,可选地有大量节点设备,为了简明起见,附图1仅以两个节点设备为例进行说明。
54.节点设备11例如是计算机一类的设备。例如,节点设备11为服务器、主机、个人计算机等。节点设备11上部署有容器111。节点设备11通过容器111进行业务处理。在实际网络
系统中,一个节点设备上可选地部署有大量容器,为了简明起见,附图1仅以一个节点设备上部署一个容器为例进行说明。
55.节点设备12与节点设备11具有相同或不同的类型。节点设备11与节点设备12通过网络相连。在一些实施例中,节点设备11为主容器(如容器111)所在节点,节点设备12为备容器(如容器121)所在节点。
56.在一些实施例中,容器111与容器121具有主备份的关系,容器111充当主容器,容器121充当备容器,容器121保护容器111。主备份是指正常情况下仅由主容器处理业务,备容器空闲;当主容器故障时,备容器切换为主容器,接替主容器处理业务。
57.节点设备11与节点设备12之间的网络,或者客户端设备13与计算集群10之间的网络例如为传输控制协议(transmission control protocol,tcp)或用户数据报协议(user datagram protocol,udp)或互联网协议(internet protocol,ip)网络或者二层网络(如以太网)。节点设备11与节点设备12网络相连的方式,或者客户端设备13与计算集群10网络相连的方式包括而不限于直连或者通过至少一个网络设备相连。网络设备包括而不限于网关设备、路由器、交换机、防火墙等等。
58.下面结合附图2对本技术实施例提供的容器切换方法进行介绍。
59.请参照附图2,附图2是本技术实施例提供的容器切换方法200的流程图,方法200包括以下步骤s201至步骤s206。
60.本技术实施例为了区分不同的节点设备,用“第一节点设备”、“第二节点设备”描述多个不同的节点设备。可选地,结合附图1来看,方法200中的第一节点设备是附图1中的节点设备11,方法200中的第二节点设备是附图1中的节点设备12。
61.本技术实施例为了区分不同的容器,用“第一容器”、“第二容器”描述多个不同的容器。可选地,结合附图1来看,方法200中的第一容器是附图1中的容器111,方法200中的第二容器是附图1中的容器121。
62.本实施例中,以保护组包括部署在第一节点设备上的第一容器和第二节点设备上的第二容器为例进行说明。第一容器扮演着保护组中主容器的角色。第二容器扮演着保护组中备容器的角色。第二容器用于保护第一容器。
63.步骤s201、第一节点设备检测第一节点设备上部署的第一容器发生故障。
64.一种实现方式是通过进程状态来判断容器发生故障。具体地,第一节点设备会检测第一容器对应的进程状态。如果第一容器对应的进程状态处于异常状态,第一节点设备确定第一容器发生故障。以linux为例,进程状态通常有这几种:运行(runnable,r)状态、休眠(sleeping,s)状态、停止(traced or stopped,t)状态、僵死(a defunct("zombie")process,z)状态,进程状态处于异常状态例如是进程状态为停止状态或僵死状态。
65.另一种方式是通过一个容器探针来判断容器发生故障。具体地,第一容器提供有探针接口,第一节点周期性地向探针接口发起请求,根据请求是否超市或者请求返回的状态信息来判断容器是否发生故障。
66.步骤s202、第一节点设备生成保护倒换消息。
67.保护倒换消息用于将第一节点上的主容器发生故障的消息通知到第二节点,从而触发第二节点设备将备容器(如第二容器)的状态切换为工作状态,实现保护倒换。保护倒换消息会携带两类信息。保护倒换消息携带的一类信息属于容器保护组信息,即保护组的
组标识;保护倒换消息携带的另一类信息属于容器的状态信息,具体是指示容器处于故障状态的信息,下面简称为第一状态信息。下面对保护倒换消息中的两类信息具体介绍。
68.保护组的组标识(group id)用于标识容器所属的保护组。组标识能够用来关联主备容器。具体地,主备容器所在的两个节点设备会保存同一个组标识,并且,主容器所在节点设备会保存组标识与主容器的标识之间的对应关系,备容器所在节点设备会保存组标识与备容器的标识之间的对应关系。因此,主备容器所在的两个节点设备通过交互组标识,能够将部署在两个节点设备上的主容器与备容器关联起来。比如,在本实施例中,第一节点设备与第二节点设备交互的组标识用于标识第一容器和第二容器所在的保护组,组标识能够用来关联第一容器与第二容器。
69.保护组的组标识的来源包括多种情况。在一些实施例中,组标识预先配置在主备容器所在的两个节点设备上。配置的方式包括而不限于管理员手动配置或者应用系统分配。管理员手动配置的方式例如为管理员通过命令行界面或者web界面执行配置操作,分别在第一节点设备和第二节点设备上配置组标识。应用系统分配的方式例如为应用系统为保护组分配组标识,并将分配的组标识分别下发给第一节点设备和第二节点设备。在另一些实施例中,组标识通过主备容器所在的两个节点设备进行协商确定。比如,第一节点设备和第二节点设备建立通信连接时协商出一个相同的组标识。本实施例对节点设备如何获得保护组的组标识不做限定。
70.在一些实施例中,组标识是通过查询保护组配置获得的。保护组配置是指在节点设备上保存的关于容器的保护组的配置。保护组配置包括第一容器的标识与组标识之间的对应关系。第一节点设备根据第一容器的标识,从保存的保护组配置中,查询得到组标识。
71.第一状态信息指示第一容器处于故障状态。例如,第一状态信息为container_status:failure(容器状态:故障)。
72.保护倒换消息通过同时携带组标识以及第一状态信息,有助于备容器所在节点快速进行容器切换。具体地,主容器所在节点通过在保护倒换消息中携带第一状态信息,从而将主容器发生故障通告给备容器所在节点,有助于备容器所在节点更快速地检测到主容器发生故障。主容器所在节点通过在保护倒换消息中携带组标识,从而指明具体切换哪个保护组中容器的状态,便于备容器所在节点确定对应的备容器。
73.第一容器的标识用于标识第一容器。在一些实施例中,第一容器的标识是第一节点设备为第一容器分配的。
74.步骤s203、第一节点设备向第二容器所在的第二节点设备发送保护倒换消息。
75.在一些实施例中,第一节点设备与第二节点设备预先建立保护倒换消息通道,第一节点设备通过该保护倒换消息通道向第二节点设备发送保护倒换消息。
76.在一些实施例中,主备容器所在的两个节点设备预先保存组标识与对端ip地址之间的对应关系,主备容器所在的两个节点设备使用预先保存的对端ip地址向对端发送消息。例如,第一节点设备要发送保护倒换消息时,第一节点设备根据组标识,从保存的保护组配置中,查询得到第二节点设备的ip地址;第一节点设备以第二节点设备的ip地址为目的ip地址,发送保护倒换消息,该保护倒换消息中的目的ip地址包括第二节点设备的ip地址。其中,第一节点设备保存的保护组配置包括组标识与第二节点设备的ip地址之间的对应关系。第二节点设备保存的保护组配置包括组标识与第一节点设备的ip地址之间的对应
关系。例如,一个保护组的配置中包括(group id:group id_1,primary_host:ip_1,secondary_host:ip_2),主备容器所在的两个节点设备都保存了该保护组配置。主容器所在的节点设备发现group id_1中主容器发生故障时,将group id_1和指示故障的容器的状态信息携带在保护倒换消息中,并以ip_1为源ip地址、ip_2为目的ip地址发送保护倒换消息。
77.步骤s204、第二节点设备接收来自于第一节点设备的保护倒换消息。
78.由于保护倒换消息携带了主容器故障的状态信息(即上述第一状态信息),因此第二节点设备收到第一节点设备发来的保护倒换消息后,根据保护倒换消息中的状态信息即可确定主容器发生故障,从而触发下述步骤中容器切换的流程。
79.步骤s205、响应于第一状态信息指示第一容器处于故障状态,第二节点设备根据组标识确定第二容器,第一容器为第一节点设备上部署的容器,第一容器为保护组中的主容器,第二容器为第二节点设备上部署的容器,第二容器为保护组中的备容器。
80.在一些实施例中,第二节点设备根据组标识确定第二容器,包括:第二节点设备根据组标识,从保存的保护组配置中,查询得到第二容器的标识,保护组配置包括组标识与第二容器的标识之间的对应关系。
81.第二容器的标识用于标识第二容器。在一些实施例中,第二容器的标识是第二节点设备为第二容器分配的。
82.步骤s206、第二节点设备将第二容器的状态从备用状态切换为工作状态。
83.在一些实施例中,备容器所在节点通过不再拦截发往备容器端口的业务请求,从而将备容器切换为工作状态。例如,在第二容器处于备用状态期间,如果第二节点设备监听到发往第二容器端口的业务请求,第二节点设备会拦截监听到的业务请求,不将这种业务请求转发给第二容器。当第二节点设备将第二容器的状态切换为工作状态之后,第二节点设备停止拦截发往第二容器端口的业务请求,以使第二容器根据业务请求处理业务。
84.其中,业务请求是否发往备容器端口例如通过业务请求的目的端口号确定。例如,第二节点设备预先为第二容器分配一个提供服务的端口号(以下简称为第二端口号)。第二节点设备监听到一个业务请求之后,判断业务请求的目的端口号是否为第二端口号。如果业务请求的目的端口号为第二端口号且第二容器处于备用状态,则第二节点设备拦截监听到的业务请求。如果业务请求的目的端口号为第二端口号且第二容器处于工作状态,则第二节点设备不拦截监听到的业务请求。
85.在一些实施例中,主容器发生故障后,主容器所在节点开始拦截发往主容器端口的业务请求。例如,第一节点设备检测第一节点设备上部署的第一容器发生故障之后,第一节点设备拦截目的端口号为第一端口号的业务请求,第一端口号为第一容器提供服务所基于的端口号。
86.本实施例提供的方法,主容器所在的节点通过在检测到主容器故障时,在保护倒换消息中携带容器处于故障的状态信息以及保护组的组标识,并将保护倒换消息发给备容器所在节点,从而向对端通告主容器故障,触发备容器所在节点将备容器切换为工作状态。相对于负载均衡器等基于集中控制进行容器保护的方案而言,由于故障检测在各个容器所在的节点设备之间进行,而不依赖于集中控制节点去探测容器故障,因此不受集中控制节点信息处理能力的限制,从而提高了故障检测的速度,进而提高了故障恢复的速度。
87.值得说明的一点是,上述方法200以两个容器之间的倒换流程为例进行说明,本技术实施例对保护组中容器的数量不做限定,一个保护组中包括两个容器是可选地。在另一些实施例中,一个保护组中包括两个以上的容器。比如,一个保护组包括一个主容器和n个备容器(n为大于一的正整数),当主容器故障后,n个备容器中的一个备容器切换为工作状态。
88.值得说明的一点是,上述方法200以一个保护组部署在两个节点设备为例进行说明,本技术实施例对一个保护组部署在多少个节点设备不做限定。在另一些实施例中,一个保护组部署在两个以上的节点设备上。
89.值得说明的一点是,上述方法200以一个节点设备上部署保护组中一个容器为例进行说明,本技术实施例对节点设备上部署的容器数量不做限定。在另一些实施例中,一个节点设备上部署保护组中多个容器。在一个节点设备上同时部署了多个容器的情况下,节点设备上部署的不同容器的角色可能相同,也可能不同。例如,节点设备上部署的部分容器是主容器,另一部分容器是备容器。比如可能出现这样的场景:节点设备上部署容器1和容器2,容器1是保护组1的主容器,容器2是保护组2的备容器。
90.上述方法200侧重描述主容器发生故障情况的处理流程,本实施例还提供了正常情况(主容器处于工作状态)下的处理流程,下面进行具体说明。
91.在一些实施例中,在正常情况下,主容器所在节点向备容器所在节点发送状态通知消息。主容器所在节点发送的状态通知消息用于指示主容器处于工作状态,状态通知消息包括组标识和主容器的状态信息。例如,第一节点设备检测第一节点设备上部署的第一容器处于工作状态;第一节点设备生成状态通知消息。第一节点设备向第二节点设备发送状态通知消息。其中,第一节点设备发送的状态通知消息包括保护组的组标识和第二状态信息,第二状态信息指示第一容器处于工作状态。第二节点设备接收到来自于第一节点设备的状态通知消息之后,响应于第二状态信息指示第一容器处于工作状态,第二节点设备将第二容器的状态保持为备用状态。
92.在一些实施例中,上述状态通知消息是双向传输的。即,不仅主容器所在节点向备容器所在节点发送状态通知消息,备容器所在节点也会向主容器所在节点发送状态通知消息,备容器所在节点发送的状态通知消息用于指示备容器是可用的。备容器所在节点发送的状态通知消息包括组标识和备容器的状态信息。例如,第二节点设备检测第二节点设备上部署的第二容器处于可用状态;第二节点设备生成状态通知消息。第二节点设备向第一节点设备发送状态通知消息。其中,第二节点设备发送的状态通知消息包括保护组的组标识和第三状态信息,第三状态信息指示第二容器处于可用状态。
93.在一些实施例中,状态通知消息是周期性发送的。例如,第一节点设备周期性向第二节点设备发送上述状态通知消息。第二节点设备周期性向第一节点设备发送上述状态通知消息。具体地,预先设定消息发送周期,第一节点设备和第二节点设备保存消息发送周期。第一节点设备每隔一个消息发送周期,向第二节点设备发送一次状态通知消息。第二节点设备每隔一个消息发送周期,向第一节点设备发送一次状态通知消息。通过周期性发送状态通知消息,从而让对端知道本端的状态机是存活的。
94.值得说明的一点是,上述方法200以保护倒换消息以及状态通知消息中携带一个保护组的组标识为例进行说明,本技术实施例对一个保护倒换消息或一个状态通知消息包
含多少个保护组的组标识不做限定。在另一些实施例中,一个保护倒换消息或一个状态通知消息包括两个或两个以上的保护组的组标识。如此,主容器所在节点能够一次发送多个保护组的组标识,从而批量化地通告多个保护组中主容器的状态,有助于节省网络带宽。
95.下面结合一个具体的应用场景以及两个实例,对附图2所示方法200进行说明,上述方法200中第一节点设备为以下场景和两个实例中的主容器所在节点设备31。上述方法200中第二节点设备为以下场景和两个实例中的备容器所在节点设备32。上述方法200中第一容器为以下场景和两个实例中的主容器311。上述方法200中第二容器为以下场景和两个实例中的备容器321。
96.附图3是本技术实施例的一种应用场景的示意图。附图3所示的应用场景包括主容器所在节点设备31、备容器所在节点设备32、客户端设备33以及应用程序接口(application programming interface,api)网关34。
97.节点设备31包括主容器311、容器引擎(container engine)312、物理机操作系统(host os)313以及硬件(hardware)314。
98.主容器311为节点设备31本地的容器。主容器311包括一个或多个应用(app)以及库和依赖项(bins/libs)。主容器311用于处理业务。
99.容器引擎312用于创建和管理主容器311。容器引擎312包括高可靠(high availability,ha)模块3121。
100.ha模块3121用于为节点设备31进行容器监控和保护操作。ha模块3121例如是软件。例如,ha模块3121是运行在物理机操作系统313上的程序。具体地,ha模块3121用于通过本地监控容器对应的进程状态来进行容器状态监控。例如,物理机操作系统313运行主容器311对应的进程3131,ha模块3121监控进程3131的状态从而确定主容器311的状态。其中,附图3中的pid(process identification,pid)为进程id,是容器对应的进程标识。并且,ha模块3121周期性生成并向对端ha模块3221发送主容器311的状态信息,从而将主容器311的状态通知给ha模块3221。
101.硬件314包括网卡3141。ha模块3121通过网卡3141发送容器的状态信息。具体地,ha模块3121将生成的状态信息发送给网卡3141,网卡3141将状态信息发送出去,使得状态信息到达节点设备32。
102.节点设备32包括备容器321、容器引擎322、物理机操作系统323以及硬件324。硬件324包括网卡3241。容器引擎322用于创建和管理备容器321。容器引擎322包括ha模块3221。在一些实施例中,对于关键业务容器进行冗余配置,得到主容器311和备容器321。将主容器311部署在节点设备31,将备容器321部署在节点设备32上。节点设备32中各个组件分别具有与节点设备31中对应组件类似的特征,节点设备32与节点设备31的区别将通过后文的实例一和实例二进行介绍。
103.api网关34部署在客户端设备33与节点设备31以及节点设备32之间。api网关34充当客户端设备33与节点设备31以及节点设备32之间的通信桥梁。api网关34用于转发客户端设备33与节点设备31以及节点设备32之间交互的数据。一方面,api网关34用于分发客户端设备33的业务请求。具体地,客户端设备33发送业务请求之后,api网关34接收来自于客户端设备33的业务请求。api网关34向节点设备31以及节点设备32转发业务请求,使得业务请求到达节点设备31以及节点设备32,进而到达主容器和备容器。另一方面,api网关34用
于接收来自于节点设备31或者节点设备32的业务处理结果,将业务处理结果转发给客户端设备33。
104.以上结合附图3整体性介绍了系统架构,下面对附图3中的ha模块进行具体介绍。
105.请参考附图4,附图4是本技术实施例提供的ha模块的内部结构示意图。附图4所示的ha模块例如为附图4中容器引擎312中的ha模块3121、或者容器引擎322中的ha模块3221。附图4所示的ha模块包括保护组配置、容器状态监控模块、请求拦截模块以及保护组状态机,具体参见下述(1)至(4)。
106.(1)保护组配置
107.保护组配置包含的信息如以下(1-1)至(1-5)。
108.(1-1)容器的标识(container_id)
109.容器的标识用于标识节点设备本地的容器。容器的标识例如由容器所在的节点设备分配。容器的标识用于将本地容器和保护组进行关联。具体地,保护组配置包括容器的标识与组标识之间的对应关系,使得容器的标识能够关联到组标识。例如,附图3中节点设备31上的保护组配置包括主容器311的标识。主容器311的标识由节点设备31分配。主容器311的标识用于将主容器311和主容器311所属的保护组进行关联。
110.(1-2)组标识(group_id)
111.组标识用于标识容器所在的保护组。例如,附图3中,节点设备31上的主容器311与节点设备32上的备容器321划分至同一个保护组。主容器311充当主容器。备容器321充当备容器。节点设备31以及节点设备32均配置有保护组的组标识。保护组的组标识用于关联主容器311与备容器321。
112.(1-3)远端节点ip地址(remote_host)
113.远端节点ip地址为保护组中另一个容器所在的节点设备的ip地址。例如,附图3中,节点设备31上远端节点ip地址为节点设备32的ip地址。节点设备32上远端节点ip地址为节点设备31的ip地址。
114.(1-4)消息发送周期(message_interval)
115.消息发送周期为状态通知消息或者保护倒换消息的发送周期。例如,附图3中,节点设备31根据该消息发送周期,向节点设备32周期性发送状态通知消息,节点设备32根据该消息发送周期,向节点设备31周期性发送状态通知消息。
116.(1-5)角色(role)
117.角色是指本节点设备的容器在组标识对应的保护组中的角色。例如,附图3中,节点设备31上的主容器311的角色为主,节点设备32上的备容器321的角色为备。那么,正常情况下,主容器311处于工作状态,备容器321处于备用状态,备容器321不会接收业务请求。
118.(2)容器状态监控模块
119.容器状态监控模块用于监控本地容器对应的进程状态。例如,附图3中,节点设备31上的容器状态监控模块用于监控主容器311对应的进程状态。
120.(3)请求拦截模块
121.请求拦截模块用于拦截发送到备容器的业务请求。具体地,请求拦截模块会根据本地容器的当前状态判断是否拦截发送到本地容器的业务请求。如果本地容器为工作状态,则请求拦截模块不拦截发送到该容器的业务请求;如果本地容器为备用状态,则请求拦
截模块拦截发送到该容器的业务请求。
122.(4)保护组状态机
123.保护组状态机用于在保护组间消息收发。主备容器的ha模块进行通信时,通过保护组状态机与对端交换容器状态。交换容器状态的时间周期为上述消息发送周期(message_interval)。保护倒换消息包括保护组的组标识和本地容器的状态信息。状态信息包括工作(active)、故障(failure)、备用(standby)等。
124.实例1
125.实例1是对正常情况下(主容器未发生故障)处理流程的举例说明。请参考附图3,附图3示出了实例1的交互示意图。实例1包括以下步骤1至步骤3。
126.步骤1、客户端设备33向api网关34发送业务请求。api网关34将业务请求同时分发到到主容器311和备容器321。
127.步骤2、主容器311接收业务请求,正常处理业务并返回处理结果。
128.在执行步骤2的过程中,ha模块3121监控主容器311的状态。例如,ha模块3121通过监控pid3131的进程状态从而判断主容器311是否故障。在实例1中,ha模块3121监控到pid3131的进程状态为正常,则确定主容器311正常。ha模块3121根据主容器311的状态,生成状态通知消息。ha模块3121通过网卡3141向节点设备32发送状态通知消息。ha模块3121生成的状态通知消息包括保护组的组标识、容器的标识和容器(主容器311)的状态。状态通知消息中保护组的组标识用于标识主容器311和备容器321所属的保护组。状态通知消息中容器的标识为主容器311的标识。状态通知消息中容器的状态为工作。
129.步骤3、节点设备32上ha模块3221通过网卡3241接收节点设备31发送的状态通知消息,ha模块3221根据节点设备31发送的状态通知消息确定主容器311正常。ha模块3221监听并拦截发往备容器321端口上的业务请求,这样备容器321接收不到业务请求就不做业务处理。
130.在一些实施例中,ha模块3221还负责将备容器321的状态通知给ha模块3221。例如,ha模块3221通过监控pid3231的进程状态从而判断备容器321的状态。ha模块3221根据监控的结果生成状态通知消息,ha模块3221生成的状态通知消息包括保护组的组标识、容器的标识和容器(备容器321)的状态。状态通知消息中保护组的组标识用于标识主容器311和备容器321所属的保护组。状态通知消息中容器的标识为备容器321的标识。ha模块3221通过网卡3241向节点设备31发送状态通知消息。节点设备31中网卡3141接收节点设备32发送的状态通知消息。ha模块3121从网卡3141接收状态通知消息。ha模块3121根据接收的状态通知消息确定备容器321的状态。
131.实例2
132.实例2是对主容器发生故障下处理流程的举例说明。请参考附图5,附图5示出了实例2的交互示意图。实例2包括以下步骤0至步骤5。
133.步骤0、客户端设备33向api网关34发送了业务请求。api网关34将业务请求同时分发到到主容器311和备容器321。
134.步骤1、节点设备31上ha模块3121检测到主容器311对应的进程状态异常。例如,ha模块3121通过监控pid3131检测到主容器311发生故障。
135.步骤2、节点设备31上ha模块3121将主容器311的状态更新为故障状态,并拦截api
网关34转发的、来自于客户端设备33的业务请求。
136.步骤3、节点设备31将主容器故障通知到节点设备32上ha模块3221。
137.具体地,ha模块3121生成保护倒换消息。保护倒换消息包括保护组的组标识、容器的标识和容器的状态。保护倒换消息中保护组的组标识用于标识主容器311和备容器321所属的保护组。保护倒换消息中容器的标识为主容器311的标识。保护倒换消息中容器的状态为故障。ha模块3121将保护倒换消息下发给网卡3141。网卡3141向节点设备32发送保护倒换消息。网卡3241接收网卡3141发送的保护倒换消息,将保护倒换消息上送至ha模块3221。ha模块3221接收到保护倒换消息之后,根据保护倒换消息确定主容器311发生故障,则执行下述步骤4。
138.步骤4、节点设备32上ha模块3221将备容器321的状态更新为工作状态,并不再拦截业务请求。
139.步骤5、备容器321接收并处理业务请求。
140.总结附图2、附图3以及附图5等实施例来看,本技术实施例提供了容器发生故障时进行快速检测和切换的方法,有助于实现毫秒级的容器故障保护切换,解决集中控制的方式故障检测慢、重启时间长等问题导致的故障恢复时间较长的问题。具体地,在两个不同节点设备上分别部署主容器和备容器,该两个不同节点设备之间建立保护倒换消息通道。保护倒换消息中承载容器所属的保护组的组标识和容器的状态信息。正常情况下,主容器处于工作状态,备容器处于备份状态。当主容器发生故障时,主容器所在的节点设备检测到主容器故障,则通过保护倒换消息携带的容器状态信息指明主容器故障。备容器所在的节点设备接收到指示主容器发生故障的状态信息,根据保护组的组标识确定对应的备容器,并将备容器切换为工作状态。特别地,定义了保护倒换消息的具体内容以及具体的切换动作,提高方案可用性并降低实现复杂度。
141.附图6示出了上述实施例中所涉及的节点设备的一种可能的结构示意图。附图6所示的节点设备600例如实现方法200中第一节点设备的功能,或者,节点设备600实现附图3或附图5中主节点设备31的功能。
142.请参考附图6,节点设备600包括检测单元601、生成单元602和发送单元603。节点设备600中的各个单元全部或部分地通过软件、硬件、固件或者其任意组合来实现。节点设备600中的各个单元用于执行上述方法200中第一节点设备或主节点设备31的相应功能。具体地,检测单元601用于支持节点设备600执行s201。生成单元602用于支持节点设备600执行s202。发送单元603用于支持节点设备600执行s203。可选地,生成单元602还用于支持节点设备600生成状态通知消息。发送单元603还用于支持节点设备600发送状态通知消息。可选地,节点设备600还包括存储单元和查询单元,存储单元用于支持节点设备600保存保护组配置。查询单元用于从存储单元保存的保护组配置中,查询得到组标识以及第二节点设备的ip地址。可选地,节点设备600还包括拦截单元,拦截单元用于支持节点设备600拦截业务请求。
143.本技术实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可选地有另外的划分方式。
144.在一些实施例中,节点设备600中各个单元集成在一个处理单元中。例如,节点设备600中各个单元集成在同一个芯片上。该芯片包括处理电路和与该处理电路内部连接通
信的输入接口以及输出接口。检测单元601和生成单元602通过芯片中的处理电路实现。发送单元603通过芯片中的输出接口实现。例如,该芯片通过一个或多个现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑器件(programmable logic device,pld)、控制器、状态机、门逻辑、分立硬件部件、任何其它适合的电路、或者能够执行本技术通篇所描述的各种功能的电路的任意组合实现。
145.在另一些实施例中,节点设备600各个单元单独物理存在。在另一些实施例中,节点设备600一部分单元单独物理存在,另一部分单元集成在一个单元中。例如,在一些实施例中,检测单元601、生成单元602、查询单元、拦截单元中的两项或两项以上是同一个处理单元。在一些实施例中,不同单元的集成采用硬件的形式实现,即,不同单元对应于同一个硬件。又如,不同单元的集成采用软件单元的形式实现。
146.在节点设备600中通过硬件实现的情况下,节点设备600中检测单元601、生成单元602例如通过节点设备800中处理器801实现。节点设备600中发送单元603例如通过节点设备800中的通信接口804实现。
147.在节点设备600中通过软件实现的情况下,节点设备600中各个单元例如为节点设备800中处理器801读取存储器803中存储的程序代码810后生成的软件。
148.附图7示出了上述实施例中所涉及的第二节点设备的一种可能的结构示意图。附图7所示的节点设备700例如实现方法200中第二节点设备的功能,或者,节点设备700实现附图3或附图5中备节点设备32的功能。
149.请参考附图7,节点设备700包括接收单元701、处理单元702。节点设备700中的各个单元全部或部分地通过软件、硬件、固件或者其任意组合来实现。节点设备700中的各个单元用于执行上述方法200中第二节点设备或备节点设备32的相应功能。具体地,接收单元701用于支持节点设备700执行s204。处理单元702用于支持节点设备700执行s205和s206。可选地,节点设备700还包括发送单元703,发送单元703用于支持节点设备700发送状态通知消息。可选地,接收单元701还用于支持节点设备700接收状态通知消息。处理单元702还用于支持节点设备700拦截业务请求。
150.本技术实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可选地有另外的划分方式。
151.在一些实施例中,节点设备700中各个单元集成在一个处理单元中。例如,节点设备700中各个单元集成在同一个芯片上。该芯片包括处理电路和与该处理电路内部连接通信的输入接口以及输出接口。处理单元702通过芯片中的处理电路实现。接收单元701通过芯片中的输入接口实现。发送单元703通过芯片中的输出接口实现。例如,该芯片通过一个或多个现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑器件(programmable logic device,pld)、控制器、状态机、门逻辑、分立硬件部件、任何其它适合的电路、或者能够执行本技术通篇所描述的各种功能的电路的任意组合实现。
152.在另一些实施例中,节点设备700各个单元单独物理存在。在另一些实施例中,节点设备700一部分单元单独物理存在,另一部分单元集成在一个单元中。例如,在一些实施例中,处理单元702和发送单元703是同一个单元。在另一些实施例中,处理单元702和发送单元703是不同的单元。在一些实施例中,不同单元的集成采用硬件的形式实现,即,不同单元对应于同一个硬件。又如,不同单元的集成采用软件单元的形式实现。
153.在节点设备700中通过硬件实现的情况下,节点设备700中处理单元702例如通过节点设备800中处理器801实现。
154.节点设备700中接收单元701、发送单元703例如通过节点设备800中的通信接口804实现。
155.在节点设备700中通过软件实现的情况下,节点设备700中各个单元例如为节点设备800中处理器801读取存储器803中存储的程序代码810后生成的软件。
156.以上通过节点设备600和节点设备700,从逻辑功能的角度介绍了如何实现第一节点设备或第二节点设备。以下通过节点设备800,从硬件的角度介绍如何实现第一节点设备或第二节点设备。附图8所示的节点设备800是对第一节点设备或第二节点设备的硬件结构的举例说明。
157.节点设备800对应于上述方法200中的第一节点设备或第二节点设备,节点设备800中的各硬件、模块和上述其他操作和/或功能分别为了实现方法实施例中第一节点设备或第二节点设备所实施的各种步骤和方法,关于节点设备800如何容器切换的详细流程,具体细节可参见上述方法200,为了简洁,在此不再赘述。其中,方法200的各步骤通过节点设备800处理器中的硬件的集成逻辑电路或者软件形式的指令完成。结合本技术实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块例如位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤,为避免重复,这里不再详细描述。
158.参见附图8,附图8示出了本技术一个示例性实施例提供的节点设备的结构示意图,该节点设备800例如配置为方法200中的第一节点设备或第二节点设备。该节点设备800可以是主机、服务器或个人计算机等。该节点设备800可以由一般性的总线体系结构来实现。
159.节点设备800包括至少一个处理器801、通信总线802、存储器803以及至少一个通信接口804。
160.处理器801例如是通用中央处理器(central processing unit,cpu)、网络处理器(network processer,np)、图形处理器(graphics processing unit,gpu)、神经网络处理器(neural-network processing units,npu)、数据处理单元(data processing unit,dpu)、微处理器或者一个或多个用于实现本技术方案的集成电路。例如,处理器801包括专用集成电路(application-specific integrated circuit,asic),可编程逻辑器件(programmable logic device,pld)或其组合。pld例如是复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程逻辑门阵列(field-programmable gate array,fpga)、通用阵列逻辑(generic array logic,gal)或其任意组合。
161.通信总线802用于在上述组件之间传送信息。通信总线802可以分为地址总线、数据总线、控制总线等。为便于表示,附图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
162.存储器803例如是只读存储器(read-only memory,rom)或可存储静态信息和指令的其它类型的静态存储设备,又如是随机存取存储器(random access memory,ram)或者可
存储信息和指令的其它类型的动态存储设备,又如是电可擦可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、只读光盘(compact disc read-only memory,cd-rom)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器803例如是独立存在,并通过通信总线802与处理器801相连接。存储器803也可以和处理器801集成在一起。
163.通信接口804使用任何收发器一类的装置,用于与其它设备或通信网络通信。通信接口804包括有线通信接口,还可以包括无线通信接口。其中,有线通信接口例如可以为以太网接口。以太网接口可以是光接口,电接口或其组合。无线通信接口可以为无线局域网(wireless local area networks,wlan)接口,蜂窝网络通信接口或其组合等。
164.在具体实现中,作为一种实施例,处理器801可以包括一个或多个cpu,如附图8中所示的cpu0和cpu1。
165.在具体实现中,作为一种实施例,节点设备800可以包括多个处理器,如附图8中所示的处理器801和处理器805。这些处理器中的每一个可以是一个单核处理器(single-cpu),也可以是一个多核处理器(multi-cpu)。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(如计算机程序指令)的处理核。
166.在具体实现中,作为一种实施例,节点设备800还可以包括输出设备和输入设备。输出设备和处理器801通信,可以以多种方式来显示信息。例如,输出设备可以是液晶显示器(liquid crystal display,lcd)、发光二级管(light emitting diode,led)显示设备、阴极射线管(cathode ray tube,crt)显示设备或投影仪(projector)等。输入设备和处理器801通信,可以以多种方式接收用户的输入。例如,输入设备可以是鼠标、键盘、触摸屏设备或传感设备等。
167.在一些实施例中,存储器803用于存储执行本技术方案的程序代码810,处理器801可以执行存储器803中存储的程序代码810。也即是,节点设备800可以通过处理器801以及存储器803中的程序代码810,来实现方法实施例提供的容器切换方法。
168.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
169.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本技术实施例中的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))方式或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如,软盘、磁盘、磁带)、光介质(例如,数字视频光盘
(digital video disc,dvd))、或者半导体介质(例如固态硬盘(solid state drives,ssd))等。
170.显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的范围。这样,倘若对本技术的这些修改和变型属于本技术权利要求的范围之内,则本技术也意图包括这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献