CN107526626B - 一种基于CRIU的Docker容器热迁移方法及系统 - Google Patents
一种基于CRIU的Docker容器热迁移方法及系统 Download PDFInfo
- Publication number
- CN107526626B CN107526626B CN201710737534.6A CN201710737534A CN107526626B CN 107526626 B CN107526626 B CN 107526626B CN 201710737534 A CN201710737534 A CN 201710737534A CN 107526626 B CN107526626 B CN 107526626B
- Authority
- CN
- China
- Prior art keywords
- container
- migration
- docker
- module
- migrated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000005012 migration Effects 0.000 title claims abstract description 328
- 238000013508 migration Methods 0.000 title claims abstract description 326
- 238000000034 method Methods 0.000 title claims abstract description 40
- 238000013509 system migration Methods 0.000 claims abstract description 26
- 230000007246 mechanism Effects 0.000 claims abstract description 16
- 230000008569 process Effects 0.000 claims abstract description 16
- 238000012545 processing Methods 0.000 claims abstract description 14
- 238000004140 cleaning Methods 0.000 claims description 24
- 230000007704 transition Effects 0.000 claims description 20
- 230000008676 import Effects 0.000 claims description 13
- 238000012544 monitoring process Methods 0.000 claims description 10
- 238000011084 recovery Methods 0.000 claims description 9
- 230000004048 modification Effects 0.000 claims description 6
- 238000012986 modification Methods 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 230000002194 synthesizing effect Effects 0.000 claims description 5
- 238000004891 communication Methods 0.000 abstract description 2
- 238000010606 normalization Methods 0.000 abstract description 2
- 238000012546 transfer Methods 0.000 abstract 1
- 238000005516 engineering process Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1441—Countermeasures against malicious traffic
- H04L63/1458—Denial of Service
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1036—Load balancing of requests to servers for services different from user content provisioning, e.g. load balancing across domain name servers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开一种基于CRIU的Docker容器热迁移方法及系统。该方案基于Docker容器配置信息重构容器创建命令进而实现Docker容器配置迁移,结合共享存储和非共享存储特点,采用不同Docker镜像分发方法实现Docker容器文件系统迁移,以避免现有方案直接迁移容器磁盘文件造成的Docker daemon重启问题。通过将volume源进行归一化处理,并在此基础上提出volume热迁移算法,简化了Docker容器的volume迁移。通过引入Docker仓库安全机制以及Rsync+SSH网络通信机制,该方案能够在非共享存储环境中保证迁移过程中迁移数据的机密性和完整性。
Description
技术领域
本发明涉及Docker容器热迁移机制,其为DDOS攻击的重要防御手段负载均衡的基础技术,属于信息安全领域。
背景技术
近年来,轻量级应用容器在云环境中得到了快速发展,以Docker为代表的CaaS(容器即服务)技术正在成为云计算的新形式。Docker容器具有轻量级、快速部署和管理简单的特点,可以使得构建和发布应用变得更加简单、高效。随着Docker容器的飞速发展,对容器的功能需求也随之不断扩展;云提供商迫切希望应用容器能够和其他虚拟化产品(如虚拟机)一样,能够具有负载均衡、容灾备份、高可用性等新的企业级特性。与此同时,为了增加容器中应用的安全性,尤其是对于DDoS攻击的容忍能力,容器需要具有一定的负载均衡能力以应对DDoS攻击带来的威胁。
以上这些企业级特性和安全特性的需求,都要求容器和在容器中的应用能够按需进行跨主机的热迁移;然而,Docker容器到目前为止并没有提供成熟的内置(原生)迁移手段。其根本原因是Docker容器和虚拟机之间有本质的不同:虚拟机是由虚拟化管理器(Hypervisor)模拟(emulate)的一台完备的机器。物理机系统的挂起和恢复操作非常成熟而稳定,可以为虚拟机的热迁移提供协助;而应用容器本质上是一组Linux进程,进程作为操作系统的基本调度单位,最初的设计原则上就是高度依赖于本地操作系统的。在存储结构方面,Docker容器也和虚拟机不同:虚拟机的所有文件系统都保存于镜像中,只要把镜像放在共享存储里,就可以避免进行耗时的存储迁移;而Docker容器的镜像分层结构和外部卷机制,导致Docker镜像无法通过直接拷贝或共享的方式进行迁移。
目前,针对虚拟机的热迁移技术已经相对成熟,而容器热迁移则是一个新兴的研究点。早先的Linux操作系统并不具备进行热迁移的架构基础,直到2011年CRIU机制的出现才使得容器的热迁移成为可能;但是仅凭借该功能无法完成Docker容器的热迁移,还需要对Docker容器的配置、Volume、网络等各方面均进行迁移,并且维持迁移前后数据和配置的一致性和较低的重新响应时间。
近年来国内外研究者在利用CRIU机制进行容器迁移方面进行了多方面的探索。但已有的基于CRIU的容器热迁移方案一旦应用于Docker,必须重启Docker守护进程才能重新载入被迁移容器的状态,这会影响其他所有正常运行的容器。毛祺等人提出通过Docker的私有仓库保存容器基础镜像并以推送和拉取(push/pull)方式同步,从而实现容器的迁移。该方案虽然避免了Docker原生迁移命令export/import和save/load对整个文件系统进行复制的问题,只对修改部分进行迁移,但是该方案不属于热迁移,无法保持迁移前后容器状态一致。
发明内容
本发明的目的是提供一种可应用于共享存储和非共享存储的基于CRIU的Docker容器热迁移方法及系统,该方案整体框架如图1所示,本发明采用C/S架构,包括:
迁移组件步骤:用于完成迁移过程中针对容器所需的所有迁移操作,供迁移模块调用以迁移容器
迁移步骤:用于在迁出端和迁入端建立网络连接,并通过调用迁移组件模块中的组件完成Docker容器的热迁移,具体流程如图3所示;
清理步骤,包括:
迁出子步骤:在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;
迁出子步骤:在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,该模块均会执行。
在上述的一种基于CRIU的Docker容器热迁移方法,所述迁移组件步骤具体包括:
步骤1、配置迁移子步骤
配置迁移子模块主要负责从容器的配置文件中读取配置,并根据这些配置信息重构出容器创建命令,用于在新创建的容器中重现原容器的配置;具体流程如图2所示:
步骤1.根据传入的容器id读取相应配置文件hostconfig.json和config.v2.json,并从config.v2.json配置文件中获取Config.Tty的值,如果为true,则返回错误信息,该容器无法迁移,并结束本模块运行,否则,继续执行第2步;
步骤2.获取容器配置,并将依据docker create命令选项的数据格式对获取到的数据进行格式转换,并将之保存到集合OPTIONS中;
步骤3.判断工作模式是否是共享存储环境下,如果是,将新镜像的名称设置为“容器id_migrate”,如果不是,设置为“私有仓库ip:port/容器id_migrate”;
步骤4.利用OPTIONS和新镜像的名称合成docker create容器创建命令;
步骤2、运行状态迁移子步骤,具体包括:
步骤2.1.在源节点基于“docker checkpoint create”命令对正在运行中的容器进行checkpoint操作并将生成的容器状态信息发送到目的地址;
步骤2.2.在目的主机B上基于待迁移容器C的checkpoint文件,使用“dockercheckpoint create C cp_C--checkpoint-dir/目的地址“命令创建一个新容器C*中,并启动容器C*以继续运行;
当共享存储时,目的地址为/mnt/checkpoints,当非共享存储模式,目的地址为目的主机上的/migrate/checkpoints;
步骤3、Volume数据迁移子步骤,具体包括:
步骤3.1.遍历Volume配置项,将其源路径修改为目的地址/Volume目的路径,将源路径:新的源路径作为键值对添加到待迁移Volume集合中;
步骤3.2.使用Rsync将待迁移Volume集合中的Volume源路径中数据复制到新的数据源路径;
步骤3.3.如果容器处于运行状态,使用inotify监控原容器的Volume源路径,当其发生变化时,使用Rsync同步到新的数据源路径中;
步骤3.4.一旦容器停止运行,将剩余未同步的数据同步到新的数据源路径中;
步骤4、文件系统迁移子步骤:
如果被迁移的是只读容器,镜像迁移只需要在进行checkpoint停机操作前,在目的主机上预先从Docker仓库拉取(pull)指定的镜像即可;
如果被迁移的容器不是只读容器,则分为共享存储和非共享存储,具体步骤如下:
共享存储模式:
步骤1.使用export命令将容器文件系统保存到共享存储中的images文件夹;
步骤2.利用import命令从目的主机将共享存储中的tar文件导入目的主机的Docker daemon中,生成新的镜像img*;
步骤3.使用docker create命令基于镜像img*创建用于恢复的容器;
非共享存储模式:
预存储:私有仓库PrR(private Registry)预先存储有整个集群中所有容器的初始创建镜像;
步骤1.目的主机从PrR拉取(pull)待迁移容器C的初始创建镜像img;与此同时,在源主机对待迁移容器C进行commit操作,将容器对文件系统的最新修改保存到更新后的镜像img*中;
步骤2.commit操作完成后,源主机将镜像img*推送到私有仓库PrR中;
步骤3.在目的主机拉取镜像img*,并根据该镜像重新创建容器C*。
在上述的一种基于CRIU的Docker容器热迁移方法,所述迁移步骤具体包括:
迁出端的迁移子步骤,具体包括:
步骤1.从用户输入的命令行参数中获取容器id和工作模式,在共享存储工作模式下,与迁入端建立网络连接,在非共享存储模式下,与迁入端建立SSL连接;
步骤2.调用配置迁移组件获取容器创建命令,如果报错,则进行报警,转到步骤8;
步骤3.将容器创建命令和容器ID传输到目的主机,由迁入端接收;
步骤4.调用Volume数据迁移组件开启对容器的Volume数据的迁移;
步骤5.获取用户输入命令行中工作模式参数,调用运行状态迁移组件为容器创建checkpoint,获取运行结果,如果失败,进行报警,转到步骤8,否则直接转到步骤6;
步骤6.基于当前迁移工作模式调用文件系统迁移组件导出(或更新并上传)Docker容器的文件系统;并完成Volume剩余数据的同步;
步骤7.监听迁入端返回结果;
步骤8.调用清理模块进行后续处理;
迁入端的迁移子步骤,具体包括:
步骤1.检查系统工作模式,如果为共享存储,与迁出端建立普通连接,转到步骤4;如果没有共享存储,与迁出端建立SSL网络连接;
步骤2.从迁出端接收容器初始镜像的名称;
步骤3.然后调用文件系统迁移组件从共享存储中拉取镜像;
步骤4.接收迁出端发送的容器创建命令和容器ID,并利用该命令创建一个新容器;
步骤5.接收迁出端传输的容器运行状态迁移结果,如果成功,转到步骤6,否则,转到步骤9;
步骤6.检查系统工作模式,并调用文件系统迁移组件导入(或拉取)Docker容器镜像;
步骤7.调用运行状态迁移组件利用docker start的--checkpoint参数从被迁移容器被冻结的状态开启新容器,完成被迁移容器的状态迁移;
步骤8.获取容器的运行状态,并返回给迁出端;
步骤9.调用清理模块进行后续处理。
在上述的一种基于CRIU的Docker容器热迁移方法,所述清理步骤具体包括:
迁出端:在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.删除源主机中的被迁移的容器;
步骤3.并利用docker start的--checkpoint参数在迁出端将被迁移容器从被冻结的检查点恢复运行;
步骤4.检查系统工作模式,如果是共享存储,删除容器导出的tar文件,否则,删除为迁移容器所生成的新镜像;
步骤5.删除checkpoint;
迁入端:在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下所示:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.检查目前工作模式,如果处于非共享存储模式,删除为迁移而复制到目的主机的checkpoint文件,否则转到步骤5;
步骤3.检查目前工作模式,如果是共享存储,直接转到步骤4,否则删除原容器初始创建镜像和复制到目的主机的Volume数据;
步骤4.删除为迁移容器所生成的新镜像。
一种基于CRIU的Docker容器热迁移系统,其特征在于,包括:
迁移组件模块:用于完成迁移过程中针对容器所需的所有迁移操作,供迁移模块调用以迁移容器
迁移模块:用于在迁出端和迁入端建立网络连接,并通过调用迁移组件模块中的组件完成Docker容器的热迁移,具体流程如图3所示;
清理模块,包括:
迁出端:本模块主要负责在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;
迁出端:本模块主要负责在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,该模块均会执行。
在上述的一种基于CRIU的Docker容器热迁移系统,迁移组件模块包括4个子模块,分别为配置迁移子模块、运行状态迁移子模块、Volume数据迁移子模块以及文件系统迁移子模块;其中,
配置迁移子模块:从容器的配置文件中读取配置,并根据这些配置信息重构出容器创建命令,用于在新创建的容器中重现原容器的配置,包括:
步骤1.根据传入的容器id读取相应配置文件hostconfig.json和config.v2.json,并从config.v2.json配置文件中获取Config.Tty的值,如果为true,则返回错误信息,该容器无法迁移,并结束本模块运行,否则,继续执行第2步;
步骤2.获取容器配置,并将依据docker create命令选项的数据格式对获取到的数据进行格式转换,并将之保存到集合OPTIONS中;
步骤3.判断工作模式是否是共享存储环境下,如果是,将新镜像的名称设置为“容器id_migrate”,如果不是,设置为“私有仓库ip:port/容器id_migrate”;
步骤4.利用OPTIONS和新镜像的名称合成docker create容器创建命令;
运行状态迁移子模块:Docker容器的运行状态迁移基于Docker 1.13新增的以CRIU为基础的checkpoint&restore机制实现,该机制主要包含两步,具体如下:
步骤1.在源节点基于“docker checkpoint create”命令对正在运行中的容器进行checkpoint操作并将生成的容器状态信息发送到目的地址;
步骤2.在目的主机B上基于待迁移容器C的checkpoint文件,使用“dockercheckpoint create C cp_C--checkpoint-dir/目的地址“命令创建一个新容器C*中,并启动容器C*以继续运行;
当共享存储时,目的地址为/mnt/checkpoints,当非共享存储模式,目的地址为目的主机上的/migrate/checkpoints;
Volume数据迁移子模块:将非共享存储环境中的不同来源的数据卷归一化为绑定挂载,并指定数据卷迁移的目的目录;在此基础上实现数据卷迁移;具体步骤如下:
步骤1.遍历Volume配置项,将其源路径修改为目的地址/Volume目的路径,将源路径:新的源路径作为键值对添加到待迁移Volume集合中;
步骤2.使用Rsync将待迁移Volume集合中的Volume源路径中数据复制到新的数据源路径;
步骤3.如果容器处于运行状态,使用inotify监控原容器的Volume源路径,当其发生变化时,使用Rsync同步到新的数据源路径中;
步骤4.一旦容器停止运行,将剩余未同步的数据同步到新的数据源路径中;
文件系统迁移子模块:如果被迁移的是只读容器,镜像迁移只需要在进行checkpoint停机操作前,在目的主机上预先从Docker仓库拉取(pull)指定的镜像即可;
如果被迁移的容器不是只读容器,则分为共享存储和非共享存储两种情况分别讨论;具体步骤如下:
1)共享存储模式
步骤1.使用export命令将容器文件系统保存到共享存储中的images文件夹;
步骤2.利用import命令从目的主机将共享存储中的tar文件导入目的主机的Docker daemon中,生成新的镜像img*;
步骤3.使用docker create命令基于镜像img*创建用于恢复的容器;
2)非共享存储模式
预存储:私有仓库PrR(private Registry)预先存储有整个集群中所有容器的初始创建镜像;
步骤1.目的主机从PrR拉取(pull)待迁移容器C的初始创建镜像img;与此同时,在源主机对待迁移容器C进行commit操作,将容器对文件系统的最新修改保存到更新后的镜像img*中;
步骤2.commit操作完成后,源主机将镜像img*推送到私有仓库PrR中;
步骤3.在目的主机拉取镜像img*,并根据该镜像重新创建容器C*。
在上述的一种基于CRIU的Docker容器热迁移系统,迁移模块在迁出端和迁入端建立网络连接,并通过调用迁移组件模块中的组件完成Docker容器的热迁移,其中,
迁出端具体流程如下:
步骤1.从用户输入的命令行参数中获取容器id和工作模式,在共享存储工作模式下,与迁入端建立网络连接,在非共享存储模式下,与迁入端建立SSL连接;
步骤2.调用配置迁移组件获取容器创建命令,如果报错,则进行报警,转到步骤8;
步骤3.将容器创建命令和容器ID传输到目的主机,由迁入端接收;
步骤4.调用Volume数据迁移组件开启对容器的Volume数据的迁移;
步骤5.获取用户输入命令行中工作模式参数,调用运行状态迁移组件为容器创建checkpoint,获取运行结果,如果失败,进行报警,转到步骤8,否则直接转到步骤6;
步骤6.基于当前迁移工作模式调用文件系统迁移组件导出(或更新并上传)Docker容器的文件系统;并完成Volume剩余数据的同步;
步骤7.监听迁入端返回结果;
步骤8.调用清理模块进行后续处理;
迁入端具体流程如下:
步骤1.检查系统工作模式,如果为共享存储,与迁出端建立普通连接,转到步骤4;如果没有共享存储,与迁出端建立SSL网络连接;
步骤2.从迁出端接收容器初始镜像的名称;
步骤3.然后调用文件系统迁移组件从共享存储中拉取镜像;
步骤4.接收迁出端发送的容器创建命令和容器ID,并利用该命令创建一个新容器;
步骤5.接收迁出端传输的容器运行状态迁移结果,如果成功,转到步骤6,否则,转到步骤9;
步骤6.检查系统工作模式,并调用文件系统迁移组件导入(或拉取)Docker容器镜像;
步骤7.调用运行状态迁移组件利用docker start的--checkpoint参数从被迁移容器被冻结的状态开启新容器,完成被迁移容器的状态迁移;
步骤8.获取容器的运行状态,并返回给迁出端;
步骤9.调用清理模块进行后续处理。
在上述的一种基于CRIU的Docker容器热迁移系统,清理模块包括:
迁出端:在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.删除源主机中的被迁移的容器;
步骤3.并利用docker start的--checkpoint参数在迁出端将被迁移容器从被冻结的检查点恢复运行;
步骤4.检查系统工作模式,如果是共享存储,删除容器导出的tar文件,否则,删除为迁移容器所生成的新镜像;
步骤5.删除checkpoint;
迁入端:在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下所示:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.检查目前工作模式,如果处于非共享存储模式,删除为迁移而复制到目的主机的checkpoint文件,否则转到步骤5;
步骤3.检查目前工作模式,如果是共享存储,直接转到步骤4,否则删除原容器初始创建镜像和复制到目的主机的Volume数据;
步骤4.删除为迁移容器所生成的新镜像。
本发明具有如下优点:通过将volume源进行归一化处理,并在此基础上提出volume热迁移算法,简化了Docker容器的volume迁移。通过引入Docker仓库安全机制以及Rsync+SSH网络通信机制,该方案能够在非共享存储环境中保证迁移过程中迁移数据的机密性和完整性。
附图说明
图1为本发明的整体框架图。
图2为本发明配置迁移流程图。
图3为本发明Volume数据迁移流程图。
图4为本发明迁移模块流程图(左为迁出端,右为迁移端)。
图5为本发明迁出端清理模块流程图。
图6为本发明迁入端清理模块流程图。
具体实施方式
一、本发明的目的是提供一种可应用于共享存储和非共享存储的基于CRIU的Docker容器热迁移方案,该方案整体框架如图1所示,本发明采用C/S架构,主要分为迁移组件模块,迁移模块以及清理模块。接下来会对三个模块分别进行详细介绍。
一、迁移组件模块
本模块主要负责完成迁移过程中针对容器所需的所有迁移操作,供迁移模块调用以迁移容器。其共有4个子模块,分别为配置迁移子模块、运行状态迁移子模块、Volume数据迁移子模块以及文件系统迁移子模块。
1)配置迁移子模块
配置迁移子模块主要负责从容器的配置文件中读取配置,并根据这些配置信息重构出容器创建命令,用于在新创建的容器中重现原容器的配置。具体流程如图2所示:
步骤1.根据传入的容器id读取相应配置文件hostconfig.json和config.v2.json,并从config.v2.json配置文件中获取Config.Tty的值,如果为true,则返回错误信息,该容器无法迁移,并结束本模块运行,否则,继续执行第2步。
步骤2.获取容器配置,并将依据docker create命令选项的数据格式对获取到的数据进行格式转换,并将之保存到集合OPTIONS中。
步骤3.判断工作模式是否是共享存储环境下,如果是,将新镜像的名称设置为“容器id_migrate”,如果不是,设置为“私有仓库ip:port/容器id_migrate”。
步骤4.利用OPTIONS和新镜像的名称合成docker create容器创建命令。
2)运行状态迁移子模块
本方案中,Docker容器的运行状态迁移基于Docker 1.13新增的以CRIU为基础的checkpoint&restore机制实现,该机制主要包含两步,具体如下:
步骤1.在源节点基于“docker checkpoint create”命令对正在运行中的容器进行checkpoint操作并将生成的容器状态信息发送到目的地址。
步骤2.在目的主机B上基于待迁移容器C的checkpoint文件,使用“dockercheckpoint create C cp_C--checkpoint-dir/目的地址“命令创建一个新容器C*中,并启动容器C*以继续运行。
当共享存储时,目的地址为/mnt/checkpoints,当非共享存储模式,目的地址为目的主机上的/migrate/checkpoints。
3)Volume数据迁移子模块
为简化Volume数据迁移,本发明将非共享存储环境中的不同来源的数据卷(自身创建,绑定挂载目录,共享其他容器)归一化为绑定挂载,并指定数据卷迁移的目的目录。在此基础上实现数据卷迁移。具体步骤如下:
步骤1.遍历Volume配置项,将其源路径修改为目的地址/Volume目的路径,将源路径:新的源路径作为键值对添加到待迁移Volume集合中。
步骤2.使用Rsync将待迁移Volume集合中的Volume源路径中数据复制到新的数据源路径。
步骤3.如果容器处于运行状态,使用inotify监控原容器的Volume源路径,当其发生变化时,使用Rsync同步到新的数据源路径中。
步骤4.一旦容器停止运行,将剩余未同步的数据同步到新的数据源路径中。
4)文件系统迁移子模块
文件系统迁移主要分为三种情况,如果被迁移的是只读容器,镜像迁移只需要在进行checkpoint停机操作前,在目的主机上预先从Docker仓库拉取(pull)指定的镜像即可。
如果被迁移的容器不是只读容器,则分为共享存储和非共享存储两种情况分别讨论。具体步骤如下:
1)共享存储模式
步骤1.使用export命令将容器文件系统保存到共享存储中的images文件夹。
步骤2.利用import命令从目的主机将共享存储中的tar文件导入目的主机的Docker daemon中,生成新的镜像img*。
步骤3.使用docker create命令基于镜像img*创建用于恢复的容器。
2)非共享存储模式
预存储:私有仓库PrR(private Registry)预先存储有整个集群中所有容器的初始创建镜像。
步骤1.目的主机从PrR拉取(pull)待迁移容器C的初始创建镜像img;与此同时,在源主机对待迁移容器C进行commit操作,将容器对文件系统的最新修改保存到更新后的镜像img*中。
步骤2.commit操作完成后,源主机将镜像img*推送到私有仓库PrR中。
步骤3.在目的主机拉取镜像img*,并根据该镜像重新创建容器C*。
二、迁移模块
迁移模块主要负责在迁出端和迁入端建立网络连接,并通过调用迁移组件模块中的组件完成Docker容器的热迁移,具体流程如图3所示。
迁出端具体流程如下:
步骤1.从用户输入的命令行参数中获取容器id和工作模式,在共享存储工作模式下,与迁入端建立网络连接,在非共享存储模式下,与迁入端建立SSL连接。
步骤2.调用配置迁移组件获取容器创建命令,如果报错,则进行报警,转到步骤8。
步骤3.将容器创建命令和容器ID传输到目的主机,由迁入端接收。
步骤4.调用Volume数据迁移组件开启对容器的Volume数据的迁移。
步骤5.获取用户输入命令行中工作模式参数,调用运行状态迁移组件为容器创建checkpoint,获取运行结果,如果失败,进行报警,转到步骤8,否则直接转到步骤6。
步骤6.基于当前迁移工作模式调用文件系统迁移组件导出(或更新并上传)Docker容器的文件系统。并完成Volume剩余数据的同步。
步骤7.监听迁入端返回结果。
步骤8.调用清理模块进行后续处理。
迁入端具体流程如下:
步骤1.检查系统工作模式,如果为共享存储,与迁出端建立普通连接,转到步骤4;如果没有共享存储,与迁出端建立SSL网络连接。
步骤2.从迁出端接收容器初始镜像的名称。
步骤3.然后调用文件系统迁移组件从共享存储中拉取镜像。
步骤4.接收迁出端发送的容器创建命令和容器ID,并利用该命令创建一个新容器。
步骤5.接收迁出端传输的容器运行状态迁移结果,如果成功,转到步骤6,否则,转到步骤9。
步骤6.检查系统工作模式,并调用文件系统迁移组件导入(或拉取)Docker容器镜像。
步骤7.调用运行状态迁移组件利用docker start的--checkpoint参数从被迁移容器被冻结的状态开启新容器,完成被迁移容器的状态迁移。
步骤8.获取容器的运行状态,并返回给迁出端。
步骤9.调用清理模块进行后续处理。
三、清理模块
1)迁出端:本模块主要负责在迁移完成后,对源主机和共享存储中生成的中间文件进行删除。无论容器迁移成功与否,该模块均会执行。具体流程如下:
步骤1.从迁移模块获取容器迁移的结果。如果迁移成功执行第2步,如果迁移失败,则执行第3步。
步骤2.删除源主机中的被迁移的容器。
步骤3.并利用docker start的--checkpoint参数在迁出端将被迁移容器从被冻结的检查点恢复运行。
步骤4.检查系统工作模式,如果是共享存储,删除容器导出的tar文件,否则,删除为迁移容器所生成的新镜像。
步骤5.删除checkpoint。
2)迁入端
本模块主要负责在迁移完成后,对在目的主机使用过的中间文件进行删除。无论容器迁移成功与否,该模块均会执行。具体流程如下所示:
步骤1.从迁移模块获取容器迁移的结果。如果迁移成功执行第2步,如果迁移失败,则执行第3步。
步骤2.检查目前工作模式,如果处于非共享存储模式,删除为迁移而复制到目的主机的checkpoint文件,否则转到步骤5。
步骤3.检查目前工作模式,如果是共享存储,直接转到步骤4,否则删除原容器初始创建镜像和复制到目的主机的Volume数据。
步骤4.删除为迁移容器所生成的新镜像。
二、本发明提供一种可工作在共享存储和非共享存储模式下的基于CRIU技术的Docker容器热迁移方案,该方案以CRIU为基础实现容器运行状态的迁移,包括以下步骤:
在本发明中,Docker容器热迁移主要分为三步:预迁移、迁移与恢复。
步骤1.预迁移:
步骤1.1在目的主机启动迁移程序监听连接。在源主机启动迁移程序连接到目的主机。如果为共享存储模式,建立的是普通连接,如果为非共享存储模式,建立的是SSL连接。
步骤1.2如果工作模式为非共享存储模式,在源主机由迁出端迁移模块将容器初始创建镜像名称发送给目的主机,并由迁入端迁移模块在目的主机上从私有仓库PrivateRegistry中拉取待迁移容器C的初始镜像。否则跳过本步骤,直接执行步骤1.2。
步骤1.2迁出端迁移模块在源主机上合成docker create容器创建命令。
步骤1.3迁出端迁移模块在源主机上对Volume进行同步。
步骤2.迁移:
步骤2.1迁出端迁移模块将容器创建命令和容器id发送到目的主机。
步骤2.2迁出端迁移模块在源主机对正在运行中的容器C进行checkpoint操作,并将之传输到目的地址。
步骤2.3迁出端迁移模块执行导出文件系统操作,如果为只读容器,绕过此步。否则,如果为共享存储模式,对待迁移容器C执行export操作,将结果保存到共享存储中。如果为非共享存储模式,在源主机对待迁移容器C执行commit操作。并使用push命令将新创建的镜像img*推送到私有仓库Private Registry中。
步骤2.4迁出端迁移模块将待迁移容器的剩余未同步Volume数据同步到目的地址中。
步骤3.恢复容器
步骤3.1迁入端迁移模块执行导入容器镜像操作,如果为只读容器,绕过此步。否则,在共享存储模式,在目的主机使用import操作将共享存储中保存的待迁移容器C的文件系统备份制作成镜像。在非共享存储模式,在目的主机从Private Registry中拉取新镜像。
步骤3.2迁入端迁移模块获取容器创建命令docker create并运行该命令基于新生成的镜像创建一个容器C*。
步骤3.3迁入端迁移模块基于checkpoint文件将容器从被冻结的状态启动并继续运行。
步骤4.清理
调用清理模块对容器迁移过程中产生的中间文件进行清理。
本发明机制仅仅提供一个Docker容器自动化热迁移机制,本发明所属技术领域的技术人员可以对所描述的具体实施案例做各种各样的修改或补充或采用类似的方式替代,例如在文件系统迁移方面,可以选择其他的方式。但并不会偏离本发明的精神或者超越所附权要求书所定义的范围。
Claims (6)
1.一种基于CRIU的Docker容器热迁移方法,其特征在于,包括:
迁移组件步骤:用于完成迁移过程中针对容器所需的所有迁移操作,供迁移模块调用以迁移容器
迁移步骤:用于在迁出端和迁入端建立网络连接,并通过调用迁移组件模块中的组件完成Docker容器的热迁移;
清理步骤,包括:
迁出子步骤:在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,迁移模块均会执行;
迁出子步骤:在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,迁移模块均会执行;
所述迁移组件步骤具体包括:
步骤1、配置迁移子步骤
配置迁移子模块主要负责从容器的配置文件中读取配置,并根据这些配置信息重构出容器创建命令,用于在新创建的容器中重现原容器的配置;
步骤1.根据传入的容器id读取相应配置文件hostconfig.json和config.v2.json,并从config.v2.json配置文件中获取Config.Tty的值,如果为true,则返回错误信息,该容器无法迁移,并结束本模块运行,否则,继续执行第2步;
步骤2.获取容器配置,并将依据docker create命令选项的数据格式对获取到的数据进行格式转换,并将之保存到集合OPTIONS中;
步骤3.判断工作模式是否是共享存储环境下,如果是,将新镜像的名称设置为“容器id_migrate”,如果不是,设置为“私有仓库ip:port/容器id_migrate”;
步骤4.利用OPTIONS和新镜像的名称合成docker create容器创建命令;
步骤2、运行状态迁移子步骤,具体包括:
步骤2.1.在源节点基于“docker checkpoint create”命令对正在运行中的容器进行checkpoint操作并将生成的容器状态信息发送到目的地址;
步骤2.2.在目的主机B上基于待迁移容器C的checkpoint文件,使用“dockercheckpoint create C cp_C--checkpoint-dir/目的地址“命令创建一个新容器C*中,并启动容器C*以继续运行;
当共享存储时,目的地址为/mnt/checkpoints,当非共享存储模式,目的地址为目的主机上的/migrate/checkpoints;
步骤3、Volume数据迁移子步骤,具体包括:
步骤3.1.遍历Volume配置项,将其源路径修改为目的地址/Volume目的路径,将源路径:新的源路径作为键值对添加到待迁移Volume集合中;
步骤3.2.使用Rsync将待迁移Volume集合中的Volume源路径中数据复制到新的数据源路径;
步骤3.3.如果容器处于运行状态,使用inotify监控原容器的Volume源路径,当其发生变化时,使用Rsync同步到新的数据源路径中;
步骤3.4.一旦容器停止运行,将剩余未同步的数据同步到新的数据源路径中;
步骤4、文件系统迁移子步骤:
如果被迁移的是只读容器,镜像迁移只需要在进行checkpoint停机操作前,在目的主机上预先从Docker仓库拉取(pull)指定的镜像即可;
如果被迁移的容器不是只读容器,则分为共享存储和非共享存储,具体步骤如下:
共享存储模式:
步骤1.使用export命令将容器文件系统保存到共享存储中的images文件夹;
步骤2.利用import命令从目的主机将共享存储中的tar文件导入目的主机的Dockerdaemon中,生成新的镜像img*;
步骤3.使用docker create命令基于镜像img*创建用于恢复的容器;
非共享存储模式:
预存储:私有仓库PrR(private Registry)预先存储有整个集群中所有容器的初始创建镜像;
步骤1.目的主机从PrR拉取(pull)待迁移容器C的初始创建镜像img;与此同时,在源主机对待迁移容器C进行commit操作,将容器对文件系统的最新修改保存到更新后的镜像img*中;
步骤2.commit操作完成后,源主机将镜像img*推送到私有仓库PrR中;
步骤3.在目的主机拉取镜像img*,并根据该镜像重新创建容器C*。
2.根据权利要求1所述的一种基于CRIU的Docker容器热迁移方法,其特征在于,所述迁移步骤具体包括:
迁出端的迁移子步骤,具体包括:
步骤1.从用户输入的命令行参数中获取容器id和工作模式,在共享存储工作模式下,与迁入端建立网络连接,在非共享存储模式下,与迁入端建立SSL连接;
步骤2.调用配置迁移组件获取容器创建命令,如果报错,则进行报警,转到步骤8;
步骤3.将容器创建命令和容器ID传输到目的主机,由迁入端接收;
步骤4.调用Volume数据迁移组件开启对容器的Volume数据的迁移;
步骤5.获取用户输入命令行中工作模式参数,调用运行状态迁移组件为容器创建checkpoint,获取运行结果,如果失败,进行报警,转到步骤8,否则直接转到步骤6;
步骤6.基于当前迁移工作模式调用文件系统迁移组件导出或更新并上传Docker容器的文件系统;并完成Volume剩余数据的同步;
步骤7.监听迁入端返回结果;
步骤8.调用清理模块进行后续处理;
迁入端的迁移子步骤,具体包括:
步骤1.检查系统工作模式,如果为共享存储,与迁出端建立普通连接,转到步骤4;如果没有共享存储,与迁出端建立SSL网络连接;
步骤2.从迁出端接收容器初始镜像的名称;
步骤3.然后调用文件系统迁移组件从共享存储中拉取镜像;
步骤4.接收迁出端发送的容器创建命令和容器ID,并利用该命令创建一个新容器;
步骤5.接收迁出端传输的容器运行状态迁移结果,如果成功,转到步骤6,否则,转到步骤9;
步骤6.检查系统工作模式,并调用文件系统迁移组件导入或拉取Docker容器镜像;
步骤7.调用运行状态迁移组件利用docker start的--checkpoint参数从被迁移容器被冻结的状态开启新容器,完成被迁移容器的状态迁移;
步骤8.获取容器的运行状态,并返回给迁出端;
步骤9.调用清理模块进行后续处理。
3.根据权利要求1所述的一种基于CRIU的Docker容器热迁移方法,其特征在于,所述清理步骤具体包括:
迁出端:在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.删除源主机中的被迁移的容器;
步骤3.并利用docker start的--checkpoint参数在迁出端将被迁移容器从被冻结的检查点恢复运行;
步骤4.检查系统工作模式,如果是共享存储,删除容器导出的tar文件,否则,删除为迁移容器所生成的新镜像;
步骤5.删除checkpoint;
迁入端:在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下所示:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.检查目前工作模式,如果处于非共享存储模式,删除为迁移而复制到目的主机的checkpoint文件,否则转到步骤5;
步骤3.检查目前工作模式,如果是共享存储,直接转到步骤4,否则删除原容器初始创建镜像和复制到目的主机的Volume数据;
步骤4.删除为迁移容器所生成的新镜像。
4.一种基于CRIU的Docker容器热迁移系统,其特征在于,包括:
迁移组件模块:用于完成迁移过程中针对容器所需的所有迁移操作,供迁移模块调用以迁移容器
迁移模块:用于在迁出端和迁入端建立网络连接,并通过调用迁移组件模块中的组件完成Docker容器的热迁移;
清理模块,包括:
迁出端:本模块主要负责在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,迁移模块均会执行;
迁出端:本模块主要负责在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,迁移模块均会执行;
迁移组件模块包括4个子模块,分别为配置迁移子模块、运行状态迁移子模块、Volume数据迁移子模块以及文件系统迁移子模块;其中,
配置迁移子模块:从容器的配置文件中读取配置,并根据这些配置信息重构出容器创建命令,用于在新创建的容器中重现原容器的配置,包括:
步骤1.根据传入的容器id读取相应配置文件hostconfig.json和config.v2.json,并从config.v2.json配置文件中获取Config.Tty的值,如果为true,则返回错误信息,该容器无法迁移,并结束本模块运行,否则,继续执行第2步;
步骤2.获取容器配置,并将依据docker create命令选项的数据格式对获取到的数据进行格式转换,并将之保存到集合OPTIONS中;
步骤3.判断工作模式是否是共享存储环境下,如果是,将新镜像的名称设置为“容器id_migrate”,如果不是,设置为“私有仓库ip:port/容器id_migrate”;
步骤4.利用OPTIONS和新镜像的名称合成docker create容器创建命令;
运行状态迁移子模块:Docker容器的运行状态迁移基于Docker 1.13新增的以CRIU为基础的checkpoint&restore机制实现,该机制主要包含两步,具体如下:
步骤1.在源节点基于“docker checkpoint create”命令对正在运行中的容器进行checkpoint操作并将生成的容器状态信息发送到目的地址;
步骤2.在目的主机B上基于待迁移容器C的checkpoint文件,使用“docker checkpointcreate C cp_C--checkpoint-dir/目的地址“命令创建一个新容器C*中,并启动容器C*以继续运行;
当共享存储时,目的地址为/mnt/checkpoints,当非共享存储模式,目的地址为目的主机上的/migrate/checkpoints;
Volume数据迁移子模块:将非共享存储环境中的不同来源的数据卷归一化为绑定挂载,并指定数据卷迁移的目的目录;在此基础上实现数据卷迁移;具体步骤如下:
步骤1.遍历Volume配置项,将其源路径修改为目的地址/Volume目的路径,将源路径:新的源路径作为键值对添加到待迁移Volume集合中;
步骤2.使用Rsync将待迁移Volume集合中的Volume源路径中数据复制到新的数据源路径;
步骤3.如果容器处于运行状态,使用inotify监控原容器的Volume源路径,当其发生变化时,使用Rsync同步到新的数据源路径中;
步骤4.一旦容器停止运行,将剩余未同步的数据同步到新的数据源路径中;
文件系统迁移子模块:如果被迁移的是只读容器,镜像迁移只需要在进行checkpoint停机操作前,在目的主机上预先从Docker仓库拉取(pull)指定的镜像即可;
如果被迁移的容器不是只读容器,则分为共享存储和非共享存储两种情况分别讨论;具体步骤如下:
1)共享存储模式
步骤1.使用export命令将容器文件系统保存到共享存储中的images文件夹;
步骤2.利用import命令从目的主机将共享存储中的tar文件导入目的主机的Dockerdaemon中,生成新的镜像img*;
步骤3.使用docker create命令基于镜像img*创建用于恢复的容器;
2)非共享存储模式
预存储:私有仓库PrR(private Registry)预先存储有整个集群中所有容器的初始创建镜像;
步骤1.目的主机从PrR拉取(pull)待迁移容器C的初始创建镜像img;与此同时,在源主机对待迁移容器C进行commit操作,将容器对文件系统的最新修改保存到更新后的镜像img*中;
步骤2.commit操作完成后,源主机将镜像img*推送到私有仓库PrR中;
步骤3.在目的主机拉取镜像img*,并根据该镜像重新创建容器C*。
5.根据权利要求4所述的一种基于CRIU的Docker容器热迁移系统,其特征在于,迁移模块在迁出端和迁入端建立网络连接,并通过调用迁移组件模块中的组件完成Docker容器的热迁移,其中,
迁出端具体流程如下:
步骤1.从用户输入的命令行参数中获取容器id和工作模式,在共享存储工作模式下,与迁入端建立网络连接,在非共享存储模式下,与迁入端建立SSL连接;
步骤2.调用配置迁移组件获取容器创建命令,如果报错,则进行报警,转到步骤8;
步骤3.将容器创建命令和容器ID传输到目的主机,由迁入端接收;
步骤4.调用Volume数据迁移组件开启对容器的Volume数据的迁移;
步骤5.获取用户输入命令行中工作模式参数,调用运行状态迁移组件为容器创建checkpoint,获取运行结果,如果失败,进行报警,转到步骤8,否则直接转到步骤6;
步骤6.基于当前迁移工作模式调用文件系统迁移组件导出或更新并上传Docker容器的文件系统;并完成Volume剩余数据的同步;
步骤7.监听迁入端返回结果;
步骤8.调用清理模块进行后续处理;
迁入端具体流程如下:
步骤1.检查系统工作模式,如果为共享存储,与迁出端建立普通连接,转到步骤4;如果没有共享存储,与迁出端建立SSL网络连接;
步骤2.从迁出端接收容器初始镜像的名称;
步骤3.然后调用文件系统迁移组件从共享存储中拉取镜像;
步骤4.接收迁出端发送的容器创建命令和容器ID,并利用该命令创建一个新容器;
步骤5.接收迁出端传输的容器运行状态迁移结果,如果成功,转到步骤6,否则,转到步骤9;
步骤6.检查系统工作模式,并调用文件系统迁移组件导入或拉取Docker容器镜像;
步骤7.调用运行状态迁移组件利用docker start的--checkpoint参数从被迁移容器被冻结的状态开启新容器,完成被迁移容器的状态迁移;
步骤8.获取容器的运行状态,并返回给迁出端;
步骤9.调用清理模块进行后续处理。
6.根据权利要求4所述的一种基于CRIU的Docker容器热迁移系统,其特征在于,清理模块包括:
迁出端:在迁移完成后,对源主机和共享存储中生成的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.删除源主机中的被迁移的容器;
步骤3.并利用docker start的--checkpoint参数在迁出端将被迁移容器从被冻结的检查点恢复运行;
步骤4.检查系统工作模式,如果是共享存储,删除容器导出的tar文件,否则,删除为迁移容器所生成的新镜像;
步骤5.删除checkpoint;
迁入端:在迁移完成后,对在目的主机使用过的中间文件进行删除;无论容器迁移成功与否,该模块均会执行;具体流程如下所示:
步骤1.从迁移模块获取容器迁移的结果;如果迁移成功执行第2步,如果迁移失败,则执行第3步;
步骤2.检查目前工作模式,如果处于非共享存储模式,删除为迁移而复制到目的主机的checkpoint文件,否则转到步骤5;
步骤3.检查目前工作模式,如果是共享存储,直接转到步骤4,否则删除原容器初始创建镜像和复制到目的主机的Volume数据;
步骤4.删除为迁移容器所生成的新镜像。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710737534.6A CN107526626B (zh) | 2017-08-24 | 2017-08-24 | 一种基于CRIU的Docker容器热迁移方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710737534.6A CN107526626B (zh) | 2017-08-24 | 2017-08-24 | 一种基于CRIU的Docker容器热迁移方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107526626A CN107526626A (zh) | 2017-12-29 |
CN107526626B true CN107526626B (zh) | 2020-12-01 |
Family
ID=60682248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710737534.6A Active CN107526626B (zh) | 2017-08-24 | 2017-08-24 | 一种基于CRIU的Docker容器热迁移方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107526626B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107291528A (zh) * | 2017-07-14 | 2017-10-24 | 郑州云海信息技术有限公司 | 虚拟机迁移的处理方法和装置 |
CN108469982B (zh) * | 2018-03-12 | 2021-03-26 | 华中科技大学 | 一种容器在线迁移方法 |
CN108762882B (zh) * | 2018-04-02 | 2021-12-21 | 杭州朗和科技有限公司 | 一种Docker容器的迁移方法、迁移装置、介质和计算设备 |
CN108762986A (zh) * | 2018-05-24 | 2018-11-06 | 四川斐讯信息技术有限公司 | 一种防止异常断电导致配置丢失的方法及系统 |
CN108768725B (zh) * | 2018-05-30 | 2021-10-15 | 中国联合网络通信集团有限公司 | 容器热迁移的网络还原方法和系统 |
CN108958981A (zh) * | 2018-07-24 | 2018-12-07 | 广东浪潮大数据研究有限公司 | 一种基于docker的镜像保存方法及相关装置 |
CN109271249B (zh) * | 2018-07-27 | 2022-02-08 | 暨南大学 | 一种基于P.haul框架的云容器预拷贝在线迁移方法 |
CN109408115B (zh) * | 2018-09-12 | 2022-03-04 | 上海华云互越数据技术有限公司 | 一种基于容器环境中迁移对象的方法及计算系统 |
CN109739619B (zh) * | 2018-12-12 | 2021-07-06 | 咪咕文化科技有限公司 | 一种基于容器化应用的处理方法、装置及存储介质 |
CN111414240B (zh) * | 2019-01-07 | 2023-05-09 | 阿里巴巴集团控股有限公司 | 内核态进程复制方法以及装置、容器扩容方法以及装置 |
CN110289983B (zh) * | 2019-05-17 | 2022-09-20 | 平安科技(深圳)有限公司 | 负载均衡应用创建方法、装置、计算机设备及存储介质 |
CN110290172B (zh) * | 2019-05-17 | 2022-02-11 | 平安科技(深圳)有限公司 | 容器应用克隆方法、装置、计算机设备及存储介质 |
CN110351336B (zh) * | 2019-06-10 | 2020-05-19 | 西安交通大学 | 一种基于docker容器的边缘服务迁移方法 |
CN110109779A (zh) * | 2019-07-02 | 2019-08-09 | 南京云信达科技有限公司 | 一种基于微服务进行数据恢复演练环境搭建的方法 |
CN110377395B (zh) * | 2019-07-03 | 2021-11-02 | 华云数据控股集团有限公司 | 一种Kubernetes集群中的Pod迁移方法 |
CN110445662B (zh) * | 2019-08-29 | 2022-07-12 | 上海仪电(集团)有限公司中央研究院 | OpenStack控制节点自适应切换为计算节点的方法及装置 |
CN111324360B (zh) * | 2020-01-09 | 2022-04-01 | 华中科技大学 | 一种面向边缘计算的容器镜像构建方法和系统 |
CN111381933B (zh) * | 2020-03-07 | 2023-09-22 | 北京工业大学 | 一种Docker热迁移实现方法 |
CN111414180A (zh) * | 2020-03-18 | 2020-07-14 | 深圳力维智联技术有限公司 | 终端远程更新方法、设备及计算机可读存储介质 |
CN113296873B (zh) * | 2020-05-15 | 2024-08-06 | 阿里巴巴集团控股有限公司 | 镜像构建方法和装置、终端设备和计算机存储介质 |
CN112860683B (zh) * | 2021-03-31 | 2024-02-02 | 中国工商银行股份有限公司 | 数据集实时清理方法、装置及系统 |
CN113806009A (zh) * | 2021-08-05 | 2021-12-17 | 厦门市美亚柏科信息股份有限公司 | 一种Docker容器自动重建方法、终端设备及存储介质 |
CN113608840B (zh) * | 2021-08-10 | 2023-06-20 | 中国联合网络通信集团有限公司 | 容器迁移方法和装置 |
CN113704218B (zh) * | 2021-08-26 | 2024-04-05 | 哈尔滨工业大学 | 一种容器环境中运行时数据迁移方法及系统 |
CN116225617A (zh) * | 2023-02-21 | 2023-06-06 | 阿里巴巴(中国)有限公司 | 容器实例的管理迁移方法、装置和电子设备及存储介质 |
CN116166204B (zh) * | 2023-04-19 | 2023-07-07 | 安元科技股份有限公司 | 一种多版本加密存储的迁移方法 |
CN117319054B (zh) * | 2023-08-11 | 2024-05-17 | 北京宝联之星科技股份有限公司 | 一种基于容器技术的智能网络安全功能管理方法及系统 |
CN117112498B (zh) * | 2023-10-25 | 2024-01-23 | 中国电子科技集团公司第十五研究所 | 应用迁移方法、装置、电子设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885719A (zh) * | 2012-12-21 | 2014-06-25 | 中国电信股份有限公司 | 虚拟机系统在线存储迁移的方法、系统与装置 |
CN105468473A (zh) * | 2014-07-16 | 2016-04-06 | 北京奇虎科技有限公司 | 数据迁移方法及数据迁移装置 |
CN105955805A (zh) * | 2015-12-28 | 2016-09-21 | 中国银联股份有限公司 | 一种应用容器迁移的方法及装置 |
CN106155778A (zh) * | 2016-07-07 | 2016-11-23 | 中国科学院声学研究所 | 一种应用容器的启动方法及系统 |
CN106933508A (zh) * | 2017-02-14 | 2017-07-07 | 深信服科技股份有限公司 | 应用容器的迁移方法及装置 |
CN107066310A (zh) * | 2017-03-11 | 2017-08-18 | 郑州云海信息技术有限公司 | 一种搭建及使用安全Docker私有仓库的方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110093317A1 (en) * | 2009-10-21 | 2011-04-21 | Danny Chan | Combinatorial portfolio aggregations in electronic trade |
CN103019804B (zh) * | 2012-12-28 | 2016-05-11 | 中国人民解放军国防科学技术大学 | OpenVZ虚拟化的VPS快速迁移方法 |
US9954936B2 (en) * | 2015-03-02 | 2018-04-24 | International Business Machines Corporation | Migrating legacy applications to a multi-tenant computing environment |
US9575797B2 (en) * | 2015-03-20 | 2017-02-21 | International Business Machines Corporation | Virtual machine migration between hypervisor virtual machines and containers |
CN105224466B (zh) * | 2015-11-17 | 2018-08-28 | 广州亦云信息技术有限公司 | 一种基于Docker的集成测试方法及系统 |
-
2017
- 2017-08-24 CN CN201710737534.6A patent/CN107526626B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885719A (zh) * | 2012-12-21 | 2014-06-25 | 中国电信股份有限公司 | 虚拟机系统在线存储迁移的方法、系统与装置 |
CN105468473A (zh) * | 2014-07-16 | 2016-04-06 | 北京奇虎科技有限公司 | 数据迁移方法及数据迁移装置 |
CN105955805A (zh) * | 2015-12-28 | 2016-09-21 | 中国银联股份有限公司 | 一种应用容器迁移的方法及装置 |
CN106155778A (zh) * | 2016-07-07 | 2016-11-23 | 中国科学院声学研究所 | 一种应用容器的启动方法及系统 |
CN106933508A (zh) * | 2017-02-14 | 2017-07-07 | 深信服科技股份有限公司 | 应用容器的迁移方法及装置 |
CN107066310A (zh) * | 2017-03-11 | 2017-08-18 | 郑州云海信息技术有限公司 | 一种搭建及使用安全Docker私有仓库的方法及装置 |
Non-Patent Citations (3)
Title |
---|
Voyager:Complete Container State Migration;Shripad Nadgowda et al;《2017 IEEE 37th International Conference on Distributed Computing Systems(ICDCS)》;20170717;第2137-2142页 * |
一种基于linux容器的动态迁移方法;姜渠;《信息技术与信息化》;20150626;第2015年卷(第2期);第66-68页 * |
基于Docker技术的GUI应用的在线迁移研究;房锦章等;《计算机系统应用》;20161031;第25卷(第10期);第246-251页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107526626A (zh) | 2017-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107526626B (zh) | 一种基于CRIU的Docker容器热迁移方法及系统 | |
US11848817B2 (en) | Techniques for updating edge devices | |
Ma et al. | Efficient live migration of edge services leveraging container layered storage | |
US9727429B1 (en) | Method and system for immediate recovery of replicated virtual machines | |
CN106250270B (zh) | 一种云计算平台下的数据备份方法 | |
WO2019154394A1 (zh) | 分布式数据库集群系统、数据同步方法及存储介质 | |
CA2923068C (en) | Method and system for metadata synchronization | |
CN109151045B (zh) | 一种分布式云系统及监控方法 | |
US9195702B2 (en) | Management and synchronization of batch workloads with active/active sites OLTP workloads | |
US9275060B1 (en) | Method and system for using high availability attributes to define data protection plans | |
CN112035293A (zh) | 虚拟机集群备份 | |
CN103647849A (zh) | 一种业务迁移方法、装置和一种容灾系统 | |
US11892982B2 (en) | Facilitating immediate performance of volume resynchronization with the use of passive cache entries | |
US20200278911A1 (en) | Synchronization storage solution after an offline event | |
US8612799B2 (en) | Method and apparatus of backing up subversion repository | |
CN105721582A (zh) | 多节点文件备份系统 | |
CN111416875A (zh) | 一种面向云边协同的服务目录同步方法及系统 | |
CN112882726B (zh) | 基于Hadoop和Docker的环境系统的部署方法 | |
CN105591801B (zh) | 一种虚拟网络功能vnf故障处理方法及vnf管理设备 | |
CN102831038B (zh) | Enum-dns的容灾方法及enum-dns | |
CN116955015B (zh) | 基于数据存储服务的数据备份系统及方法 | |
CN105323271B (zh) | 一种云计算系统以及云计算系统的处理方法和装置 | |
US9485308B2 (en) | Zero copy volume reconstruction | |
CN114584459B (zh) | 一种实现容器云平台主备高可用的方法 | |
US11188422B2 (en) | Techniques for preserving clone relationships between files |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |