一种容器跨主机在线迁移方法、存储介质及终端设备与流程

文档序号:18463923发布日期:2019-08-17 02:17阅读:194来源:国知局
一种容器跨主机在线迁移方法、存储介质及终端设备与流程

本公开涉及一种容器跨主机在线迁移方法、存储介质及终端设备。



背景技术:

本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。

云计算作为一种新兴的计算模式,近几年受到越来越多的关注和应用,随着云服务规模的扩大,数据中心不断的扩张,为了在大规模的云平台下有效实现负载均衡,将计算资源进行合理的动态分配,在线迁移技术的应用逐步成为业界的共识和研究热点。传统模式下,云计算的核心内容是虚拟化技术,通过虚拟机来提高计算资源的利用率,而且目前虚拟机的热迁移技术也相对成熟。而随着人们对容器概念的理解不断深入,及最近几年docker的持续火热使人们对云服务的模式产生了新的思考,容器将给云带来更轻便,更灵活,更密集的服务能力,不同于传统的基于kvm的虚拟机,docker容器通过共享操作系统内核来实现计算资源的弹性分配,进一步提高了资源利用率。从操作系统的角度来看,docker容器就相当于一个个的进程组在其中运行,而正是容器与内核这种密切的关联对容器的热迁移技术提出了挑战,迁移过程中的状态信息及资源都分散在操作系统甚至内核之中,容器的热迁移也就变的更加复杂,但在云服务均衡调度的需求下,容器的热迁移技术亟待解决。

docker是一个开源的应用容器引擎,swarm是docker官方提供的一款集群管理工具,用于创建docker容器集群的工具,其主要作用是把若干台docker虚拟机抽象为一个整体,并且通过一个入口统一管理这些docker虚拟机上的各种资源。

在dockerswarm容器集群中,节点(此处指服务器宿主机)的负载随着节点上容器数量的增加,部署应用的增多,客户端访问请求的变化等因素而变化。当节点的负载过载时,节点上应用容器的资源就会变得匮乏,应用的性能也会下降,这时就需要把该节点上的容器迁移到负载轻的节点上,来实现集群的负载均衡,确保云平台上部署应用程序的可靠运行。在容器迁移期间,还要保证容器中正在运行的应用或服务不能中断。但是据发明人了解,目前没有很好的在线迁移方法可以确保容器中处于运行态的应用程序能持续对外提供服务,这就对云平台的高可用性提出了挑战。



技术实现要素:

本公开为了解决上述问题,提出了一种容器跨主机在线迁移方法、存储介质及终端设备,本公开能够在dockerswarm容器集群中,当云平台的物理节点运行过载时,根据所提出的容器迁移算法,合理的选择待迁容器和目标节点,进行容器的在线迁移,以维持集群中各个物理节点的负载均衡,在容器迁移的同时不中断容器中的服务,从而实现docker云平台资源的弹性调度。

根据一些实施例,本公开采用如下技术方案:

一种容器跨主机在线迁移方法,包括以下步骤:

对云平台各个物理节点的资源监控,设置迁移阈值作为触发容器迁移的判断条件,选择迁移代价最小的容器作为待迁容器,确定综合负载值小于设定值的物理节点,求取上述物理节点综合负载值的平均值,选择综合负载值最靠近所述平均值的物理节点作为目标节点执行迁移,直到所述某节点的综合负载值小于迁移阈值。

上述技术方案中,设置迁移阈值作为触发容器迁移的判断条件,能够保证迁移过程执行的及时性和必要性。

同时,通过合理的选择待迁容器和目标节点,进行容器的在线迁移,以维持集群中各个物理节点的负载均衡,在容器迁移的同时不中断容器中的服务,从而实现云平台资源的弹性调度。

作为进一步的限定,若执行迁移后,源节点的综合负载值仍大于设定的迁移阈值,则循环执行选择容器、目标节点和迁移步骤。

作为进一步的限定,所述综合负载值为部署了若干容器后,各节点的cpu、内存和网络带宽使用率之和的平均值。

作为进一步的限定,当某个节点在一段时间内的综合负载值大于设定的迁移阈值,则触发该节点的容器迁移。

作为进一步的限定,假设某一节点nodet上的容器需要进行迁移至目标节点noded,假设nodet中的容器总数为n,用表示节点nodet部署了第i个容器后节点nodet总的综合负载值,则表示节点nodet部署了第i个容器后nodet增加的综合负载值,用集合s表示节点nodet每部署一个新容器后节点nodet增加的综合负载值:

比较集合s中每个值的大小,找出值最小的那个假设的值最小,则需要迁移的容器为部署的第r个容器,1≤r≤n,即迁出第r个容器的代价最小。

作为进一步的限定,如果迁出容器r后节点nodet的综合负载值小于迁移阈值,则迁出完成,若迁出容器r后,节点nodet的综合负载值仍大于迁移阈值,则继续确定迁出代价最小的容器,执行迁移,直到节点nodet的综合负载值小于迁移阈值。

作为一种可实施方式,将集群中的各个物理节点按照综合负载值的大小,从小到大排列,选出前k个节点组成目标物理节点集合,求出前k个节点综合负载的平均值,构建各节点与所述平均值的差值绝对值的集合,比较集合中每个值的大小,找出值最小的数据所对应的节点为目标节点。

一种计算机可读存储介质,其中存储有多条指令,所述指令适于由终端设备的处理器加载并执行所述的一种容器跨主机在线迁移方法。

一种终端设备,包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,所述指令适于由处理器加载并执行所述的一种容器跨主机在线迁移方法。

与现有技术相比,本公开的有益效果为:

当云平台的物理节点运行过载时,根据本公开所提出的容器迁移算法,合理的选择待迁容器和目标节点,进行容器的在线迁移,以维持集群中各个物理节点的负载均衡,在容器迁移的同时不中断容器中的服务,从而实现docker云平台资源的弹性调度。

用迁移代价最小的策略来选择合适的待迁容器,尽量缩短容器的冻结时间,使得系统的停机时间最少。

附图说明

构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。

图1为dockerswarm基本架构图;

图2为容器迁移过程流程图;

图3为容器迁移原理图。

具体实施方式:

下面结合附图与实施例对本公开作进一步说明。

应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

本公开提出一种容器跨主机在线迁移算法,包括对云平台各个物理节点的资源监控,触发容器迁移条件的判断,选择合适的待迁容器,选择合适的目标节点等操作,通过容器的迁移实现云平台的负载均衡。

通过对云平台的监控获取各个物理节点的cpu,内存和网络带宽使用率等数据,从而得到每个节点的综合负载值。云平台管理员可以根据系统的情况设置迁移阈值,以提高系统的灵活性。云平台时刻监控每个物理节点的各项性能数据,在一段时间内,当某个节点的综合负载值超过迁移阈值时,该节点的容器则会因为资源匮乏导致容器内应用性能的下降,这时将会触发该节点的容器迁移。

当待迁移的节点确定后,需要从该节点选择合适的容器进行迁移,采用迁移代价最小的策略来选择合适的待迁容器,尽量缩短容器的冻结时间,使得系统的停机时间最少。

具体的,假设某一节点nodet上的容器需要进行迁移至目标节点noded,假设nodet中的容器总数为n,用表示节点nodet部署了第i个容器后节点nodet总的综合负载值,则表示节点nodet部署了第i个容器后nodet增加的综合负载值。用集合s表示节点nodet每部署一个新容器后节点nodet增加的综合负载值:

比较集合s中每个值的大小,找出值最小的那个假设的值最小,则需要迁移的容器为部署的第r个容器(1≤r≤n),即迁出第r个容器的代价最小。

待迁容器选择完毕,需要为待迁容器选择合适的目标节点,理论上说可以选择当前集群中综合负载值最小的节点作为目标节点,但为了避免某一时刻有大量的容器需要迁移至该节点,从而造成该节点的综合负载值急剧上升,采用了新的方法来选择合适的目标节点。能够有效杜绝上述隐患。

具体的,将集群中的各个物理节点按照综合负载值的大小,从小到大排列,选出前k个节点组成目标物理节点集合(k的大小根据集群的规模由云平台管理员自行设定),前k个节点的综合负载值记为wi(1≤i≤k);

求出前k个节点综合负载的平均值

令集合s={δw1,δw2,...,δwi,...,δwk};

比较集合s中每个值的大小,找出值最小的δwi,即为目标节点(如δwr的值最小,则第r个节点即为目标节点(1≤r≤k))。

目标节点选择完毕后,将待迁容器迁移至目标节点,继续监控源节点的综合负载,若仍大于迁移阈值,则继续迁移容器,否则迁移完成。

图1为基于dockerswarm容器集群基本框架图。如图1所示,这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有docker并且开启了基于http的docker应用程序接口。这个集群中有一个swarm节点管理器,用来管理集群中的容器资源。swarm节点管理器向外暴露了一个http接口,外部用户通过这个http接口来实现对集群的管理。

图2为容器迁移过程流程图。如图2所示,云平台监控每个物理节点的各项性能数据,具体步骤如下:

1.监测每个物理节点在某段时间内的综合负载值是否大于迁移阈值,是则执行3,否则执行2;

2.继续监测每个物理节点的各项性能数据;

3.该节点资源过载,触发容器迁移,通过迁出容器选择算法选择迁移代价最小的容器,进行迁移操作;

4.通过迁入节点选择算法选择合适节点进行迁移;

5.执行容器迁移操作;

6.迁移完成后,继续监控源节点的综合负载值,若小于迁移阈值则执行7,否则执行2;

7.迁移结束,维持了云平台的负载均衡。

图3为容器迁移原理图。由docker容器的特点可知,docker容器是在基于镜像的基础上建立了一层读写层,因此由同一镜像生成的容器具有相同的数据。建立私有仓库用于保存镜像。

如图3所示,node1节点上的容器正在迁移至node2节点,node1上的容器通过commit命令提交生成新的镜像,新镜像包含该容器的所有数据,通过push命令把新镜像推送到私有镜像仓库中,node2节点通过pull命令从私有镜像仓库中下拉node1节点上传的新镜像,新镜像通过run命令在node2节点上生成新的容器,新的容器恢复原容器运行的服务和设置,新容器正常运行后删除原容器,容器迁移结束。

本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

上述虽然结合附图对本公开的具体实施方式进行了描述,但并非对本公开保护范围的限制,所属领域技术人员应该明白,在本公开的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本公开的保护范围以内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1