OpenStack设计与实现(二)Libvirt简介与实现原理
2016-01-20 01:58
399 查看
一、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调用PublicAPI,然后PublicAPI通过使用Driver提供的API接口调用正真的Driver实现。
2、远程主机之间的通信
Libvirt的目标是支持远程管理,所以到Libvirt的驱动的访问,都由Libvirt守护进程libvirtd处理,libvirtd被部署在运行虚拟机的节点上,通过RPC由对端的remoteDriver管理,如下图所示。
在远程管理模式下,virConnectionPtr实际上连接了本地的remote Driver和远端的特定Driver。所有的调用都通过remote
Driver先到达云端的libvirtd,libvirtd访问对应的Driver。
相关文章推荐
- linux线程同步(4)-自旋锁
- 在vmwate的CentOS7的虚拟机中安装在rails 4.2.0 版本以后,无法通过其他机器访问 3000端口的问题
- shell脚本标准输出赋值给变量
- docker 入门
- awk分割字符串
- wget调试信息重定向到文件
- linux线程同步(3)-读写锁
- linux文件一致性校验
- shell判断字符串为空
- linux centos 安装mediawiki
- Docker Web化管理实践
- Linux 上最好的五款音乐播放器
- shell循环
- 如何使用popup window
- Linux安装MySQL-二进制安装
- Linux下修改MySQL的root用户密码
- SecureCRT连接Linux关键的
- shell括号
- org.apache.commons.lang3.time之DateUtil
- Linux系统下以RPM方式安装