[译] libvirt 虚机的生命周期 (Libvirt Virtual Machine Lifecycle)
1. 概念
先补充一下 Domain(域)、Virutal Machine(虚机)和 Guest OS (客户机操作系统)三个术语的区别。这三个概念经常被相互使用,其实它们之间还是有些区别。
Oracel 的解释 (资料来源):
- Domain:资源的一个可配置集合,包括内存,虚拟CPU,网络设备和磁盘设备。在 Domain 中运行(多个)虚拟机。一个 Domain 被分配虚拟资源,可以独立地被启动、停止和重启。
- Guest OS:运行在 domain 中的虚拟操作系统。一个 Guest OS 可以是部分虚拟化或者硬件虚拟化的。一个 Hypervisor上可以运行多个 Guest OS。
- VM:Guest OS + 它相关的应用软件。
libvirt 的解释 (资料来源):
一个 libvirt Domain 是一个运行在虚拟机器上的操作系统的实例,它可以指一个运行着的虚拟机,或者用于启动虚拟机的配置。
Xen 的解释(资料来源):
对 Xen 来说,一个 domain 就是指一个虚拟机,其 domain 概念如下:
好吧,这些说法还是有细微差别,下文中的 Domain 就当是虚拟机吧。其它术语:
术语
|
解释
|
---|---|
Domain 域
|
一个运行在被虚拟化的机器上的,由 hypervisor 提供的操作系统实例
|
Hypervisor 虚机管理程序
|
一个虚拟化一个物理服务器为多个虚拟机的软件层。
|
Node 节点
|
一个物理服务器。它可能有多种类型,比如存储节点,集群节点和数据库节点等。
|
Storage Pool 存储池
|
一个存储介质的集合,比如物理硬盘驱动器的集合。一个存储池被细分为卷,卷会被分配给一个或者多个域。
|
Volume 卷
|
一个从存储池中分配出来的存储空间。一个卷可能会分配给一个或者多个域使用,并且往往被用作域内的虚拟硬盘驱动器。
|
1.1 XML 描述
比如,domain 中的设备使用 XML 元素 来表示其被分配的属性和子元素的一个示例如下:
<domain type='qemu'><name>demo</name>...<devices>...<disk type='file' device='disk'> ... </disk><disk type='file' device='cdrom'> ... </disk><input type='mouse' bus='ps2'/>...</devices> </domain>
1.2. 过渡性 Guest Domain VS 持久性 Guest Domain
Libivrt 区分两种不同类型的 domain:短暂性的(transient )和持久性的(persistent)。
- 短暂性 domain 只在 domain 被关机( shutdown) 或者所在的主机(host)被重启(restart)之前存在。
- 持久性 domain 会一直存在,直到被删除。
1.3 Domain 状态
- Undified (未定义的):这是起始状态。这时 libvirt 不会知道 domain 的任何信息,因为这时候 domain尚未被定义或者创建。
- Defined (定义了的)/ Stopped (停止的):domain 已经被定义,但是不在运行(running)。只有持久性 domains 才能处于该状态。当一个短暂性 domain 被停止或者关机时,它就不存在了。
- Running (运行中的):domain 被创建而且启动了,无论是短暂性domain还是持久性domain。任何处于该状态的 domain 都已经在主机的 hypervisor 中被执行了。
- Paused (中止了的):Hypervisor 上对该 domain 的运行被挂起(suspended)了。它的状态被临时保存(比如到内存中),直到它被继续(resumed)。domain 本身不知道它处于是否被中止状态。
- Saved (保存了的):类似中止(Paused) 状态,除了domain 的状态被保存在持久性存储比如硬盘上。处于该状态上的 domain 可以被恢复 (restored)。
1.4 快照
一个快照是虚机的操作系统和它的所有应用(applications )在某个时刻的视图。在虚拟化领域,提供可以被恢复的虚机快照是个非常基本的功能。快照允许用户保存虚机在某个时刻的状态,然后在将来某个时候回滚到该状态。基本的用例包括,创建快照、安装新的应用、更新或者升级,然后回滚到之前的某个时间点。显然,在快照生成之后发生的任何操作都不会包含在快照中。一个快照不会持续更新。它只表示虚机的某个时间上的状态。
1.5 迁移
一个运行中的 domain 或者虚机可以被迁移到另一个主机上,只要虚机的存储是在主机之间共享的,并且目标主机的CPU能够支持虚机的CPU模式。根据类型和应用,虚机迁移可以不导致虚机上运行的服务的中断。
- Standard (标准模式):该模式下,一个 domain 的资源在从源主机迁移到目标主机时,它会处于被挂起(suspended)状态。迁移结束后,虚机在新的主机上继续运行。迁移所花的时间和 domain 的内存大小直接相关。
- Live vs non-live(实时 VS 非实时模式):当使用实时迁移模式时,domain 不会被中止,它的所有服务都继续运行。一开始,目的主机上的 domain 或者虚机会处于停止状态,而且在domain的状态在网络传输的过程中,domain 在目的主机上实际上是不可见的。实时迁移和它上面所运行的应用的类型有直接关系的。当实时迁移一个 domain 时,它已经被分配的内存会被发送到目的主机,与此同时,其内存的任何改变都会被监视(watched)然后也会被发到目的主机。原主机上的 domain 会一直保持它的状态,直到两个节点上的 domain 的内存达到完全达到一致了。这时,目的主机上的 domain 变为 active 状态,原主机上的 domain 变为 passive 或者不可见状态。
- Peer-to-peer (对等模式):该模式下,当原主机和目的主机能够直接通信。
- Tunnelled (隧道模式) :该模式下,在原主机和目的主机之间会建立一个隧道 (tunnel),比如 SSH 隧道。两个主机之间的所有通信都会经过该隧道。
- Direct (直接模式):该模式下,libivrt 使用 hypervisor 来发起迁移,迁移过程完全被 hypervisor 控制。这种模式下,源主机和目的主机的 hypervisor 往往是可以直接交互的(比如,原主机和目的主机上的 Xen 能够直接交互,而不需要libvirt 的干预)
迁移要求:
- 使用路径和位置相同的共享存储
- 两个物理主机上的 hypervisor 的版本完全相同
- 相同的网络配置
- 目的主机上有相同的或者更好的CPU。CPU必须来自同一生产厂家,目的主机上的 CPU flags 必须是原主机上的CPU flags 的超集。
1.6 删除 domain 时的数据安全性
一些应用可能会存储敏感数据,这些数据必须被安全地处理。在任何文件系统中都一样,当一个虚机从一个系统中被删除的时候,只是文件系统的指针被删除。存储介质上的数据块任然存在,只是它们在文件系统中被标识为空。当然,这取决于你的文件系统。我们希望,当一个应用处理这种敏感数据的时候,这些机器必须物理上被安全保护,而且网络防护也必须是被防护的。安全在任何时候都很重要。
2. 任务 (Tasks)
2.1 创建一个 domain
# virt-install \--connect qemu:///system \--virt-type kvm \--name MyNewVM \--ram 512 \--disk path=/var/lib/libvirt/images/MyNewVM.img,size=8 \--vnc \--cdrom /var/lib/libvirt/images/Fedora-14-x86_64-Live-KDE.iso \--network network=default,mac=52:54:00:9c:94:3b \--os-variant fedora14
该命令创建一个名为 'MyNewVM' 的 domain,它有 512M 内存和8G磁盘空间,使用KVM。你可以阅读该命令的手册。
卷 (volume)会被加入一个池(pool)中。默认的话,一个名为 "default" 的池会存在。这是一个目录类型的池,它的意思是所有的卷都以文件形式存在于一个目录中。详细信息,你可以读 this page 。
<volume><name>sparse.img</name><capacity unit="G">10</capacity> </volume>
# virsh vol-create default new_volume.xml
<domain type='kvm'><name>MyNewVM</name><currentMemory>524288</currentMemory><memory>524288</memory><uuid>30d18a08-d6d8-d5d4-f675-8c42c11d6c62</uuid><os><type arch='x86_64'>hvm</type><boot dev='hd'/></os><features><acpi/><apic/><pae/></features><clock offset="utc"/><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>restart</on_crash><vcpu>1</vcpu><devices><emulator>/usr/bin/qemu-kvm</emulator><disk type='file' device='disk'><driver name='qemu' type='raw'/><source file='/var/lib/libvirt/images/MyNewVM.img'/><target dev='vda' bus='virtio'/></disk><disk type='block' device='cdrom'><target dev='hdc' bus='ide'/><readonly/></disk><interface type='network'><source network='default'/><mac address='52:54:00:9c:94:3b'/><model type='virtio'/></interface><input type='tablet' bus='usb'/><graphics type='vnc' port='-1'/><console type='pty'/><sound model='ac97'/><video><model type='cirrus'/></video></devices> </domain>
定义一个持久性的domain:
# virsh define MyNewVM.xml
Domain 的 XML 格式有很多的可选元素你可能觉得有用。因此,可以阅读 this page ,它包含完整的参考。
2.2 编辑一个 domain
# virsh edit <domain>
如果这些变量都不存在,默认会使用 vi。当编辑器关闭的时候,libvirt 会自动检查其变化并应用这些改变。你也可以在 Virtual Machine Manager 编辑 domain。
2.3 启动一个domain
# virsh start MyNewVM
# virsh create /path/to/MyNewVM.xml
2.4 停止或者重启(reboot)domain
停止一个运行中的 domain:
# virsh shutdown <domain>
重启一个持久性的 domain:
# virsh reboot <domain>
粗野的关机(inelegant shutdown),等同于直接拔电源:
# virsh destroy <domain>
- shutdown 是个优雅(graceful)的停止过程,它会发一个信号给 domain 的操作系统,通知它立刻关机。domain 只有在 OS 成功关闭后才停止。该过程类似于在物理机器上运行 shutdown 命令。
- destroy 是立刻中止 domain。该过程类似于拔掉物理机器的电源。
2.5 中止(Pause)domain
使用 suspend 命令来中止一个domain:
# virsh suspend <domain>
当一个虚机处于挂起( suspended) 状态时,它会继续占用系统内存,但不会占用处理器资源。这时候也不会有磁盘和网络IO操作。
2.6 继续(unpause/resume)domain
使用 resume 命令来继续一个domain:
# virsh resume <domain>
- Suspend and resume 是指将一个domain 临时性的保存到内存中的过程。一段时间后,可以继续该 domain 到其原始的运行状态。Suspend 不保存 domain 的内存到持久性文件。
- Save 和 restore 是指将一个运行着的 domain 的状态保存到文件,以及从文件中恢复的过程。
2.7 对domain做快照
使用 snapshot-create 命令来对 domain 做快照:
# virsh snapshot-create <domain>
2.8 列表domain 所有的快照
使用 snapshot-list 命令来获取 domain 的所有快照列表:
# virsh snapshot-list <domain>
结果比如:
Name Creation Time State ---------------------------------------------------1295973577 2011-01-25 17:39:37 +0100 running1295978837 2011-01-25 19:07:17 +0100 running
2.9 从快照恢复一个domain
使用 snapshot-restore 命令来从一个快照恢复一个domain:
# virsh snapshot-restore <domain> <snapshotname>
2.10 删除domain 的一个快照
使用 snapshot-delete 命令来删除一个快照:
# virsh snapshot-delete <domain> <snapshotname>
2.11 迁移 (Migration )
- 普通迁移(Plain migration):原主机开通一个与目的主机的 TCP 连接来发送迁移的数据。如果TCP 端口没有被指定,那么 libvirt 会自己在 49152-49215 区间内选择一个端口。因此你需要在目的主机的防火墙上开启该端口。
- 隧道迁移(Tunneled migration):原主机创建一个与目的主机之间的连接隧道。它允许加密数据流。它不需要额外的防火墙操作,但是只在 qemu 0.12+ 和 libvirt 0.7.2 以后才支持。
# virsh migrate <domain> <remote host URI> --migrateuri tcp://<remote host>:<port>
2.12 删除一个domain
使用virsh 的 undefine 命令来删除一个 domain:
# virsh undefine <domain>
同样地,你也可以在 Virtual Machine Manager 中删除一个 domain。可以阅读这篇文章.
转载于:https://www.cnblogs.com/sammyliu/p/4486712.html
[译] libvirt 虚机的生命周期 (Libvirt Virtual Machine Lifecycle)相关推荐
- Nova 操作汇总(限 libvirt 虚机) [Nova Operations Summary]
本文梳理一下 Nova 主要操作的流程. 0. Nova REST-CLI-Horizon 操作对照表 Nova 基本的 CRUD 操作和 extensions: # 类别 Nova V2 REST ...
- 【软件构造】课件精译(三)软件生命周期与配置管理
一.本章概述 1.软件开发的生命周期 2.传统软件开发模型(瀑布模型.增量模型.V模型.原型法.螺旋模型) 3.敏捷开发和极限编程 4.协同软件开发 5.软件配置管理 6.Git 7.总结 二.本章目 ...
- Windows8应用生命周期 Metro Style Apps Lifecycle
1. Lifecycle Windows8应用的生命周期,与Windows Phone及其他手机平台相比更加简单,Windows8应用只有:未运行.运行.挂起,三个状态.其状态如下图: 当应用切换到后 ...
- [ 成为架构师系列 ] 5. Spring Bean 的生命周期 (the standard bean lifecycle)
[ 成为架构师系列 ] 5. Spring Bean 的生命周期 AbstractXmlApplicationContext /** Copyright 2002-2017 the original ...
- 【KVM系列06】Nova 通过 libvirt 管理 QEMU/KVM 虚机
第六章 Nova 通过 libvirt 管理 QEMU/KVM 虚机 1. Libvirt 在 OpenStack 架构中的位置 2. Nova 中 libvirt 的使用 2.1 创建 QEMU/K ...
- KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]
KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain] 学习 KVM 的系列文章: (1)介绍和安装 (2)CP ...
- KVM之Nova通过libvirt管理QEMU/KVM虚机
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接 ...
- Nova: 虚机的块设备总结 [Nova Instance Block Device]
和物理机一样,虚拟机包括几个重要的部分:CPU.内存.磁盘设备.网络设备等.本文将简要总结虚机磁盘设备有关知识. 1. Nova boot CLI 中有关虚机块设备的几个参数 nova boot CL ...
- spring生命周期_理解Spring应用上下文生命周期
Spring应用上下文启动准备阶段 `BeanFactory`创建阶段 `BeanFactory`准备阶段 `BeanFactory`后置处理阶段 `AnnotationConfigServletWe ...
最新文章
- 保姆级NLP学习路线来啦!
- 2022斯坦福AI指数报告出炉!中国霸榜AI顶会,但引用量最低
- 腾讯研究院发布:《人工智能+制造产业发展研究》报告
- XML publisher 填充空白行数
- 一文读懂 HMM 模型和 Viterbi 算法
- 振作起来– Spring Framework 4.0即将来临!
- 【BZOJ - 4337】BJOI2015 树的同构(树哈希)
- 搭建一个jumpserver跳板机
- Nodejs设备接入阿里云IoT平台
- php 菜单模块,POSCMS模块菜单
- hive-对用户浏览网站的点击量按年月进行统计
- 移动应用中的AR开发,6款最受欢迎工具推荐
- 苹果发布黄色版 iPhone 14,定价 5999 元起;大神李沐被曝离职投身大模型创业;Atlassian 裁员 |极客头条
- 张宏 :移动机器人全局定位技术与方法是啥?道翰天琼认知智能机器人平台API接口大脑为您揭秘-1。
- Android 军刀级神器:Magisk
- Day19 - 摄像、拍照,滤镜中文指南
- Java web:基于jieba分词器(或ansj分词器)的文章关键词字符云(词云图)
- 软件工程师的硬件与软件
- 【VTK+有限元后处理】实时剖切视图
- 随笔——Docker学习笔记
热门文章
- spring boot 教程(四) 统一异常处理
- 英特尔核显自定义分辨率_核显也能60帧玩3A大作?原理很简单!8寸电脑掌机游戏测评...
- 结构力学求解器_结构力学学好这些内容对施工很关键,你都学懂了吗?
- 系统学习深度学习(十八)--NIN模型
- mysql指令按顺序排列_《深入浅出MySQL》读书笔记(一)sql基础,常用的操作语句。...
- C语言:编写函数,通过一个指针将一个字符串反向
- 累加寄存器(AC)入门
- hive判断是否包含
- flink知识点总结
- kafka面试题简答