跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

CIM 标准中的虚拟系统网络设备管理模型

Virtual Network 的模型定义

夏 文超, 软件工程师, IBM
夏文超 ,软件工程师 ,曾经进行过嵌入式开发,Linux server 程序开发,现从事 Open Virtualiztion 方面的工作。
王 东旭, 软件工程师, IBM
王东旭,软件工程师,从事 Open Virtualization 工作。

简介: 本文主要介绍在虚拟化环境中,按照 CIM 标准如何定义抽象系统,网络相关设备如何建模与管理 , 模型与当前主流虚拟网络设备之间如何映射,以及最新的 802.1Qbh 与 802.1Qbg 标准对 CIM 模型的影响。本文的核心是描述虚拟网络设备的管理抽象模型。

发布日期: 2012 年 2 月 09 日
级别: 中级
访问情况 : 2104 次浏览
评论: 


CIM 模型简介

CIM 的全称是 Common Information Model,既通用信息模型。它的主要作用是对现实世界中的事物进行标准化建模,以方便用统一的接口对其进行访问和控制,核心在于方便管理。

为了方便您对下文的理解,这里简单说明 CIM 中的几个关键概念的含意:

  • CIM 类:如同 C++ 等对象编程语言一样,一个类表示对一类事物的抽象,可以包含属性与方法。
  • CIM 实例:同对象编程语言一样,按照某类的定义创建出来的具体对象。它与 CIM 类是抽象与具体的关系,如工程师小明,工程师可以理解为一个类,小明是这个类中的一个个体实例。
  • 继承:也类似于对象编程语言,子类拥有父类的所有属性,特殊的是子类能自动被 CIMOM(CIM Object Manager) 程序转换成父类,通过父类已有的关联联系其他类。
  • 关联:CIM 中一个类如果要和另一个类发生联系,可以通过关联表示他们之间是什么关系。
  • 聚合:特殊的关联,除去关联本身它还表示被关联的双方是整体与部分的关系。

在类框图中,一般使用红色连线表示关联,绿色箭头连线表示聚合,蓝色箭头连线表示继承。

CIMOM 是 CIM 标准的管理程序,它管理所有 CIM 子模块并把用户的请求分发到子模块上。当目标机器上 CIMOM 程序被启动后,用户可以用 Python 语言或者 wbemexc 等程序,使用 xml 格式传递操作请求,当请求的对象模块存在时,便会由子模块 (CIM provider) 执行具体的动作。一个典型的 CIMOM 程序是 open-pegasus,它被 IBM 和其他厂商的管理程序广泛使用。


虚拟化环境中的系统与网络管理模型

CIM 中对虚拟客户机的建模

随着当前云计算与虚拟化技术的不断升温,CIM 中也添加了关于虚拟机管理模型相关内容。虚拟化技术的核心是让客户机程序和用户感受不到使用的是一台虚拟机器,或着是虚拟出一台和物理机器差别很小的机器,除此之外还提供备份恢复、动态迁移等高级功能,因此 CIM 对虚拟机的建模也和物理机器非常接近。


图 1.CIM 中虚拟系统模型用到的主要类
图 1.CIM 中虚拟系统模型用到的主要类

从图 1 中可以看到,虚拟客户机被归类成计算机系统类(ComputerSystem)。如同现实世界中的物理计算机系统一样,虚拟客户机也包含有各种被虚拟化的物理组件,如 CPU、内存、网卡等,这些组件被抽象成逻辑设备类 (LogicalDevice)。计算机系统类和逻辑设备类之间,通过 CIM 中的 SystemDevice 互相关联。每一个逻辑设备类通过 SettingsDefineState 关联到资源分配设置类 (ResourceAllocationSettingData)。资源分配设置类中包含有对应设备的详细配置信息,如磁盘设备的容量大小、类型等。虚拟系统设置类 (VirtualSystemSettingData) 和资源分配设置类的作用类似,也是包含有系统设置的详细配置信息,不同的是它同过 SettingsDefineState 关联的对象是整个虚拟计算机系统而不是单个的逻辑设备,因此它含有一个虚拟计算机系统的所有详细配置。VirtualSystemManagementService 类提供对虚拟计算机系统的管理操作服务,其中包括定义系统、删除系统、增加资源、修改资源设置、修改系统设置、删除资源。这些服务被以 method 的方式暴露给用户,公共信息模型对象管理器 (CIMOM) 将会以各种形式将这些方法提供给最终用户,如 tog-pegasus 可以提供 C++ 函数给上层的调用者。

在这种抽象模型下,用户一旦知道了一个代表虚拟客户机的计算机系统类实例,就可以通 SystemDevice 查找到其包含的虚拟设备,再通过 SettingsDefineState 查到具体设置;反之知道了一个虚拟设备就可以查到是谁在使用它。通过 VirtualSystemManagementService 用户可以创建或者修改虚拟系统。当然用户也可以通过 CIM 中 Enum 标准方法查询指定的服务器上运行了哪些客户机,也就是有多少个 ComputerSystem 实例。

CIM 中对虚拟网络设备的建模

虚拟网络作为虚拟计算机系统中的一环,在云计算中心及数据中心中显的尤其重要。在 CIM 模型中,网络系统主要包含交换机系统、网络接口、连接等,它们的模型类似于虚拟客户机系统,使用一个 ComputerSystem 类对其进行管理。所以在虚拟化环境里,一个 ComputerSystem 实例可以代表一个虚拟客户机系统,也有可能代表一个虚拟交换机系统,具体代表哪种由 ComputerSystem 的属性 Dedicated 决定。当 Dedicated=38 时,表示其系统是一个逻辑上的交换机。关于虚拟网络中各个虚拟接口的相关配置如 VLAN ID,在 CIM 模型中这些信息被归类到 VLANEndpoint 类和 NetworkVLAN 上,这一部分内容只有代表逻辑交换机的 ComputerSystem 类实例的相关组件才具有。


图 2.CIM 中虚拟系统模型引入网络后的主要类
图 2 CIM 中虚拟系统模型引入网络后的主要类

图 2 表示了虚拟主机上网络管理部分将要用的类及他们之间的关系。其中 EthernetPort 类是图 1 中 LogicalDevice 的子类,默认继承有 LogicalDevice 的属性与关联关系,可以把它放在图 1 中的 LogicalDevice 位置观察它与其他类之间的关系。EthernetPort 类代表了虚拟系统上的以太网接口。LANEndpoint 类代表了一个遵守以太网协议的网络接入点,更准确的说 LANEndpoint 是包含一个 MAC 地址的网络逻辑节点。LANEndpoint 通过 DeviceSAPInplement 关联到 EthernetPort 类。一个 EthernetPort 实例可以包含多个 MAC 地址对应多个网络逻辑节点,所以可以关联到多个 LANEndpoint 实例。VLANEndpoint 类代表了虚拟网络 VLAN 的接入节点,它表示逻辑上网络节点与虚拟子网的隶属关系。BindsToLANEndpoint 关联表示 VLANEndpoint 实例与 LANEndpoint 实例之间的绑定关系。VLANEndpoint 与 LANEndpoint 类都继承自 CIM_ProtocalEndpoint 类,因此他们也能通过 MemberOfColletion 关联到 ConnectivityCollection 类,或者其子类 NetworkVLAN,反映网络节点与网络连接的关系,指明哪些网络节点构成了哪个虚拟网络。

业界 VLAN 相关技术与 CIM 模型的映射

虚拟网络是一个比较复杂的问题,这里简单归纳如下 :

  • IEEE802.1q:在 MAC 层增加了 VLAN tag 于通信协议中,此 tag 可以标识 VLAN id,因此在二层网络对应的交换机需要有能力识别此 tag。幸运的是此标准出现较早,支持此功能的交换机不少,并且 Linux 2.6 以后的内核自带模块对其进行支持。按照 CIM 标准,可以把 Linux host 上通过 vconfig命令配置出来的虚拟以太网接口以及通过 brctl新加的本地虚拟交换网都建模成 ComputerSystem 实例,VLAN ID 等属性设置在 VLANEndpoint 类中。
  • IEEE802.1qbg:定义了 VEB(Virtual Ethernet Bridge) 概念和 VEPA(Virtual Ethernet Port Aggregator) 概念。VEB 可以简单的理解为一个虚拟逻辑上的交换机,一般在 Host 上,决定 VLAN 的行为。VEPA 可以理解为一个 host 上的特殊交换机,通过 LLDP(Link Layer Discovery Protocol ) 协议让 Host 和外界交换机通讯设置 VLAN 属性,VEPA 把所有的网络数据简单的传递到外界交换机,因此决定 VLAN 行为的是外界交换机。CIM 把 VEB 和 VEPA 都建模成 ComputerSystem 实例,VLAN Id 也可以得到显示。
  • IEEE802.1qbh:定义了 VN-tag 来做接入层的 port extention 功能,VLAN 的大部分功能在需要在交换机上设置。Host 上支持 VN-tag 的虚拟网卡在 CIM 模型中被映射成 ComputerSystem 实例,并且标示它是硬件加速的类别是 VN-tag 转发。
  • SRIOV:将一块网卡虚拟化成多块逻辑网卡的 I/O 技术,让每个虚拟机直接连接到虚拟出来的网卡上从而饶过了 Host 上的软交换机。此时这个网卡相当与一个硬件加速的交换机,在 CIM 中映射成 ComputerSystem 类同样通过属性标记其为硬件加速的。

CIM 模型映射举例


图 3.虚拟系统 1 模块图
图 3.虚拟系统 1 模块图

假定一系统如图 3 所示,有一个虚拟主机上安装有一块物理网卡,有一个软件交换机,其上运行了一个虚拟客户机并且虚拟客户机连接到了主机上的软件交换机上,那么在 CIM 模型中,以上逻辑单元将被映射成如图 4 所示的 CIM 实例。


图 4.虚拟系统 1 在 CIM 模型中的映射
图 4 虚拟系统 1 在 CIM 模型中的映射

可以看到,在 CIM 模型中创建了 3 个 ComputerSystem 类的实例,一个代表虚拟客户机,一个代表软件交换机,一个代表物理网卡。这三个系统通过各自的 EthernetPort 类实例已及 ActiveConnection 关联相互连接,在软件交换机系统上引出 VLANEndpoint 和对应的 NetworkVLAN 用来表示虚拟网络的连接关系,它们之间通过 MemberOfConllection 相互关联。


CIM 虚拟网络管理模型的实现

上文主要阐述了 CIM 如何对虚拟化环境中的设备进行抽象以方便管理,您可以按照 CIM 标准创建 CIM provider 以实现对具体设备的管理。这里举一个简单的例子说明笔者的一个实现。假设系统已经安装 CIMOM tog-pegasus 和 CIM 查询工具 wbemcli、wbemexec。

  • 编写 NetworkSwitch.mof 文件,说明 Virt_NetworkSwitch 类。以下内容告诉 CIMOM Virt_NetworkSwitch 是 CIM_ComputerSystem 的一个子类。
     [ Provider("cmpi:Virt_NetworkSwitch"), 
      Description ("A class derived from CIM_Computersystem. Its a subclass "
      "of ComputerSystem." ) 
     ] 
     class Virt_NetworkSwitch : CIM_ComputerSystem 
     { 
     }; 
    

  • 编写 NetworkSwitch.reg 文件,说明注册的目标类相关信息。以下内容能告诉 CIMOM Virt_NetworkSwtich 类的实现被放在命名空间 root/virt 中,具体提供者是一个叫 Virt_NetworkSwitch 的 module。
     instance of PG_ProviderModule 
     { 
       Name = "Virt_NetworkSwitch"; 
       Location = "Virt_NetworkSwitch"; 
       Vendor = "SBLIM"; 
       Version = "2.0.0"; 
       InterfaceType = "CMPI"; 
       InterfaceVersion = "2.0.0"; 
     }; 
    
     instance of PG_Provider 
     { 
       Name = "Virt_NetworkSwitch"; 
       ProviderModuleName = "Virt_NetworkSwitch"; 
     }; 
    
     instance of PG_ProviderCapabilities 
     { 
       ProviderModuleName = "Virt_NetworkSwitch"; 
       ProviderName = "Virt_NetworkSwitch"; 
       ClassName = "Virt_NetworkSwitch"; 
       ProviderType = { 2 }; 
       Namespaces = {"root/virt"}; 
       SupportedProperties = NULL; 
       SupportedMethods = NULL; 
       CapabilityID = "Virt_NetworkSwitch-1"; 
     }; 
    

  • 使用 tog-pegasus 相关命令注册此类。
     cimmof -uc -n root/virt NetworkSwitch.reg 
    

  • 编写 Virt_NetworkSwitch.c。在此 C 文件中,按照 CIMOM 的接口要求编写固定格式的函数,当用户执行相应命令时,CIMOM 会自动执行此函数,笔者在此函数中按 CIM Model 处理,把请求结果返回给 CIMOM。如下代码声明一个处理用户 enum Virt_NetworkSiwtch 请求的函数。

    具体的逻辑代码比较复杂此处略。读者可以参考 libvirt-cim 工程。

     CMPIStatus cmpi_Virt_NetworkSwitchEnumInstances( CMPIInstanceMI * mi, 
     const CMPIContext * ctx, 
     const CMPIResult  * rslt, 
     const CMPIObjectPath * ref, 
     const char **properties ) 
     { 
        CMPIInstance * ci = NULL; 
    
        // 调用本地 API 查询 network 和 bridge 配置,如果有将则新建 CMPIInstance 到 ci, 写入读取到的相关信息。
    
        // 返回列举到的 instances。
        CMReturnInstance( rslt, ci ); 
     } 
    

  • 编译 Virt_NetworkSwitch.c 成 .so 文件并放到 pegasus 的 provider 目录下,执行查询。在命令行输入以下语句,含义为列举 localhost 上 root/virt 空间里的所有 Virt_SwitchSystem 设备。
    wbemcli -nl ein http://root:123456@localhost:5988/root/virt:Virt_SwitchSystem
    

    返回结果如下,含义为 localhost 上有 VS_eth0 和 VS_bridge1 两个设备。可以看到,对于用户来说,

    主机上的物理网卡 eth0 和软件桥 bridge1 都已经按 CIM 标准抽象成了 Virt_NetworkSwitch 类。

     localhost:5988/root/virt:Virt_NetworkSwitch.CreationClassName="Virt_NetworkSwitch",
               Name="VS_eth0"
     localhost:5988/root/virt:Virt_NetworkSwitch.CreationClassName="Virt_NetworkSwitch",
               Name="VS_bridge1"
     ... 
    


小结

综上所述,在最新的 CIM 标准中,虚拟网络设备以 SwitchSystem 为核心,被建模成了和虚拟客户机以及真实物理机十分类似的系统,因此对它的管理配置方法和对传统物理机器的管理配置方法也很类似,都是通过 CIMOM 的对应类的查询,服务类的方法调用实现的,从而保持了接口形势上的相对连贯性,方便最终系统管理员的学习及上层管理程序的调用。


参考资料

学习

  • http://dmtf.org/standards/profiles,DMTF 主页,这里能查到已经公开的 CIM 模型标准。

  • http://libvirt.org/,Libvirt 主页,在这里能查到 Libvirt 是如何管理虚拟机和他们的网络配置的。

  • http://libvirt.org/CIM/,Libvirt-cim 主页。Libvirt-cim 是一个基于 C 和 Libvirt, 按照 CIM 标准实现虚拟机管理的 CIMOM 插件,读者能在这里学习到如何实现 CIM 模型。

  • http://wiki.qemu.org/Main_Page,Qemu 主页。Qemu 是一个开源虚拟机项目,Qemu-kvm 已被 Linux kernel 接受,在这里能够找到虚拟机网络配置相关文档资料。

  • http://www.openpegasus.org/。OpenPegasus 是一个开源 CIMOM 项目,在这里读者能知道如何用不同的语言制作 CIM 模型的实现插件,以及上层的管理软件如何调用 CIMOM API 查询系统状态。

  • VEPA-EVB Whitepaper,HP 关于 802.1Qbg 中 VEPA/EVB 方案实现 VLAN 的白皮书,从中读者能够更深的理解 802.1Qbg 技术主要解决了什么问题,不同的硬件与环境配置对逻辑网络的影响。

  • http://virt.kernelnewbies.org/MacVTap, 从 Linux 的角度解释如何在 Host 端实现 / 配置 VEPA。

  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。

  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。

  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。

  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。

  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

作者简介

夏文超 ,软件工程师 ,曾经进行过嵌入式开发,Linux server 程序开发,现从事 Open Virtualiztion 方面的工作。

王东旭,软件工程师,从事 Open Virtualization 工作。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=792368
ArticleTitle=CIM 标准中的虚拟系统网络设备管理模型
publish-date=02092012

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。