OpenStack设计与实现(二)Libvirt简介与实现原理

一、Libvirt简介

Libvirt是由Redhat开发的一套开源的软件工具,目标是提供一个通用和稳定的软件库来高效、安全地管理一个节点上的虚拟机,并支持远程操作。它由以下的模块组成:

n 一个库文件,实现管理接口

n 一个守护进程(libvirtd)

n 一个命令行工具(virsh)

基于可移植性和高可靠性的考虑,Libvirt采用C语言开发,但是也提供了对其他编程语言的绑定,包括Python,Perl,Ocaml,Ruby,Java和PHP。因此Libvirt的调用可以被集成到各种编程语言中,适应不同的环境。

Libvirt支持多种虚拟机,具体情况如下:


LXC


轻量级的Linux容器


OpenVZ


基于Linux内核的轻量级Linux容器


KVM/QEMU


基于Linux的类型2的VMM


Xen


开源的类型1的VMM


User-mode Linux(UML)


系统调用级别的Linux虚拟机


VirtualBox


Oracle开发的类型2的VMM


Vmware ESX and GSX


Vmware虚拟化的服务器版本


Vmware Workstation and Player


Vmware虚拟化的桌面版本


Hyper-V


微软开发的VMM


PowerVM


IBM开发的VMM


Parallels Workstation


Parallels为Mac开发的VMM


Bhyve


FreeBSD 9+上的VMM

二、Libvirt的结构

Libvirt屏蔽了不同虚拟化的实现,提供统一管理接口。用户只关心高层的功能,而VMM的实现细节,对于最终用户应该是透明的。Libvirt就作为VMM和高层功能之间的桥梁,接收用户请求,然后调用VMM提供的接口,来完成最终的工作。

Libvirt的层次结构如下:

为了支持多种VMM,Libvirt采用了基于驱动的架构,如图下图所示。也就是说,每种VMM需要提供一个Driver和Libvirt进行通信来操控特定的VMM。

三、Libvirt的实现

Libvirt代码里所定义的主要对象如下图所示。

1)    VirConnectPtr:代表了一个特定VMM建立的连接。每一个基于Libvirt的应用程序都应该先提供一个URI来指定本地或远程的某个VMM,从而获得一个VirConnectPtr连接。比如xen+ssh://host-virt/代表了通过ssh连接一个在host-virt机器上运行的Xen
VMM。拿到virConnectPtr连接后,应用程序就可以管理这个VMM的虚拟机和对应的虚拟化资源,比如存储和网络。

2)    VirDomainPtr:代表一个虚拟机,可能是激活状态或者仅仅已定义。

3)    VirNetworkPtr:代表一个网络

4)    VirStorageVolPtr:代表一个存储卷,通常被虚拟机当做块设备使用。

5)    VirStoragePoolPtr:代表一个存储池,用来分配和管理存储卷的逻辑区域。

1、本机之间的通信

在初始化的过程中,所有的驱动被枚举和注册。每一个驱动都会加载特定的函数为Libvirt API所调用。如下图所示,Application通过URI调用Public
API,然后PublicAPI通过使用Driver提供的API接口调用正真的Driver实现。

2、远程主机之间的通信

Libvirt的目标是支持远程管理,所以到Libvirt的驱动的访问,都由Libvirt守护进程libvirtd处理,libvirtd被部署在运行虚拟机的节点上,通过RPC由对端的remote
Driver管理,如下图所示。

在远程管理模式下,virConnectionPtr实际上连接了本地的remote Driver和远端的特定Driver。所有的调用都通过remote
Driver先到达云端的libvirtd,libvirtd访问对应的Driver。

时间: 2024-10-27 10:57:47

OpenStack设计与实现(二)Libvirt简介与实现原理的相关文章

logger(二)logback简介及其实现原理

一.logback简介 logback是log4j创始人写的,性能比log4j要好,目前主要分为3个模块 logback-core:核心代码模块 logback-classic:log4j的一个改良版本,同时实现了slf4j的接口,这样你如果之后要切换其他日志组件也是一件很容易的事 logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能 二.logback.xml配置 <?xml version="1.0" encoding="U

用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)

1.办公系统中文档的定义 办公系统中的文档就是指对数据不敏感的业务,例如流程中的审批单.信息专栏.数据上报.信息记录等.而对于这些信息的管理,特别是时效性较强的管理记录,仍采用关系型数据库进行管理. (1)流程中审批单 流程中审批单由功能按钮区.特殊功能区.业务表单区.附件区.审批意见区等区域构成,其中,业务表单区理论上包含附件和意见,但是由于附件和意见的业务特殊性,需要单独进行管理,剩下的业务表单就可以看作文档了. 在一些流程审批业务中,业务信息有的是以Excel或word文件等方式专递,这样

JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示

一.(一)中的代码还可以修改的地方. 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include进来.这样,当要对导航栏进行修改时,只需要修改一个文件,而不用修改所有相关的页面文件.不过,我这里没有这样做,没有抽取出来. 二.实现当前页面的标识+不同页面的head头部背景图片的改变 现在在(一)实现的基础之上,来实现导航栏当前所选页面的菜单项高亮显示,让访问者一路了然知道"我正在这里"

数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)

本文出自:http://blog.csdn.net/svitter 题目12:计算机学院学生会的打印机(优先队列) 小明抱怨学生会的打印机不符合FIFO的原则,看到很多在他后面来打印的同学比他先打印出来.五分钟前,小明的文件就是下一个候选的,如今小明的文件又排到了后面.学生会的同学给小明解释说,学生会的打印机不是採用传统的队列方式,而是採用一种自定义的优先队列方式:每一个要打印的文件被赋予了一个从1到9的优先级(9最高,1最低).打印规定例如以下: 将队列中要打印的文件f从队列中拿出来: 假设在

用产品思维设计API(二)——数据解耦,才是前后分离的本质

用产品思维设计API(二)--数据解耦,才是前后分离的本质 前言 最近公司内部在重构项目代码,包括API方向的重构,期间遇到了很多的问题,不由得让我重新思考了下. - 一个优雅的API该如何设计? - 前后端分离之后,API真的解耦分离了吗? - 不断的版本迭代,API的兼容性该如何做? ps.这里所说的API仅为Web API,提供APP\WEB开发使用. 年前,我司内部的接口已经进入了一个完全的重构阶段,参考了市面上各大平台的API和文档,自己也总结出了很多的心得.这里向大家分享一下,接下来

数据库设计原则(二)

1. 原始单据与实体之间的关系  可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体. 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体. 这里的实体可以理解为基本表.明确这种对应关系后,对我们设计录入界面大有好处. [例1]:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表.社会关系表.工作简历表.    这就是“一张原始单证对应多个实体”的典型例子. 2. 主键与

NFC学习笔记二——Libnfc简介与安装

一直想把自己对过的英文文章做一下翻译记录下来,趁着学习NFC,现将libnfc首页的对libnfc介绍和在不同操作系统上对libnfc安装的文章做一下翻译,一方面提高一下自己的英语,另一方面学习一下libnfc. 原文地址:http://nfc-tools.org/index.php?title=Libnfc 公共平台独立的近场通讯(NFC)库 libnfc是GNU公共许可正下发布的第一个免费的底层的NFC开发包和编程API.它对任何人事完全免费和公开的.这个列表显示了libnfc支持的功能.l

各开源框架使用与设计总结(二)

原文详见:http://www.ucai.cn/blogdetail/7032?mid=1&f=5 可以在线运行查看效果哦! 5.4.zephir高效开发模块 好的,讲到这里,衍生出一个小话题,就是开发模块. 在PHP里,开发模块,是一个很痛苦的过程.因为C语言,大家都知道,是出了名的难学的,值得高兴的是,也是Phalcon这个团队的童鞋们,也为我们准备了一个高效的开发模块的语言,称之为zephir.正因为扩展如此难以开发,但是扩展又是如此高效,所以我们要用高效的方式来开发扩展. git clo

从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理

从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理 作者:naaoveGI-    文章来源:http://www.cnblogs.com/naaoveGIS/    点击数:2453    更新时间:2014-9-12 摘要:前面我不厌其烦的给大家说了很多本节的题外话,现在言归正传,我们开始这个系列中的第一个问题,地图比例尺换算原理.想要从底层实现瓦片的显示,我们首先必须了解瓦片本身.我们用arcgis切完图后,打开发布的服务或者打开config