文章目录

  • 前言
  • 一、本地环境
  • 二、容器自身迁移
  • 三、跨容器迁移
  • 四、多个进程运行时容器迁移
  • 开始进行容器热迁移实现
  • 回滚

前言

最近呢也是在一直研究docker容器热迁移,在网上查阅了大量相关的资料,并且参照网上例子自己在去实现,这个过程中出现很多问题,就比如按照很多教程操作,最后没有达到预期效果。所有在这写了一篇总结,也是对自己学习的巩固。

技术:Checkpoint/Restore

一、本地环境

1.系统环境

Centos7.6 $ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.8.2003 (Core)
Release:    7.8.2003
Codename:   Core实测 CentOS Linux release 7.9.2009也行

2.内核版本

Centos7.6 $ uname -a
Linux bogon 5.10.2-1.el7.elrepo.x86_64 #1 SMP Sun Dec 20 09:53:23 EST 2020 x86_64 实测 3.10版本也行

3.Docker版本

Centos7.6 $ docker version
Client:Version:      17.06.0-ceAPI version:  1.30Go version:   go1.8.3Git commit:   02c1d87Built:        Fri Jun 23 21:20:36 2017OS/Arch:      linux/amd64Server:Version:      17.06.0-ceAPI version:  1.30 (minimum version 1.12)Go version:   go1.8.3Git commit:   02c1d87Built:        Fri Jun 23 21:21:56 2017OS/Arch:      linux/amd64Experimental: true实测 17.12.1-ce不行

4.CRIU版本

Centos7.6 $ criu -V
Version: 3.12

此时CRIU有内存快照不可用的警告,最好可以将其解决,不过不影响本次热迁移实现。

5.daemon.json

Centos7.6 $ cat /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] ,
"experimental": true
}

以上环境皆为本次实现所用环境,其他环境除上述提到过的都没有去验证。(软件安装或者内核更新可以自行查阅资料)

Docker卸载与重装
Centos更新内核

重启docker服务

systemctl daemon-reload
systemctl restart docker

二、容器自身迁移

先使用bash脚本进行验证

//创建容器
docker run -d --name looper2 --security-opt seccomp:unconfined busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'

//新建检查点
docker checkpoint create looper2 checkpoint1


此时容器状态从Up变为Exited

此时程序已经运行到当前状态

//还原检查点
docker start --checkpoint checkpoint1 looper2

还原后日志能够重新续接上次的打印,符合预期。

三、跨容器迁移

此时用相同的命令创建一个容器looper2-clone,创建之后马上暂停,避免写入太多日志

docker run -d --name looper2-clone --security-opt seccomp:unconfined busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'
docker stop looper2-clone



将容器looper2的检查点文件,拷贝到looper2-clone,要不然looper2-clone找不到检查点会迁移失败

//迁移
docker start --checkpoint checkpoint1 looper2-clone

此时日志直接跳到了checkpoint1检查点运行的地方,然后继续运行,符合预期。

四、多个进程运行时容器迁移

先正常创建个容器,然后将在容器里写几个程序,为了方便查看热迁移是否生效,我都是采用写文件的方式来观察执行情况。

docker run -id --security-opt=seccomp:unconfined --name test -h test test:1222 /usr/sbin/init

/root/app.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>int main()
{int i = 0;int j = 0;char buff[128] = {'\0'};char tmp[128] = {'\0'};pid_t fpid;fpid=fork();if (fpid == 0) {while(j < 100000){memset(tmp,0,sizeof(tmp));sprintf(tmp,"echo \"fork:%d\">>/root/1",j);system(tmp);j++;sleep(1.5);}}while(i < 200000){memset(buff,0,sizeof(buff));sprintf(buff,"echo \"count:%d\">>/root/1",i);system(buff);i++;sleep(1);}return 0;
}

编译:gcc -o app app.c

test.sh

#/bin/bash
/root/app &for a in {1..1000000}
doecho "count:$a">>/root/2sleep 1
done

/etc/rc.local

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.touch /var/lock/subsys/localsleep 1
/root/test.sh &
/bin/bashexit 0

chmod +x /etc/rc.d/rc.local

//提交成镜像
docker commit -p test test:1122

先将当前运行容器全部删除,方便观察

docker kill $(docker ps -q)
docker rm $(docker ps -a)"

开始进行容器热迁移实现

//容器创建
docker run -id --security-opt=seccomp:unconfined --name test -h test test:1222 /etc/rc.local

进入容器查看运行情况:

//创建检查点
docker checkpoint create test checkpoint2


实际操作过程中因为创建检查点之前时程序依然还在执行,所有上上图仅供参考

//迁移
docker start --checkpoint checkpoint2 test


迁移后程序能接着上次检查点继续执行,符合预期。

回滚

我们可以迁移后让容器内程序继续运行一段时间,然后重新用检查点checkpoint2进行迁移,这样可以实现程序运行状态的回滚。

docker start --checkpoint checkpoint2 test

休息一段时间

docker stop test
//重新进行迁移
docker start --checkpoint checkpoint2 test

此时程序运行状态:



迁移后容器实现了回滚的功能,程序运行状态回滚到之前的运行状态,符合预期。

至此,容器热迁移基本实现。容器内进程加速,容器内进程回退满足要求。

跨主机容器热迁移我也验证通过,和上面跨容器迁移类似,需要将检查点文件拷贝到另一个主机存放检查点的目录
需要保证两个主机容器环境一下,宿主机环境一样,避免出现其他问题

Docker容器热迁移技术(基于CRIU实现)相关推荐

  1. XSKY发布XMotion纳管热迁移技术,OpenStack集群迁移效率提升超10倍

    随着企业引入OpenStack平台以后,从边缘应用需求逐步进入到准核心,甚至是核心业务的需求和趋势,私有云运营团队常常需要面对多样化的虚拟机迁移问题和需求(包括计划内和计划外). 例如,物理服务器进行 ...

  2. 灵雀云首席架构师:Docker容器的监控技术

    前言 在Docker容器技术飞速发展之时,监控容器的效率与健康也变成了至关重要的需求.在Docker资深提供的监控技术逐渐成熟时,来自第三方的监控工具也同时步入了人们的视线. 本文将为大家介绍Dock ...

  3. Docker容器的迁移

    Docker容器的迁移 一.容器的迁移准备 1.查看需要迁移的容器 2.导出容器成镜像 3.查看导出的镜像文件 二.导入容器的镜像文件 1.将打包的镜像文件导入到新服务器 2.查看导入的镜像 三.启动 ...

  4. 各大公司docker容器云的技术栈对比

    目前来看,几家历史包袱较重的公司都选择不让上层应用感知到底层是 VM 还是容器,所以都改了 docker 内核,如360.点评.汽车之家.最后附上窝窝团商城的容器私有云技术栈以及系统截图. [国内专业 ...

  5. Docker容器与虚拟化技术——部署KVM虚拟化平台

    部署KVM虚拟化平台 一.搭建KVM虚拟化平台 1.前置知识点 (1)什么是虚拟化         把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机 ...

  6. Docker容器化部署技术

    概念 docker是一个开源应用容器引擎 基于GO实现 安装(基于centos7) 下载安装docker # yum 包更新到最新 yum update # 安装需要的软件包, yum-util 提供 ...

  7. docker容器间双向通信(基于Bridge网桥)

  8. Docker热迁移研究背景,问题描述及解决方案

    1.研究背景 云计算作为一种新兴的计算模式,近几年受到越来越多的关注和应用,随着云服务规模的扩大,数据中心不断的扩张,为了可以在大规模的云服务平台下有效实现负载均衡,将计算资源进行有效分配,在线迁移技 ...

  9. docker容器迁移的解决方案

    本文使用Xshell工具,以mysql为例 一:容器的导入和导出 1:docker export 正在运行的容器id|容器名 > 文件名 (导出容器的内容作为一个归档文件) 这样一个归档的文件就 ...

最新文章

  1. python基础教程书籍推荐-Python大神推荐给小白的36本入门书籍
  2. 算法提高课-搜索-最小步数模型-AcWing 1107. 魔板:bfs、复杂、八数码类似的题目
  3. 【算法分析与设计】基本算法设计方法的思想策略
  4. 某微型计算机指令格式如图,组成原理考试试卷
  5. win10电子邮件没有关联_我们如何为在线课程建立10K电子邮件列表
  6. 网络爬虫中的模拟登陆获取数据(实例教学1)
  7. mount nfs 经常出错信息总结(转)
  8. minicom与USB转串口
  9. 写了一个验证数字范围的正则表达式
  10. matlab中制作软件,如何用matlab制作一个小软件
  11. phpstudy安装部署DVWA
  12. 前端实现HTML转PDF
  13. 关于Win8引导菜单风格切换
  14. 配置Stratified-Transformer、Point-Transformer系列
  15. 启动oracle时报错:PuTTY X11 proxy: unable to connect to forwarded X server: Network error:
  16. Canny边缘检测算法(python 实现)
  17. vivado hls 2019.1百度云安装包,包含license
  18. 数据分析课后作业--信用卡客户风险评价(代码)
  19. 插件体系结构软件开发方法研究
  20. Galera:多主同步MySQL集群原理解析

热门文章

  1. QMI8658 - 姿态传感器学习笔记 - Ⅰ
  2. 计算机cpu的字母,CPU编号中的字母 你了解多少?
  3. 如何将pip更新到最新版本?
  4. 大型网站具备的9大特点
  5. Hadoop分布式计算框架MapReduce
  6. Pix4飞控硬件平台框架(一)
  7. MAL-PEG-NH2,马来酰亚胺-PEG-胺|mal修饰Fe3O4活化磁珠200-300nm|mal修饰SiO2@Fe3O4磁珠200-300nm齐岳生物供应
  8. sql语句执行顺序及简单优化
  9. 如意人生守护·典藏版:论赔付力度,这款产品是碾压级的!
  10. 小帅一点资讯小程序源码