libvirt框架分析
2015-07-10 20:53
309 查看
libvirt框架分析
libvirt
Author:Wang Yi up2wing#gmail.com
libvirt revision: 1.2.14
术语概念
node:一个物理机器称为一个node
hypervisor:一个软件层抽象,其作用是虚拟化一个node,运行一系列不同配置的虚拟机
domain:运行于虚拟机上的OS实例。
![](http://blog.csdn.net/up2wing/article/details/file:/C:/Users/%E4%B8%BA%E8%87%AA%E7%94%B1~1/AppData/Local/Temp/enhtmlclip/pic-1432477046411.png)
常用对象
libvirt的目标是提供一个通用层,以 安全地管理node上的domain,因此libvirt的API暴露了所有 管理主流操作系统 需要的资源。
第一个通过API操作的对象是virConnectPtr,它表示与hypervisor的连接。应用程序获取与hypervisor的连接virConntectPtr后,就可以管理该hypervisor上的domain及相关虚拟化资源,如存储、网络等。任何使用libvirt的程序(openstack、virsh等)开始都要调用virConnectOpen系列函数,来得到virConnectPtr,你会发现这些函数都传入一个char*
name表示 connection URI ,用来选择打开哪个hypervisor。 因为libvirt支持多种类型的虚拟化(通常被称为“drivers”或“hypervisor”),因此需要指定要用的是哪个driver,通过网络连接远程机器上的driver时也是如此。
例如:在一个Linux node上,可能同时使用KVM和LinuxContainer。name为NULL时默认为上次选择的hypervisor,但多数情况下这样并不明智。
connection URI 页面有关于连接URI的详细描述。常用的有:
qemu:///... QEMU and KVM URIs
支持qemu所用的URIs。有两种类型:
qemu:///system:连接到system模式
qemu:///session:连接到session模式
Remote URIs
remote URIs由本地URIs和主机名组成。比如,迁移时就需要连接远程的URI:qemu+tcp://192.168.1.100/system,其中的192.168.1.100就是迁移命令行中指定的目的主机的ip。
test:///... Test URIs
test driver是出于测试目的的一个虚拟hypervisor。
The Libvirt Drivers
driver是libvirt处理具体的hypervisor driver请求的基本单元。每个driver都有一个注册API,加载libvirt API调用的函数引用。下面是一个简单的hypervisor driver机制图。![](http://blog.csdn.net/up2wing/article/details/file:/C:/Users/%E4%B8%BA%E8%87%AA%E7%94%B1~1/AppData/Local/Temp/enhtmlclip/libvirt-driver-arch.png)
Daemon和远程控制
访问libvirt driver主要由libvirt守护进程通过RPC remote driver处理。某些hypervisor支持client-side连接和回应,例如Test、OpenVZ、VMware、Xen、Parallels等。libvirt 客户程序使用URI来获取virConnectPtr,virConnectPtr跟踪driver连接及其它各种连接,然后被用于其它虚拟化函数的入参。取决于所用的dirver,调用会通过remote driver“漫游”到libvirtd 守护进程。守护进程引用特定的连接driver,以获取所需的信息,(处理过后)然后通过连接将执行结果或数据返回客户程序。客户程序再处理返回数据,如显示、写日志等。Migrate就是使用了这中架构的一个例子。
![](http://blog.csdn.net/up2wing/article/details/file:/C:/Users/%E4%B8%BA%E8%87%AA%E7%94%B1~1/AppData/Local/Temp/enhtmlclip/libvirt-daemon-arch.png)
reference
1、http://libvirt.org/api.html![](http://blog.csdn.net/up2wing/article/details/file:/C:/Users/%E4%B8%BA%E8%87%AA%E7%94%B1~1/AppData/Local/Temp/enhtmlclip/EN0059abda.png)
相关文章推荐
- Storm自定义调度器实现--DirectScheduler
- [cocos2dx]Mac操作系统下的cocos2dx-lua环境配置
- 城市平乱(最短路径)
- MVC过滤器详解 面向切面编程(AOP)
- HDOJ 1000 A + B Problem
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
- Java获取图片属性
- canvas画布基础
- poj 1416 Shredding Company (DFS)
- update-alternatives命令详解
- 大数阶乘
- 汉诺塔
- Android项目结构介绍
- Spring特性——事件驱动模型
- 【DP】 (ASC 44) Braess's Paradox
- Android API 翻译之 UsbDevice
- [LeetCode][Java] Implement strStr()
- 锁排查--实例
- 设计模式读书笔记:Interpreter(解释器)
- Java学习笔记