Linux criu

简介: Linux criu

填坑了,填坑了,我们昨天使用podman创建“快照”并且恢复,今天我们来了解下其使用的criu技术本身。

为避免后来者因为环境版本问题而阅读该文章实验且出错,所以特此提醒:

目前该文章实验环境基于

操作系统: CentOS Linux release 7.6.1810 (Core)

内核版本: 5.4.188-1.el7.elrepo.x86_64

criu版本: v3.16.1





什么是criu


criu 的功能

criu项目是为了Linux建立检查点并且恢复的项目,换句话说,可以“暂停”运行中的程序,并且将该程序的运行信息以数据的形式保留在磁盘上,而后可以“恢复”到本机或者其他机器上去,不会引起内存数据的丢失,得以保存运行态数据。


criu的历史

criuc语言开发,最开始的时候是Virtuozzo中的一个大佬在2011年启动的项目,后台在社区的协作下,该项目得以迅速发展,目前已经被podmandocker等软件使用。截止今日(2022年4月7日),版本已经是v3.16.1了。


criu使用场景

我就简单写2个吧,

  1. 之所以写这篇文章,是因为我们在podman中使用了criu,所以其中的使用场景便是"容器迁移" 。
  2. 无感知内核升级(应该没人这么用)。




安装criu


使用yum安装

criu是集成在了系统中,只不过版本迭代的不会太快,我们使用yum安装是最为方便的


当前系统环境查看

image.png


安装
yum install criu -y


查看版本

image.png


环境监测

image.png



源码安装


当前系统环境查看

image.png

从如上截图可以看到,虽然系统是centos 7.6但是内核我已经升级到了5.4


下载criu源码包
mkdir -p soft
cd soft
wget https://github.com/checkpoint-restore/criu/archive/refs/tags/v3.16.1.tar.gz
tar xf v3.16.1.tar.gz


安装相关依赖
yum install -y gcc make protobuf protobuf-c protobuf-c-devel \
libnl libnl3-devel libcap libcap-devel protobuf-compiler \
protobuf-devel libnet-devel libnet protobuf-python


安装criu
cd criu-3.16.1/
 make


查看版本

image.png


环境监测

image.png




使用criu


案例铺垫

我们还是使用昨天的实例代码哈

代码核心为为路由/reader统计访问次数

image.png


启动进程/刷新数据

我们得到了如下信息

pid: 3462

image.png


我们尝试请求路由信息

image.png


使用criu保存进程状态信息


命令: ./criu/criu dump --tree 3462 --images-dir /tmp/criu_test/ --shell-job --tcp-established

其中:

3462 是我们进程的PID

--images-dir 是img存放的路径

--shell-job 是告知criu程序是从shell启动并且使用shell终端

--tcp-established 是告知criu,程序有tcp连接

image.png



使用criu恢复进程信息

image.png

我们可以看到,程序已经在前台运行了


尝试请求连接

我们尝试请求连接,可以看到进程状态信息还在

image.png


查看进程树

我们可以看到,我们原先进程blogReader父进程已经是criu,但是pid还是3462


image.png



感想


criu太强了,通过podman才了解的,意识到自己真是“井底之蛙”,之前一直听说,某大厂游戏,能够玩家无感知迁移,那时候很好奇,这是怎么做到的,因为在我固有的认知中,进程迁移,或者说网络连接无感知迁移,一直是一个匪夷所思的事情,今天了解了criu基础,让我认识到,这个事情有可能成为可能,就是不知道有没有大厂在此基础上做更一步优化,比如: 游戏故障迁移,对于玩家而言,只是闪断一下,不会将玩家踢出房间。


哎呀,好了,溜了,溜了




相关文章
|
3月前
|
存储 缓存 Linux
『 Linux 』重新理解挂起状态
『 Linux 』重新理解挂起状态
|
5月前
|
Linux
Linux
用户和组
20 0
|
5月前
|
监控 Linux 数据库
Linux下的epf 是什么?
由于 EPF 是一个底层的内核功能,实际涉及到 EPF 的代码可能需要在内核层面进行编写和调试。下面给出在应用程序中使用 EPF 巨型页面的示例代码:
54 0
|
6月前
|
Unix Linux 程序员
Linux是什么,其特点是啥
与大家熟知的 Windows 操作系统软件一样,Linux 也是一个操作系统软件,其 logo 是一只企鹅。与 Windows 不同之处在于,Linux 是一套开放源代码程序的、可以自由传播的类 Unix 操作系统软件。Linux,全称GNU/Linux,是一种类似Unix的操作系统,可以免费使用,自由传播。它是一个基于POSIX的多用户、多任务、多线程、多CPU的操作系统。随着互联网的发展,Linux得到了全世界软件爱好者、组织和公司的支持。除了在服务器方面保持强劲的发展势头,在个人电脑和嵌入式系统方面也取得了长足的进步。用户不仅可以直观地获得操作系统的实现机制,还可以根据自己的需求对Lin
36 0
|
7月前
|
Ubuntu Linux
如何在 Linux 上列出服务?
如何在 Linux 上列出服务?
36 0
如何在 Linux 上列出服务?
|
8月前
|
NoSQL Linux 网络安全
linux问题总结
linux问题总结
|
10月前
|
Unix Linux
Linux 重定向符号以及2>&1
Linux 重定向符号以及2>&1
|
存储 网络协议 安全
[ linux ] 一篇文章让你掌握什么是linux
都说好的开始是成功的一半,那学习 Linux 的第一个问题是搞明白什么是 Linux ,了解其来龙去脉、前世今生,了解其发展趋势、应用前景,弄清楚为什么学习它,以及如何掌握它和使用它,知其然更要知其所以然。 本文希望让读者对 Linux 有一个宏观的认识,总览其整体,后续再依次讲解 Linux 的每一部分的知识点。 很多人看技术类图书都不喜欢或不重视第一章,甚至直接跳过去,觉得大多是介绍性的内容,且没什么 技术含量。然而我想说的是工欲善其事,必先利其器。建议不管学什么,不管看什么书籍,都不要忽视第一章的学习。
162 0
|
缓存 Java Unix
Linux 常见必备
Linux 常见必备
166 0
Linux 常见必备
|
Web App开发 IDE Java
玩转 Manjora,原来大神都是这么用 Linux!
玩转 Manjora,原来大神都是这么用 Linux!
213 0
玩转 Manjora,原来大神都是这么用 Linux!