[发明专利]一种基于CRIU的Docker容器热迁移方法及系统有效
申请号: | 201710737534.6 | 申请日: | 2017-08-24 |
公开(公告)号: | CN107526626B | 公开(公告)日: | 2020-12-01 |
发明(设计)人: | 王丽娜;徐来;余荣威;鞠瑞;谈诚 | 申请(专利权)人: | 武汉大学 |
主分类号: | G06F9/455 | 分类号: | G06F9/455;G06F9/48;H04L29/06;H04L29/08 |
代理公司: | 武汉科皓知识产权代理事务所(特殊普通合伙) 42222 | 代理人: | 鲁力 |
地址: | 430072 湖*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 criu docker 容器 迁移 方法 系统 | ||
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*。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉大学,未经武汉大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710737534.6/1.html,转载请声明来源钻瓜专利网。