XenServer架构之XAPI的调用流程

来源:互联网 发布:ubuntu登陆后桌面假死 编辑:程序博客网 时间:2024/05/16 08:49

原文地址:http://mp.weixin.qq.com/s?__biz=MjM5NTczODkyOA==&mid=2650948165&idx=1&sn=d6bee9c94975b020bf73d1cd266b43cb&scene=4#wechat_redirect

XAPI 调用是使用XML-RPC协议通过网络发送到安装有XenServer 的主机上。XAPI对象的引用不保证对象的永久标识符,引用不允许对象进行相等比较。对同一物体的两个引用,不保证是文本相同的。对象UUID(Universally UniqueIdentifier,通用唯一识别码)的目的是永久的名字,客户可以通过比较对象的UUID 字符串测试平等。XenServer的XAPI 提供UUID 和不透明引用之间的转换机制,每个类都包含有一个UUID 字段。
XenServer API 是基于XML-RPC 协议进行通信的。XML-RPC 是在Internet 上实现远程方法调用的一种规范,它利用HTTP 作为传输协议,使用XML 作为消息请求的传输主体。XML-RPC 将一个XML 格式的消息体作为HTTP POST 请求发送给服务器,该消息包括名称、运行服务的程序以及输入参数,服务器将执行结果以XML 格式返回,其原理如图所示:



通过XenServer XAPI,用户可以管理虚拟机、存储、网络、主机配置和XenServer池。调用XenServer API 的步骤如下:

1)选择传输级别

可以通过以下两种传输发出API调用:

  • 远程管理使用HTTPS

  • 本地管理通过UnixDomain Sockets 使用HTTP

2)身份验证和会话处理

在执行其余的API前,客户端需要先调用login_with_password 函数连接到XenServer主机进行身份验证,该函数会在服务器端创建一个会话并将该会话的引用返回给客户端。

3)查找操作对象的引用

为了查询操作对象的状态或在其上调用操作,客户端需要获取操作对象的引用,获取对象引用的方法有以下几种:

  • get_by_name_label:返回具有特定标签的特定类的所有对象列表;

  • get by uuid:每个类都有一个UUID,通过这个引用可以返回指定的对象;

  • get_all:返回一组对特定类的所有对象的引用;

  • get all records:返回对特定类的每个对象的记录的引用映射。

4)通过对象调用执行同步或异步操作

每个方法调用都可以是同步或异步的,除了会话、任务、设置的一些字段。同步RPC调用块,是指直到返回值被接收;同步RPC调用块返回值完全按照RPC 返回值/状态码来说。本文中只有同步调用的API,所有的异步调用是在特殊的异步命名空间。异步RPC调用返回一个任务ID,而不是直接返回结果;这个标识符随后被用来跟踪正在运行的异步RPC的状态。但是异步调用可能立即失败,在一个任务ID 被创建之前可能代替这种可能性,然后返回的任务ID是包裹在一个XML-RPC结构中,包括错误描述和字段值。


API 对象模型

在对XenServer API类型、XenServer API 主要类及其类之间的映射关系的研究基础上给出API 对象模型调用关系。

XenServer API类型简单,共有六种数据类型,如下表所示。

类型

描述

String

文本串

Int

64位的整数

Float IEEE

双精度浮点数

Bool

布尔型

DateTime

日期和时间戳

Ref(对象名)

引用一个类的对象名

XenServer API的类多种多样,如下表所示为XenServer 提供的所有类,并给出每个类的描述。

名称

描述

Session

一个会话

auth

远程身份验证服务的管理

subject

一个可以登录xAPI的用户或组

role

与用户或组有关的一组权限

task

一个长时间运行的异步任务

event

异步事件注册和处理

pool

池信息

pool _patch

池补丁

VM

虚拟机

VM_metrics

与虚拟机相关的属性

Vm_guest_metrics

虚拟机报告的属性

VMPP

虚拟机保护机制

VM_appliance

虚拟机设备

DR_task

数据接收任务

host

物理主机

host_crashdump

代表一个主机崩溃转储

host_patch

代表一个补丁存储在一个服务器上

host_metrics

与主机相关的属性

host_cpu

物理CPU

network

虚拟网络

VIF

虚拟网络接口

VIF_ metrics

虚拟网络接口的属性

PIF

物理网络接口

PIF _metrics

物理网络接口的属性

Bond

绑定

VLAN

虚拟局域网多路复用器

SM

存储管理器插件

SR

存储库

VDI

虚拟磁盘映像

VBD

虚拟块设备

VBD _metrics

虚拟块设备属性

PBD

通过主机访问SR的物理块设备

crashdump

虚拟机故障转移

VTPM

虚拟TPM设备

console

控制台

user

系统用户

data source RRDs

数据源

blob

一个二进制blob的占位符

message

管理员注意的消息

secret

秘密

tunnel

网络流量通道

PCI

PCI设备

PGPU

物理 GPU (pGPU)

GPU group

一组兼容GPU的资源池

VGPU

虚拟GPU (vGPU)

XenServer API的类之间是以何种关系进行关联的,完成一个功能需要多个类的相互调用才能完成,如图给出主要类之间的映射关系:



XenServer  XAPI类的类型、主要类和类之间的映射关系基础上,得出API 对象模型之间的关系。

5 API 的一些核心类:

VMVM对象表示XenServer 主机或资源池上的特定虚拟机实例。

主机:主机对象表示资源池中的安装XenServer物理主机。

VDIVDI对象表示虚拟磁盘映像。

SR SR(存储库)聚合VDI的集合并封装VDI 位所在的物理存储的属性。

网络:网络对象表示存在于 XenServer主机实例所在的环境中的第二层网络。

6 4 个用作连接器的类,用于指定VM 和主机、存储和网络之间的关系:

VBDVBD(虚拟块设备)对象表示VMVDI 之间的连接。

VIFVIF(虚拟网络接口)对象表示VM和网络对象之间的连接。

PIFPIF(物理接口)对象表示主机和网络对象之间的连接。

PBDPBD(物理块设备)对象表示主机和SR(存储库)对象之间的连接。

虚拟机的创建由Domain 0来控制,虚拟机的存储和网络是如何创建的,如图所示为虚拟机的网络配置模型:



如图为虚拟机的磁盘配置模型。


0 0