zoukankan      html  css  js  c++  java
  • virsh命令和调用libvirt api的区别

    答曰:virsh是libvirt API的封装

    libvirt是什么

    libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:

       1. libvirt API

       2. libvirtd进程

       3. virsh工具集 这三部分。   最初的目的是为不同的hypervisor提供统一的管理接口。

    详解如下:

    1. Libvirt API

    不同版本的API具体参见:http://libvirt.org/hvsupport.htmllibvirt api主要为不同的虚拟化技术方案对外提供统一的接口,其设计思想为:
    (1)isolation from HV API changes - 隔离底层硬件虚拟化接口对上层的影响
    (2)portable across HV - 支持多种os,如linux,windows,solairs等
    (3)rapid application development - 提供封装的API,加快软件开发的过程
    (4)TLS, SASL, SSH, PolicyKit - 提供各种加密协议,保证了上层应用对下层资源的安全访问
    通过封装最原始的C库,实现了多种编程语言的接口:Perl, Python, OCaml, Java, Ruby,C#, Php,并对目前在应用层编程中常用的协议进行封装,形成不同的协议库,方便在应用层编程中调用,目前主要支持:

    1. Mapping to CIM/DMTF: libvirt-cim
      公共信息模型CIM,是一个与具体实现无关的、用于描述管理信息的概念性模型。
    2. Mapping to AMQP/QMF: libvirt-qmf
      AMQP是一个提供统一消息服务的应用层标准协议,是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。
      基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。
    3. Mapping to SNMP: libvirt-snmp
      该库使得libvirt具备SNMP的功能,开发人员能够通过SNMP来监控和设置每个node上不同domain的信息
    4.Mapping to GObject: libvirt-glib

    2. daemon进程(libvirtd )

    该后台进程主要实现以下功能:

    (1)远程代理
      所有remote client发送来的命令,由该进程监测执行
    (2)本地环境初始化
      libvirt服务的启停,用户connection的响应等
    (3)根据环境注册各种Driver(qemu, xen, storage…)的实现
      不同虚拟化技术以Driver的形式实现,由于libvirt对外提供的e799bee5baa6e59b9ee7ad9431333337376364是统一的接口,所以各个Driver就是实现这些接口, 即将Driver注册到libvirt中

    3. virsh 工具集  

      是libvirt API的封装,以Command Line Interface提供的对外接口。

    4. 通过virsh命令或接口创建虚拟机实例的代码执行路径:

    1)virsh命令或API接口c创建虚拟机 -- 接口层
         virsh create vm.xml 或者 virDomainPtr virDomainCreateXML (virConnectPtr conn, const char * xmlDesc, unsigned int flags)
    (2)调用libvirt提供的统一接口 -- 抽象驱动层
      conn->driver->domainCreateXML(conn, xmlDesc, flags); //此处的domainCreateXML即抽象的统一接口,这里并不需要关心底层的driver是kvm,还是xen
    (3)调用底层的相应虚拟化技术的接口 -- 具体驱动层
      domainCreateXML = qemuDomainCreateXML; //如果driver=qemu,那么此处即调用的qemu注册到抽象驱动层上的函数qemuDomainCreateXML
    (4)拼装shell命令,并执行
      以qemu为例,qemuDomainCreateXML首先会拼装一条创建虚拟机的命令,比如qemu -hda disk.img,然后创建一个新的线程来执行
      回过头来思考,libvirt通过4步,将最底层的直接在shell中输入命令来完成的操作进行了抽象封装,给应用程序开发人员提供了统一的,易用的接口。

    5. 抽象驱动层

        目前,libvirt以下几种类型的抽象驱动,每一种类型的驱动代表某以功能模块的抽象封装:

    (1)虚拟化驱动(virDriverPtr)
    (2)虚拟网络驱动(virNetworkDriverPtr)
    (3)物理网卡驱(virInterfaceDriverPtr)
    (4)存储驱动(virStorageDriverPtr)
    (5)监控驱动(virDeviceMonitorPtr)
    (6)安全驱动(virSecretDriverPtr)
    (7)过滤驱动(virNWFilterDriverPtr)
    (8)状态驱动(virStateDriverPtr)

  • 相关阅读:
    程序员佛祖保佑无bug、发发发 -注释代码
    27 友盟项目--azkaban资源调度
    26 友盟项目--数据可视化
    25 友盟项目--sqoop从hive导出数据到mysql
    24 友盟项目--优化-flume限速拦截、flume自定义源防丢失--改造exec源守护线程监控目录(防丢失)redis维护key(去重)
    23 友盟项目--sparkstreaming对接kafka、集成redis--从redis中查询月留存率
    22 友盟项目--sparkstreaming对接kafka、集成redis--从redis中存储用户使用app的最小时间戳min , 最大时间戳max
    21 友盟项目--统计连续活跃用户、近期流失用户、留存用户--创建表并插入选择出的数据
    20 友盟项目--统计月活率、沉默用户、周回流用户--创建表并插入选择出的数据
    19 友盟项目--统计新增用户---日新增、周新增、月新增--创建表并插入选择出的数据
  • 原文地址:https://www.cnblogs.com/dingyunfeng/p/12735554.html
Copyright © 2011-2022 走看看