What You See Is What You Get Element

Oracle VM Server for x86 网络

深度揭秘

作者:Gregory King 和 Suzanne Zorn

本文是 Oracle VM Server for x86“深度揭秘”,介绍了 Oracle VM Manager 创建的底层逻辑网络组件。


2012 年 11 月发布(2013 年 7 月更新)


通常,您使用 Oracle VM Manager GUI 配置 Oracle VM Server for x86 网络。GUI 可以简化管理,加快部署,并减少配置出错的机会。使用 GUI 隐藏实现细节有它的好处,但在 Oracle 技术网上的这篇文章中,我们希望公开机器的内部情况,这不仅很有趣,还能帮助您解决可能出现的问题。

想对本文发表评论吗?请将链接发布在 Facebook 的 OTN Garage 页面上。有类似文章要分享?请将其发布在 Facebook 或 Twitter 上,我们来进行讨论。

:本文假设您熟悉 Oracle VM Server for x86 基本概念和术语以及与网络相关的一般概念,如绑定和虚拟 LAN (VLAN)。有关概述,请参见 Oracle VM 用户指南 的第 2 章“Oracle VM 简介”。

关于 Oracle VM Server for x86 网络模型

Oracle VM Server for x86 基于 Xen 内核和底层虚拟机管理程序技术,它利用 Xen 范式管理 Oracle VM 来宾。Oracle VM Server for x86 网络实现遵循基本的 Xen 联网方法,做了一些修改,支持网络接口绑定和 VLAN 等标准网络概念。

Oracle VM Server for x86 网络是您在 Oracle VM Manager GUI 中创建的逻辑结构,将各种单个组件或构建块组合成所需的任何网络基础架构。构建块包括物理以太网端口、绑定的端口(可选)、VLAN 段(可选)、虚拟 MAC 地址 (VNIC) 和网络通道。Oracle VM 服务器和来宾使用这些网络相互通信。

网络角色(通道)

Oracle VM Server for x86 网络模型的一个重要概念是它使用在虚拟化环境中分配给每个网络的网络角色(也称作通道)。这些角色以标志形式实现,告诉 Oracle VM Manager 如何配置服务器池,确定通过哪个网络发送何种类型的代理流量。管理员可以为每个角色创建单独的网络来隔离流量,也可以为多个角色配置一个网络。网络角色包括以下内容:

  • 服务器管理 — 用于指定Oracle VM Manager 将通过哪个网络与指定服务器池中的物理 Oracle VM 服务器上的代理通信。这允许为 Oracle VM 服务器上的接口分配 IP 地址。
  • 集群心跳检测 — 用于在服务器池中的 Oracle VM 服务器之间发送 Oracle Cluster File System 2 心跳检测消息,以验证 Oracle VM 服务器是否存在且正在运行。将该角色分配给一个服务器池中的多个网络没有任何意义,因为 Oracle Cluster File System 2 只支持使用一个子网传输心跳检测流量。这允许为 Oracle VM 服务器上的接口分配 IP 地址。
  • 实时迁移 — 用于将同一个服务器池中的虚拟机从一个 Oracle VM 服务器迁移到另一个。这允许为 Oracle VM 服务器上的接口分配 IP 地址。
  • 存储 — 这可用于为 Oracle VM 服务器上任何种类的网络流量启用一个网络端口,实际上并不会将任何特定网络端口仅局限于 NFS 或 iSCSI 流量;任何启用的网络端口均可用于 NFS 或 iSCSI 流量,无论您是否将此通道分配给某个 Oracle VM 网络。这允许为 Oracle VM 服务器上的接口分配 IP 地址。
  • 虚拟机 — 用于在服务器池中的 Oracle VM 来宾之间进行通信,也可用于在 Oracle VM 来宾与外部网络之间进行通信。这将指示 Oracle VM 服务器创建一个 Xen 桥,充当网络交换机获取往来 Oracle VM 来宾的网络流量。您可以根据需要将此角色分配给多个 Oracle VM 网络。这不允许为 Oracle VM 服务器上的接口分配 IP 地址。

图 1 显示了 Oracle VM Server for x86 所使用的网络通道,同时说明了每个通道类型的变化范围。服务器管理通道包括 Oracle VM Manager 与服务器池中的 Oracle VM 服务器之间的通信。集群心跳检测通道和实时迁移通道均仅传输 Oracle VM 服务器之间的流量。对于这些通道,流量可通过私有的非路由子网传输,因为通信仅在池中的服务器之间进行。流量不需要访问路由器;它只需访问连接服务器和管理器的交换机。相比之下,虚拟机通道不仅包括 Oracle VM 来宾之间的流量,还包括与外部公共网络之间的通信。

图 1

图 1.Oracle VM Server for x86 网络通道。

使用命令行界面查看 Oracle VM Manager 配置的网络时,在 Oracle VM 服务器上执行的命令将显示所有通道类型的网络设备。在 Oracle VM 来宾上执行的命令则仅显示分配给虚拟机通道的网络的网络设备。

:Oracle VM Server for x86 支持广泛的网络设计方案,网络的配置可以简单到单个网络,也可以复杂到到包括网络绑定、VLAN、桥以及连接 Oracle VM 服务器和来宾的多个网络。网络设计取决于多种因素,包括网络接口的数量和类型、可靠性和性能目标、Oracle VM 服务器和来宾的数量以及预期负载。有关 Oracle VM Server for x86 网络设计优秀实践的讨论不在本文范围之内。

Oracle VM Server for x86 如何实现您配置的网络基础架构

在 Oracle VM Server for x86 初始安装过程中,使用一个物理网络接口(通常是 eth0 接口,虽然您也可以在安装过程中任意选择)创建一个名为 bond0 的逻辑接口。在服务器发现阶段,将找到此绑定并为其自动分配三个网络角色:服务器管理、集群心跳检测和实时迁移。稍后可以向 bond0 添加其他物理接口,也可以创建用于集群心跳检测和实时迁移角色的其他网络。(安装之后不能重新分配服务器管理角色。)

分配了服务器管理、集群心跳检测和实时迁移角色的网络传输服务器池中 Oracle VM 服务器之间的流量(但这些服务器不与 Oracle VM 来宾通信)。与所有 Oracle VM Server for x86 网络类似,这些网络也可以使用网络端口、绑定设备或 VLAN 段来创建。Oracle VM Manager 用于创建网络所需的任何绑定设备或 VLAN 段;实现这些网络所必需的逻辑设备则在 Oracle VM 服务器上自动创建和配置。

分配了虚拟机角色的网络传输来宾 Oracle VM 之间及往来外部网络的流量。这些网络也可以使用网络端口、绑定或 VLAN 段构建,Oracle VM Server for x86 创建底层逻辑网络设备。为每个分配了虚拟机角色的网络创建一个逻辑桥设备。此外,Oracle VM Server for x86(基于 Xen 模型)使用一组成对的前端和后端驱动程序处理 Oracle VM 来宾与 Oracle VM 服务器上物理网络设备之间的网络流量。前端驱动程序 (netfront) 位于来宾域中,而后端驱动程序 (netback) 位于 Dom0 中。当一个来宾域在 Oracle VM 服务器上运行时,Oracle VM Server for x86 将自动创建所需的逻辑设备,并在域关闭时删除。

这些逻辑设备与硬件虚拟化来宾(它使用未修改的内核,需要时会捕获和模拟对网络设备的指令)以及半虚拟化来宾(其内核可感知虚拟化环境)略有不同。还会创建其他逻辑设备来支持 VLAN。下面的示例说明了这些差异。

Oracle VM Server for x86 如何与半虚拟化来宾操作系统协同工作

第一个示例(参见图 2)演示如何与半虚拟化来宾或使用半虚拟化网络驱动程序的硬件虚拟化来宾联网。Oracle VM 来宾上的网络设备网络设备,比如 eth0,通过一个名为 netfront 驱动程序 的设备驱动程序通信。Dom0 上的配对逻辑设备即 netback 设备(如 vif23.0),捕获来自 netfront 驱动程序的流量,并将数据包一路传递到 Xen 桥。Xen 桥的任务是将来自 netback 设备的网络流量传递到 Oracle VM 服务器上的网络设备,这些设备可以是逻辑设备(如图 2 所示绑定设备)或物理设备(如一个物理以太网端口)。一个 Xen 桥与来自属于该网络的所有 Oracle VM 来宾的 netback 驱动程序通信。

图 2

图 2.半虚拟化来宾(或具有半虚拟化驱动程序的硬件虚拟化来宾)使用的网络设备。

在图 2 所示的示例中,Oracle VM 服务器有两个用于此网络的物理网络接口:eth2eth3。首先使用 Oracle VM Manager 用这两个物理接口创建一个绑定。Oracle VM Server for x86 创建逻辑绑定接口并为其分配名称 bond1。接下来,使用 Oracle VM Manager 创建一个具有虚拟机角色的新网络,并在此 Oracle VM 服务器上使用新创建的绑定设备。因为此网络分配了虚拟机角色,Oracle VM Server for x86 会自动创建一个桥设备。将为此 Oracle VM 服务器上运行的每个 Oracle VM 来宾自动创建 Netback 设备。为每个 Oracle VM 来宾创建的 netback 设备名为 vifXX.Y,其中,XX 是该来宾当前使用的域 ID,Y 指示哪个 netfront (eth) 设备与此 netback 设备关联。例如,netback 设备名 vif23.0 表示虚拟接口与域 ID 为 23 的来宾内的 eth0 关联。

可以创建多个具有虚拟机角色的网络,Oracle VM 来宾可以属于多个网络,如图 3 所示。Oracle VM Server for x86 为每个网络创建单独的逻辑桥设备。每个桥分配一个与 Oracle VM Server for x86 网络 ID 匹配的名称。这个网络 ID 显示在 Oracle VM Manager 界面的 Networking 选项卡中。在 bond0 上创建的网络是唯一一个使用子网地址作为网络 ID 和桥名称的网络。其他网络会随机分配一个十六进制名称作为其网络 ID。在图 3 所示的示例中,在 bond0 上创建的桥名为 10.11.12.0;在 bond2 上创建的桥名为 9ABCDEF

图 3

图 3.半虚拟化来宾(或具有半虚拟化驱动程序的硬件虚拟化来宾)的多网络配置。

为每个网络创建单独的 netback 设备。来宾操作系统内的网络接口按顺序命名,例如:eth0eth1,等等。netback 设备命名为 vifXX.Y(例如,本示例中的三个 netback 设备命名为 vif23.0vif23.1vif23.2)。在这种命名约定中,XX 表示当前域 ID,Y 指示哪个 netfront (eth) 设备与此 netback 设备关联。例如,netback 设备名 vif23.0 表示虚拟接口与域 ID 为 23 的来宾内的 eth0 关联。类似地,名称 vif23.1 表示虚拟接口与同域内的 eth1 关联。

Oracle VM Server for x86 如何与硬件虚拟化来宾操作系统协同工作

图 4 显示无半虚拟化驱动程序的硬件虚拟化来宾的类似配置。逻辑网络设备与半虚拟化来宾中的相同,只是多了一个在 Dom0 上创建的 tapio Quick EMUlator (QEMU) 设备。QEMU (tapio) 设备让硬件虚拟化来宾操作系统误以为网络通信是直接往来物理硬件的。

tapio 设备转而与 vif netback 设备通信,后者再与逻辑桥设备通信。tapio 设备分配的名称为 tapXX.Y,其中 XX 是当前域 ID,Y 表示来宾操作系统上与此 netback 设备关联的对应网络接口 (eth)。例如,设备名 tap23.1 表示虚拟接口与域 ID 为 23 的来宾内的 eth1 关联。

图 4

图 4.硬件虚拟化来宾的网络配置。

Oracle VM Server for x86 如何与 VLAN 协同工作

也可使用一个物理网络端口或绑定网络接口上的多个 VLAN 段配置 Oracle VM Server for x86 网络。VLAN 提供多个独立的逻辑网络,通常用于隔离一个接口上的流量,以提高数据安全性或性能。

虽然 Oracle VM Server for x86 可以使用 VLAN,但实际上 VLAN 是在 Oracle VM Server for x86 之外创建的:网络管理员创建 VLAN 并将 VLAN 分配给以太网交换机上的交换机端口。然后 Oracle VM Server for x86 可以利用创建的 VLAN。管理员首先使用 Oracle VM Manager 为一个网络端口或绑定创建一个 VLAN 组。然后可以在该 VLAN 组中创建一个或多个 VLAN 段。

图 5 显示一个示例 Oracle VM Server for x86 网络配置(包括 VLAN)。在本示例中,Oracle VM 服务器上有六个物理网络设备(eth0eth5)。这些设备用于创建三个绑定网络接口(bond0bond1bond2)。为这些绑定接口中的每一个创建 VLAN 组。

图 5

图 5.示例 Oracle VM Server for x86 网络配置(包括 VLAN)。

在图 5 所示的第一个 VLAN 组 (bond0) 中创建四个 VLAN:

  • 第一个(未标记)分配了服务器管理角色。
  • 第二个 (bond0.11) 分配了集群心跳检测角色。
  • 第三个 (bond0.12) 分配了实时迁移角色。
  • 最后一个 (bond0.13) 分配了虚拟机角色。该 VLAN 段与一个逻辑桥设备关联,以便与 Oracle VM 来宾通信。

类似地,在为 bond1 创建的 VLAN 组上创建三个 VLAN,并在 bond2 上创建一个 VLAN。在这些 VLAN 上构建的网络全部分配了虚拟机角色。因此,所有这些 VLAN 段均与一个逻辑桥设备关联,用来与 Oracle VM 来宾通信。

整合所有要素

这最后一节以一个 Oracle VM Server for x86 网络配置为例,阐释了这三个不同角度(Oracle VM Manager 角度、逻辑角度和命令行角度)之间的关系。

图 6 显示了从 Oracle VM Manager 角度看到的网络。为服务器管理、集群心跳检测和实时迁移角色创建了单独的网络,并创建了多个虚拟机网络。在本示例中,所有网络均使用 VLAN。该图上的标签(红色)对应于图 7 中逻辑网络角度所示的网络。

图 6

图 6.从 Oracle VM Manager 角度。

图 7 显示了 Oracle VM Server for x86 创建的网络设备的逻辑图。为简单起见,该图仅重点强调与 bond0 关联的网络。该图上的标签(红色)对应于图 6 中 Oracle VM Manager 角度所示的网络。

图 7

图 7.网络设备逻辑图。

图 8 显示了从命令行界面角度看到的网络。该图显示 Oracle VM 服务器上运行 ifconfig 命令的部分输出。(为简单起见,只显示与 bond0 相关的设备。)该图中的标签(红色)对应于图 6 和图 7 所示的网络。

图 8

图 8.从命令行界面角度。

图 8 命令输出中所示的 eth0eth1 设备对应于 Oracle VM 服务器 (Dom0) 上的物理网络接口。从这两个物理设备创建的逻辑设备 bond0 分配的 IP 地址为 10.11.10.22。在这个绑定网络接口上创建的三个标记的 VLAN 段名为 bond0.11bond0.12bond0.13,它们分配的 IP 地址分别为 10.11.11.2210.11.12.2210.11.13.22。最后一个 VLAN 分配了虚拟机角色。同样地,创建一个逻辑桥设备(在输出中标记为 4b)。注意,该桥分配了与关联 VLAN 段相同的 IP 地址。netback 设备 vif23.0(输出中标记为 4a)对应于域 ID 为 23 的域内运行的 Oracle VM 来宾。如果其他 Oracle VM 来宾在此虚拟机网络中运行,将创建其他 netback 设备,这些设备将以不同的设备名称(例如 vif34.0vif18.0)显示在 ifconfig 命令输出中。

另请参见

以下资源可用于 Oracle VM Server for x86:

关于作者

Gregory King 作为优秀实践高级技术顾问加入 Oracle VM 产品管理团队,专门负责 Oracle VM Sever。自 1993 年以来,Greg 在高可用性、网络、存储和存储网络等方面(包括生产数据中心的 SAN 启动和服务器自动化技术)积累了大量实践经验。他与团队的主要职责是开发和记录解决方案(包括优秀实践),并促进用户更深入地了解 Oracle VM 的内部工作方式,让产品给人们带来更多价值。

Suzanne Zorn 已从事计算机技术文档写作和编辑工作长达 20 多年。此前,Suzanne 担任过 Sun Microsystems 专业服务部的专业顾问,专门从事系统配置和规划。Suzanne 拥有巴克内尔大学的计算机科学与工程学士学位以及伦斯勒理工学院的计算机科学硕士学位。

修订版 1.1,更新“网络角色(通道)”部分,2013 年 6 月 18 日

关注我们:
博客 | Facebook | Twitter | YouTube