Docker容器中检查点和恢复点的功能实现方法及系统与流程

文档序号:19809120发布日期:2020-01-31 18:03阅读:1400来源:国知局
Docker容器中检查点和恢复点的功能实现方法及系统与流程

本发明涉及虚拟机数据恢复技术领域,具体涉及一种docker容器中检查点和恢复点的功能实现方法及系统。



背景技术:

云计算是一种新兴的共享基础架构的方法,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和各种软件服务。云计算的底层需要虚拟化技术支持,比较出名的有vmware公司的虚拟化技术,它提供云计算和硬件虚拟化的软件和服务,产品有vmwareworkstation、vmwareserver,允许用户创建和运行多个x86虚拟机,虚拟机可以暂停、恢复运行。

docker技术基于云计算,是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在linux操作系统上,提供一个额外的软件抽象层,和操作系统层虚拟化的自动管理机制。docker基于linux内核的cgroup、namespace、以及aufs类的unionfs等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得docker技术比虚拟机技术更为轻便、快捷,docker和检查点、还原点的关系如图1所示。

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便,占用空间更小,有的容器只有几十m,传统虚拟机空间需要gb,在一个安装几十个虚拟机的计算机上可以安装上千个容器。

在虚拟机的使用中,可以将虚拟机暂停运行,创建快照,预览一个快照,决定是否把系统恢复到创建这个快照时的状态,快照就是一个存储功能,它允许管理员为一个虚拟机的操作系统、应用程序和数据在特定时间创建一个恢复点。快照会把虚拟机当前的磁盘镜像保存为一个cow卷,并可以在以后把虚拟机恢复到虚拟机创建快照时的状态。而容器快照的检查点,类似虚拟机的快照功能,恢复点恢复到容器运行时的状态。

目前在windows平台下vmwareworkstation、vmwareserver虚拟机系列,oraclevirtualbox是甲骨文公司xvm虚拟化平台技术的一部分。它提供用户在32位或64位的windows、solaris及linux操作系统上虚拟其它x86的操作系统。这些虚拟机都提供暂停、快照、迁移、恢复功能。

目前,在x86体系结构下的redhat、centos、ubuntu、中标麒麟操作系统中都实现了容器的检点恢复功能,而在mips龙芯平台下,尚没有实现容器检查点和恢复点的功能。

并且,目前虚拟机的暂停还原速度较慢,需要分钟级,容器内检查点恢复却在秒级就可以完成,响应速度提升90%以上。

因此,需要设计一种docker容器中检查点和恢复点的功能实现方法及系统。



技术实现要素:

为解决现有技术存在的不足,本发明提供了一种docker容器中检查点和恢复点的功能实现系统,所述功能实现系统包括内核空间及用户空间,其中:

内核空间包括基础进程和应用程序模块、寄生代码模块以及镜像进程和应用程序模块,其中,

基础进程和应用程序模块用于实现计算机的基础功能;

寄生代码模块与基础进程和应用模块连接,用于通过基础进程和应用程序模块,获取用户空间内运行的进程的镜像信息;

镜像进程和应用程序模块用于保存从暂停的进程收集的镜像信息;

用户空间包括进程和应用程序模块、系统调用模块、检查点功能模块以及恢复点功能模块,其中,

进程和应用程序模块通过系统调用模块与内核空间的基础进程和应用程序模块连接,用于通过系统调用模块调用内核空间内的需要运行的程序;

检查点功能模块与内核空间内的基础进程和应用程序模块、寄生代码模块以及镜像进程和应用程序模块连接,用于暂停用户空间内的运行的进程,并通过寄生代码模块收集暂停进程的镜像信息,并将镜像信息保存至镜像进程和应用程序模块;

恢复点功能模块与镜像进程和应用程序模块连接,用于根据镜像信息恢复暂停的进程。

其中,所述寄生代码模块由检查点功能模块通过内核空间的ptrace接口注入寄生代码形成。

其中,所述检查点功能模块通过内核空间的ptrace接口暂停用户空间内的运行的进程。

其中,所述检查点功能模块通过如下步骤暂停正在运行的进程并获取进程的镜像信息:

步骤sa:通过ptrace接口冻结目标进程,并向该目标进程注入寄生代码;

步骤sb:寄生代码侵入对应的特定目标进程,对进程进行透明监控,获取文件描述符;

步骤sc:获取目标进程的socket及netns信息;

步骤sd:获取目标进程procfs中特定pid的内容;

步骤se:通过寄生代码模块获取目标进程的系统调用并保存;

步骤sf:保存目标进程内存页的图形文件;

步骤se:检查目标进程中所有子进程的criu检查点。

其中,所述检查点功能模块的功能还包括:暂停正在运行的进程中,收集进程运行时的镜像信息,并于暂停正在运行的进程后,解锁镜像信息并返回结果,供恢复点功能模块恢复对应的进程。

本发明另外提供了一种docker容器中检查点和恢复点的功能实现方法,包括如下步骤:

检查点功能的实现:

步骤s1:通过ptrace接口追踪并冻结暂停目标进程;

步骤s2:将寄生代码注入目标进程,对目标进程进行透明监控,获取文件描述符;

步骤s3:获取目标进程的信息,以生成对应的镜像信息;

步骤s4:检查目标进程中所有子进程的criu检查点;

恢复点功能的实现:

步骤s5:通过步骤s3中收集到的镜像信息恢复目标进程。

其中,所述步骤s1中,通过ptrace接口追踪目标进程包括如下步骤:

步骤s11:通过命令行获取目标进程的进程组父节点的进程号$pid;

步骤s12:备份器通过该进程号$pid,遍历/proc/$pid/task目录,收集线程信息;

步骤s13:备份器继续遍历/proc/$pid/task/$tid/children迭代收集子进程。

其中,所述步骤s3中,获取目标进程的信息包括:

socket、netns信息,其通过/proc文件系统获取;

procfs中特定pid的内容;

目标进程的系统调用,通过寄生代码获取;

以及目标进程内存页的图像文件。

其中,特定pid的内容包括:/proc/pid/maps、/proc/pid/map_files//proc/pid/status/proc/pid/mountinfo,/proc/$pid/smaps、/proc/$pid/mmaspore和/of/proc/$pid/pipmap、/proc/$pid/fd、网络通道参数或内存映射。

其中,目标进程内存页的图像文件包括:打开的文件、证书、寄存器或任务状态。

其中,所述步骤s5中,恢复点在恢复进程时,仅在初始检查点具有相同的进程号的情况下恢复。

其中,所述步骤s5中,criu通过步骤s3中收集到的镜像信息,将目标进程恢复为检查点之前的状态,从而恢复目标进程。

本发明提供的docker容器中检查点和恢复点的功能实现方法及系统,通过检查点和恢复点功能的设置,使得在云计算系统下,对容器暂停、恢复、动态迁移、容器整体迁移、无缝内核升级、网络负载均衡,桌面环境暂停、恢复,应用程序远程调试、过程复制等等功能变成可能。

附图说明

图1:现有的docker容器和检查点、还原点的关系示意图。

图2:本发明提供的docker容器中检查点和恢复点的功能实现系统的系统架构图。

图3:基于本发明提供的方法所提出的龙芯平台下的容器热迁移工具及其实现过程。

附图标记说明

10-内核空间、11-基础进程和应用程序模块、12-寄生代码模块、13-镜像进程和应用程序模块;

20-用户空间、21-进程和应用程序模块、22-系统调用模块、23-检查点功能模块、24-恢复点功能模块。

具体实施方式

为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。

图1为本发明提供的docker容器中检查点和恢复点的功能实现系统的系统架构图,如图1所示,本发明提供的docker容器中检查点和恢复点的功能实现系统,考虑到在早期检查点、恢复点功能被设计在内核空间中,linux内核社区在设计上没有达成一致,内核中检查点恢复点功能实现过于复杂,无法集成到内核主分支中。为了解决这些问题,本发明的检查点、恢复点的功能实现采取了另一种方法,通过设置在用户空间,使其在用户空间中尽可能多地实现功能,本发明中,通过内核空间内的既有接口成功地实现了检查点及恢复点的功能实现。

具体的,如图1所示,本发明提供的docker容器中检查点和恢复点的功能实现系统,包括内核空间10及用户空间20,其中,

内核空间10包括基础进程和应用程序模块11、寄生代码模块12以及镜像进程和应用程序模块13,用户空间20包括进程和应用程序模块21、系统调用模块22、检查点功能模块23以及恢复点功能模块24。

用户空间20内的检查点功能模块23通过ptrace接口完成与内核空间10的互动,内核空间10内的寄生代码模块12即是由检查点功能模块23通过ptrace接口注入寄生代码而形成的,在检查点功能模块23实现其功能时,检查点功能模块23主要通过寄生代码模块12完成对目标进程的信息获取。

本发明中,各功能模块的详细配合关系如下文所述。

基础进程和应用程序模块11提供基础的应用程序,以使计算机能够实现一系列功能,在具体实现时,用户空间20内的进程和应用程序模块21通过系统调用模块22从基础进程和应用程序模块11调用所需要的程序。

检查点功能模块23与基础进程及应用模块11连接,用于通过ptrace接口暂停用户空间内的运行的进程;同时,检查点功能模块23也与寄生代码模块12连接,寄生代码模块12在检查点功能模块23的支配下,通过基础进程和应用程序模块11,获取用户空间内运行的进程的镜像信息;之后,检查点功能模块23将镜像信息保存至镜像进程和应用程序模块13,供后期恢复点功能模块24恢复暂停的进程。

本发明的docker容器中检查点和恢复点的功能实现系统,具体工作过程如下:

一、检查点功能的实现:

1、目标进程的获取及暂停

检查点功能模块通过内核空间的ptrace接口注入寄生代码,之后,追踪用户空间正在运行的进程,并将全部进程暂停。

检查点功能模块暂停的是一个完整的进程树内的全部进程,其具体的追踪方法为:通过命令行获取一个进程组父节点的进程号($pid),之后,通过使用该进程号$pid,备份器将会遍历/proc/$pid/task目录,收集线程信息,并遍历/proc/$pid/task/$tid/children迭代收集子进程信息,使用ptrace_seize暂停运行的进程。

在进程运行时,必须确保不会改变它们的状态。不仅包括进程打开新文件、套接字、更改会话和其他会话,还包括生成新的子进程,这些进程又可以从dump(备份文件系统)获取。进程树本身及其过程在被转储时被“暂停”。检查点功能模块对我们正在dump(注入)的应用程序是透明的,dump一个特定的应用途径就是使用寄生代码对应用程序监控。

2、镜像信息的提取

寄生代码可以侵入一个特定进程,对进程透明的进行监控,获取文件描述符,dumpmemorycontent。因此,在程序正常执行前,需要先执行寄生代码,具体可使用getitimer()和sigaction()等系统调用执行。

所获取的信息包括:

(1)socket、netns等信息,通过netlink获取;

(2)procfs中特定pid的内容,如/proc/pid/maps、/proc/pid

/map_files/、/proc/pid/status/proc/pid/mountinfo、/proc/$pid/smaps、/proc/$pid/mmaspore、/of/proc/$pid/pipmap、/proc/$pid/fd、网络通道参数、内存映射等;

(3)目标进程的系统调用;

(4)目标进程内存页的图像文件:包含有关检查点进程的附加信息,如打开的文件、证书、寄存器、任务状态等。

对于目标进程的每个检查点,创建单独的图像文件。它使用linux系统中的/proc文件系统获取进程数据,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

3、最后,检查目标进程对应的完整的进程树(父进程及其所有子进程)中,每个连接的子进程的criu点,以保证后期目标进程的顺利恢复。

二、恢复点功能的实现:

恢复点功能模块使用检查点功能模块收集到的镜像信息恢复进程,需要注意的是:只有在初始检查点具有相同的进程号时,才能恢复进程。如果另一个进程正在使用此进程号,则恢复失败。

用相同的进程号恢复进程的原因之一是父子进程必须完全恢复原样。不能对待恢复进程的父进程创建父子关系。本发明中,为了用相同的进程号恢复进程,使用内核接口来影响内核给下一个进程的进程号。

如果用clone()函数创建的进程具有正确的进程号,则criu将其转换为在检查点之前的过程中的相同状态。文件被打开和定位,就像恢复点运行时的状态一样,内存被恢复到相同的状态,并且所有其他的来自图像文件的信息被用来恢复进程。一旦进程恢复,恢复器的其余部分就被删除。如快照,恢复的进程恢复控制,并从先前检查点的位置继续。

本发明提供的docker容器中检查点和恢复点的功能实现方法和系统,适用于基于mips龙芯平台下各进程的暂停和恢复。

为方便加深对本发明的技术理解,下以龙芯平台为例,详述本发明在实施时的两个具体实施例。

实施例一:开启容器恢复点功能

本实施例中,使用容器恢复点会生成一系列的镜像文件和日志文件并保存,具体流程如下:

(1)用户通过命令行终端查看龙芯服务器容器运行状态,docker容器接收到命令,会先去检查虚拟机的状态:容器是否处于退出、死亡的状态等异常状态;若容器异常状态,则通过多docker命令正常启容器,确保容器正常运行,应用程序或者进程运行正常,检查点功能模块会暂停容器运行,查询容器所在docker服务,调用生成容器运行时的镜像文件如cgroup.img、enentpoll-tfd.img、fifo.img等二十多个镜像文件,这些镜像文件保存容器的所有状态,如内存状态、存储、网络连接状态、父子进程调用关系等等,同时生成检查点日志文件和dump文件。

(2)docker容器服务器接受请求后,根据检查点生成的镜像文件、日志文件、dump文件,校验文件的完整性,若文件被占用,则循环等待直至超时并返回结果。若文件没有被占用,则锁定该文件,对虚拟机镜像文件生成快照,保存解锁镜像文件并返回结果。

(3)docker容器服务器中的恢复点功能模块接受到结果并保存,之后返回信息,开启容器自动恢复流程。具体的,恢复点功能模块接收到恢复请求,对于开启了恢复功能的容器,调用容器恢复,根据镜像文件和日志。查看文件是否被占用,若未被占用,则锁定虚拟机镜像文件,并将快照进行恢复操作,完成后解锁容器镜像文件,之后返回结果给控制器。控制器中的自动恢复模块保存结果,之后执行恢复操作,运行容器。

实施例二:龙芯mips平台容器的热迁移功能的实现

容器热迁移(dockerlivemigration,又叫容器动态迁移、容器实时迁移),即容器保存/恢复(save/restore):将整个容器的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异,在传统的x86虚拟机上,虚拟机热迁移技术十分成熟,几乎所有的虚拟化方案都已经实现容器热迁移,如vmware、kvm、hyper-v、xen等等,在x86容器上,可以使用x86的检查点和恢复点,在龙芯mips平台上,目前没有这方面的解决方案。

图3为基于本发明提供的方法所提出的龙芯平台下的容器热迁移工具及其实现过程:

(1)迁移前准备检查龙芯主机a容器的运行状态,验证容器检查点的可行性。

(2)若容器运行正常,则保存容器的基础状态文件,容器状态配置,容器的根文件系统,容器的镜像文件,日志文件。可以使用sync和rsync工具,将文件同步到目的主机。

(3)还原前龙芯主机b上验证还原点的可行性,根据配置文件创建容器。

(4)在龙芯主机a上,保存容器进程运行状态,可以使用普通迁移,迭代迁移,增量备份根文件系统,同步文件和镜像。

(5)在龙芯主机b上,恢复容器根文件系统,libnetwork恢复网络,volumedriver恢复数据卷,恢复容器进程。

本发明中,所谓的“检查点”,是指用户空间中正在运行中的进程当前状态。“检查点功能模块”,能够获取当前状态的所有相关信息,以便后期将其恢复到其以前(在检查点之前)的状态。

本发明中,所谓的“恢复点功能模块”,是指将暂停运行的进程恢复运行,或者将暂停运行的进程从主机到另一个主机的迁移的功能实现模块。

本发明中,所谓的“内核空间”,是指部分核心软件和驱动程序运行的空间,独立于普通应用程序,运行在较高的特权级别上,它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,将此称为内核空间

本发明中,所谓的“用户空间”,区别与内核空间,指应用程序正在运行的空间。

本发明中,所谓的“ptrace”,是指linux编程下系统调用的内核函数。

本发明中,所谓的“socket”,是指网络套接字。

本发明中,所谓的“pid及进程号$pid”,都是进程id,在linux系统下,可通过命令ps看到。

本发明中,所谓的“netlink”,其内储藏有criu用到的内核相关代码。

本发明的检查点和恢复点功能,在具体使用时,可以根据需要对docker容器选择开启或关闭此功能,开启容器检查点还原点功能时会保存当前容器状态作为快照,在下次开机时候会将此快照还原,从而实现了容器还原功能。

本发明的有益效果如下:

1、通过检查点和恢复点功能的设置,使得在云计算系统下,对容器暂停、恢复、动态迁移、容器整体迁移、无缝内核升级、网络负载均衡,桌面环境暂停、恢复,应用程序远程调试、过程复制等等功能变成可能。

2、通过将检查点和恢复点设置于用户空间,使得整体系统稳定可靠,特别适用于龙芯平台下容器等需要检查点还原点功能的场景使用。

虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。

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