【Ovirt 笔记】组件与技术原理分析和整理

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

分析整理的版本为 Ovirt 3.4.5 版本。

1. 概述

1.1 engine

  • ovirt-engine 是为 oVirt 虚拟化环境提供了一个集中管理的平台(管理节点)。
【Ovirt 笔记】组件与技术原理分析和整理_第1张图片
ovirt-engine 架构

应用服务器(ovirt-Wildfly)

  • Wildfly 是一个 JavaEE 应用服务器,是 Jboss 服务器的 as(轻量级) 版本。
[root@localhost jbossas]# pwd
/usr/share/jbossas
[root@localhost jbossas]# ll
total 40
drwxr-xr-x. 3 jboss jboss  4096 Jan  9 20:18 bin
drwxr-xr-x. 3 jboss jboss    20 Jan  9 20:18 bundles
drwxr-xr-x. 5 jboss jboss    52 Jan  9 20:18 docs
lrwxrwxrwx. 1 jboss jboss    23 Jan  9 20:18 domain -> /var/lib/jbossas/domain
-rw-r--r--. 1 jboss jboss   419 Oct 21  2014 JBossEULA.txt
lrwxrwxrwx. 1 jboss jboss    33 Jan  9 20:18 jboss-modules.jar -> /usr/share/java/jboss-modules.jar
-rw-r--r--. 1 jboss jboss 26530 Oct 21  2014 LICENSE.txt
drwxr-xr-x. 3 jboss jboss    20 Jan  9 20:18 modules
lrwxrwxrwx. 1 jboss jboss    27 Jan  9 20:18 standalone -> /var/lib/jbossas/standalone
-rw-r--r--. 1 jboss jboss    66 Oct 21  2014 version.txt
drwxr-xr-x. 4 jboss jboss   158 Jan  9 20:18 welcome-content
目录结构 说明
bin 常规 bin目录,可以执行的脚本文件,比如 ./standalone.sh 可以启动服务器。
docs 服务器的基础文件。
domain 启动方式有两种,一种是 standalone,一种是 domain 分布式的启动。
modules 配置 wildfly 启动时加载的 module。
standalone wildfly 启动的一种方式,里面放置了相关的配置。
welcome-content wildfly 启动后一些默认的显示页面文件。
jboss-modules.jar 在 wildfly 启动时加载相关的 jar 文件。
  • Wildfly modules 是一个适用于 Java 模块化类加载以及执行环境的实现。

    • 传统的 Java 加载类,通过类加载器一个个加载类,现在将一个 jar 文件定义成一个 module,该 module 仅链接依赖其他 module,而不再依赖其他任何资源。
  • Wildfly module 实现了一个线程安全的,快速的高并发的类加载器委派模型,再加上一个可拓展的模块解析引擎,形成一个独特的,简单的,强大的应用程序执行和分布系统。

  • engine 的启动采用了这种方式。

[root@localhost config]# jps -vVm
10975 jboss-modules.jar -mp /var/lib/ovirt-engine/jboss_runtime/modules/00-ovirt-engine-modules:/var/lib/ovirt-engine/jboss_runtime/modules/01-jbossas-modules -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -c ovirt-engine.xml -XX:+TieredCompilation -Xms1g -Xmx1g -XX:PermSize=256m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.awt.headless=true -Djsse.enableSNIExtension=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/ovirt-engine/dump -Djava.util.logging.manager=org.jboss.logmanager -Dlogging.configuration=file:///var/lib/ovirt-engine/jboss_runtime/config/ovirt-engine-logging.properties -Dorg.jboss.resolver.warning=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djboss.modules.write-indexes=false -Djboss.server.default.config=ovirt-engine -Djboss.home.dir=/usr/share/jbossas -Djboss.server.base.dir=/usr/share/ovirt-engine -Djboss.server.data.dir=/var/lib/ovirt-engine -Djboss.server.log.dir=/var/log/ovirt-engine -Djboss.server.config.dir=/var/lib/ovirt-engine/jboss_runtime/config -Djboss.server.temp.dir=/var/lib/ovirt-engine/jboss_runtime/tmp -Djboss.controller.temp.dir=/var/lib/ovirt-engine/jboss_runtime/tmp

用户门户(User Portal)

  • 为用户提供了一个近似于物理 PC 的桌面系统。
    • 用户可以使用浏览器访问,并通过用户门户(User Portal)来访问分配给他们的虚拟桌面资源(通过 SPICE/VNC)。
    • 系统管理员需要为每个用户设定可能访问的资源及相关权限。
  • 用户门户(User Portal)的用户有两种类型。
    • 标准用户可以启动、停止和使用分配给他们的虚拟桌面(无法编辑虚拟机配置)。
    • 高级用户还可以执行一些额外的管理任务(如创建、删除、编辑虚拟机,管理虚拟磁盘和网络接口等)。

管理门户(Admin Portal)

  • 管理员通过管理门户(Admin Portal)监控、创建并维护整个虚拟环境中的所有资源(计算、网络、存储)。

目录服务(Directory Service)

  • 目录服务提供了一个基于网络的、集中存储的用户与机构信息。
    • 这些信息包括应用程序的设置、用户档案资料、用户组数据、策略信息和访问控制信息。
  • ovirt-engine 支持 Active Directory,Identity Management,OpenLDAP 和 Red Hat Directory Server 9 所提供的目录服务,还包括了一个本地内部域(internal)。

报表

  • ovirt-engine 在安装时会同时安装一个数据仓库,它被用于收集监控主机、虚拟机和存储所产生的数据。
  • ovirt-engine 预先提供了一组报表,用户可以使用任何支持 SQL 查询的工具来创建新的报表。
  • ovirt-engine 在安装过程中会在 Postgres 数据库服务器上创建两个数据库:engine 与 ovirt_engine_history。
    • ovirt-engine 是保存数据的主数据库,保存了与虚拟环境相关的数据(如虚拟环境的状态、配置等数据)。
    • ovirt_engine_history 保存了配置信息和各种性能统计数据,这些数据是根据不同时刻从 engine 数据库中收集而来。
      • 系统在每分钟都会检查 engine 数据库中的配置,任何改变都会被记录在 ovirt_engine_history 数据库中。
  • 报表功能是通过 ovirt-engine-dwhd 服务实现的。

API

  • ovirt-engine 可以通过 cli 或 RestAPI 与外部管理系统做进一步的整合。

1.2 Node

  • 一个 oVirt 虚拟化环境包括一个或多个用于运行虚拟机的主机(计算节点)。
【Ovirt 笔记】组件与技术原理分析和整理_第2张图片
ovirt-node

KVM(Kernel-based Virtual Machine)

  • KVM 是一个可加载的内核模块,通过使用 Inter-VT 或 AMD-V 等硬件虚拟化扩展技术来提供虚拟化功能。
  • 通过以下两个命令可以检查计算节点的处理器是否支持虚拟化。
[root@node118 ~]# lscpu | grep Virt
Virtualization:        VT-x
[root@node118 ~]# grep -E "(vmx|svm)" --color=always /proc/cpuinfo
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap
  • 可能需要在 BIOS 中启用虚拟化支持。
  • 要使用 KVM,还需要加载内核。
    • 通过以下命令可以查看 KVM 内核是否已经加载。
[root@node ~]# lsmod | grep kvm
kvm_intel             148081  0 
kvm                   461126  1 kvm_intel
  • 检验嵌套虚拟化功能是否已被激活
[root@node118 modprobe.d]# systool -m kvm_intel -v | grep nested
    nested              = "Y"
  • 在宿主机启用 kvm_intel 模块的嵌套虚拟化功能
# modprobe -r kvm_intel
# modprobe kvm_intel nested=1
  • 使嵌套虚拟化永久生效(可参考 Kernel modules#Setting module options)
vi /etc/modprobe.d/modprobe.conf
options kvm_intel nested=1

Qemu

  • Qemu 是一个多平台的提供全仿真功能的仿真器(emulator),它会仿真包括一个或多个处理器以及外设在内的整个系统。
    • Qemu、KVM 及带有虚拟化功能扩展的处理器组合在一起就可以提供虚拟化功能。

Vdsm(Virtual Desktop Server Manager)

  • 相当于 ovirt-engine 在 ovirt-node 上的一个代理服务进程。
  • ovirt-engine 通过 Vdsm 暴露的 API 管理虚拟化环境下的所有资源(计算、网络、存储),执行相关的监控配置任务、数据统计、日志收集。
  • 每个计算节点上都会运行一个 Vdsm 服务(监听端口号默认为 54321)来接收 ovirt-engine 发出的管理命令。

libvirt

  • libvirt 是一个底层工具库,被用来协调虚拟机及其相关虚拟设备的管理。
    • 当 ovirt-engine 发出一个操作虚拟机的相关命令时(如启动虚拟机、停止虚拟机),Vdsm 则调用目标计算节点上的 libvirt 的相应指令来执行操作。

SPM(Storage Pool Manager)

  • SPM 是存储池管理器,是虚拟化环境中与存储管理相关的重要概念。
  • SPM 是分配给一个数据中心中某个主机(计算节点)的角色,一个数据中心中的 SPM 主机只有一个。
    • SPM 主机负责数据中心中所有与存储、存储域管理相关的业务。
    • SPM 角色可以在同一个数据中心中的不同主机(计算节点)间进行迁移。
    • 同一个数据中心中的所有主机(计算节点)都必须可以访问这个数据中心中定义的所有存储域。
  • ovirt-engine 确保 SPM 一直处于有效的状态,如果 SPM 主机出现问题,ovirt-engine 会重新发起 SPM 选举,确定新的 SPM 主机。

1.3 数据中心

  • 一个 oVirt 虚拟化环境中可以有多个数据中心。数据中心是虚拟化环境中的根容器(最高一级的逻辑项),它包括以下三个子容器(子项)。

集群容器

  • 集群容器用来保存与集群相关的信息。
    • 集群由一个至多个主机(计算节点)组成,具有相互兼容的处理器内核。
    • 一个集群组成了一个虚拟机的迁移域,虚拟机可以被实时迁移到同一集群中的其它主机(计算节点)上。
    • 一个数据中心可以包括多个集群,一个集群可以包括多个主机(计算节点)。

存储容器

  • 存储容器用来保存存储类型、存储域的信息,以及存储域间的连接信息。
  • 存储域在数据中心一级上定义,并可以被数据中心的所有集群使用(即可以被集群中的所有主机挂载)。

网络容器

  • 网络容器用来保存与数据中心中的逻辑网络相关的信息,如网络地址、VLAN 标签等信息。
  • 逻辑网络在数据中心一级上定义,并可以在集群一级上使用。

1.4 存储

  • oVirt 虚拟化环境使用一个集中的存储系统来保存虚拟磁盘镜像、模板、快照和 ISO 文件。
  • 存储被分为由各个存储域组成的存储池,一个数据中心只有一个存储池。
  • 存储域由一组存储空间和代表这些存储空间内部结构的元数据所组成。
  • 目前 oVirt 虚拟化环境包含有三种存储域类型。
    • 数据存储域。
    • 导出存储域。
    • ISO 存储域。
  • 每个数据中心都必须包括一个数据存储域,而每个数据存储域也只能关联一个数据中心。
  • 存储域用于提供资源共享,因此数据中心的所有主机(计算节点)都必须可以访问所有的存储域。

1.5 网络

  • oVirt 虚拟化环境的网络架构提供该环境中不同对象间的网络连接,同时还可以用来实现网络隔离。
【Ovirt 笔记】组件与技术原理分析和整理_第3张图片
网络架构
  • 用来处理虚拟机间网络连接的逻辑网络是通过主机(计算节点)上的基于软件的网桥实现的。
    • 默认情况 下,ovirt-engine 在安装过程中会创建一个默认的逻辑网络。
    • 管理员还可以添加专用的存储逻辑网络和专用的显示逻辑网络。

2. 原理

2.1 存储

  • 从底层往上,最底层为硬盘,多个硬盘可以组成 RAID 组;无论单个硬盘还是 RAID 组,可以做成物理卷(PV);多个物理卷(PV)捏在一起构成卷组(VG);可以从卷组(VG)上切出很多个逻辑卷(LV)。
  • 到逻辑卷(LV)这一层为止,数据一直都是以块(Block)的形式存在,这时提供出来的服务就是块存储服务,可以通过 FC 协议或者 iSCSI 协议访问逻辑卷(LV),映射到主机端本地,成为一个裸设备。
  • 在主机端可以直接在上面安装数据库,也可以格式化成文件系统后交给应用程序使用,这是一个标准的 SAN 存储设备的访问模式,在 网络间传送的是块
  • 也可以在本地做文件系统,之后以 NFS/CIFS 协议挂载,映射到本地目录,直接以文件形式访问,这就是 NAS 访问的模式,在 网络间传送的是文件

2.1.1 存储域

  • 存储域是一系列具有公共存储接口的镜像的集合,存储域中包括了虚拟机模板、快照、数据镜像、ISO 文件以及存储域本身的元数据。
  • 一个存储域可以由块设备(块存储)组成,也可以由文件系统(文件存储)组成。
    • 文件存储:所有的 NAS(NFS,GlusterFS 或其它 POSIX 兼容的文件系统,主机的本地存储)都属于文件存储,如果存储域由文件存储组成,则其上的虚拟磁盘、模板、快照都是文件。
      • ovirt 虚拟化环境并不直接管理基于文件的存储(它们都由外部系统负责管理),如 NFS 存储由 NFS 服务器或其它第三方网络存储服务器管理。主机则可以管理它自身的本地文件存储系统。
    • 块存储:在 SAN(iSCSI,FCP)中的存储都属于块存储,如果存储域由块存储组成,则其上的虚拟磁盘、模板、快照都是一个逻辑卷(LV)。
      • 块存储使用未格式化的块设备,这些块设备(相当于 PV)被 LVM 合并为卷组,Vdsm 通过扫描卷组在 LVM 之上添加集群逻辑,当 Vdsm 发现卷组变化时,会通知相应的主机更新其卷组信息。
      • 主机把卷组分为不同的逻辑卷(LV),并在磁盘上保存逻辑卷的元数据,当在已存在的存储域中添加新的存储空间时,ovirt-engine 会通知每台主机上的 Vdsm 更新卷组信息。
      • SPM 主机上的 LVM 会处理块存储环境中发生的变化(如创建逻辑卷、扩展或删除逻辑卷、添加新的 LUN),然后 SPM 主机上的 Vdsm 会将变化信息(元数据)同步至集群中的所有主机。

存储域类型

  • oVirt 虚拟化环境支持的存储域可以被分为以下几类。
    • 数据(Data)存储域:保存 ovirt 虚拟化环境中的所有虚拟机的磁盘镜像。
      • 这些磁盘镜像中包括安装的操作系统或由虚拟机产生或保存的数据。
      • 数据存储域支持 NFS、iSCSI、FCP、GlusterFS 或 POSIX 兼容的存储系统。
    • 导出(Export)存储域:可以在不同数据中心间转移磁盘镜像和虚拟机模板的一个中间存储,可以用来保存虚拟机的备份。
      • 导出存储域支持 NFS 存储。
      • 一个导出域可以被多个不同的数据中心访问,但同时只能被一个数据中心使用。
    • ISO 存储域:用于存储 ISO 文件。在 ovirt 虚拟化环境中,ISO 文件通常代表了操作系统的安装介质、应用程序安装介质和 guest 代理安装介质。
      • 这些镜像会被附加到虚拟机上,并象使用物理安装介质一样启动系统。
      • ISO 存储域为数据中心中的所有主机提供了一组共享的 ISO 文件,这样所有的主机不再需要物理安装介质。

2.1.2 磁盘镜像

磁盘格式

  • QCOW2(QEMU copy on write V2)
    • 是虚拟磁盘镜像的一种存储格式,可以把物理存储层和逻辑存储层分隔开。
    • 在逻辑块和物理块之间创建了一个映射,每个逻辑块都会被映射到相应的物理块上。
    • 可以只保存物理存储上变化的数据,这个特性是存储空间 over-commitment(超分)功能和虚拟机快照功能得以实现的基础。
  • RAW
    • 数据将没有特定的格式,对虚拟磁盘的操作也不需要主机进行特殊处理,比使用 QCOW2 格式的虚拟磁盘有更好的性能。
    • 向虚拟磁盘写数据时,I/O 系统会在物理存储和逻辑卷中写相同的数据。
    • RAW 格式的虚拟磁盘在创建时就会被分配和所定义的镜像大小相同的存储空间(预先分配)。
    • RAW 镜像最大的缺陷在于不支持快照。

存储分配策略

  • 预分配存储(Preallocated Storage),克隆方式。
    • 所需要的存储空间在虚拟机创建前需要被完全分配。
    • 在进行写操作时不需要进行磁盘空间分配的动作,有更好的写性能。
    • 存储的大小不能被扩展,失去了灵活性。
    • 会降低 ovirt-engine 进行存储 over-commitment(超分)的能力。
    • 适用于需要大量 I/O 操作(特别是写操作比较频繁时),并对存储速率有较高要求的虚拟机,一般情况下,作为应用服务器的虚拟机推荐使用预分配存储策略。
  • 稀疏分配存储(Sparsely Allocated Storage),Thin 方式。
    • 在创建虚拟机时,为虚拟磁盘镜像设定一个存储空间上限,而磁盘镜像在开始时并不使用任何存储域中的存储空间。
    • 当虚拟机需要向磁盘中写数据时,磁盘会从存储域中获得一定的存储空间(默认为 1G),当磁盘数据量达到所设置的磁盘空间上限时将不会再为虚拟磁盘增加容量。

2.1.3 元数据

  • 存储元数据包括:存储域元数据,存储池信息,模板与虚拟机镜像元数据。

存储目录结构

  • ovirt-engine 在启动时会将每个数据中心中的存储域配置信息下发给各个主机上的 Vdsm 实例,Vdsm 会根据接收到的存储域配置信息将相关存储域挂载至主机(计算节点)。
  • 挂载成功后,可以在每个主机的对应目录查看到存储域的相关信息(包括元数据)。
  • 元数据存储目录。
/rhev/data-center/
存储目录结构
  • 文件存储类型的存储域与块设备类型的存储域的元数据存储位置不同。
    • 块设备类型存储域的元数据是存放在主存储域(Master)对应的卷组(VG)的标签(Tag)中,而不是 dom_md 目录下的 metadata 文件中。
    • dom_md/metadata 存放的是该存储域下虚拟机磁盘镜像(LV)的元数据集,每个虚拟机磁盘镜像(LV)的元数据存放在 metadata 块设备存储空间的某一个索引位置上,该索引位置信息则保存在虚拟机磁盘镜像所在的逻辑卷(LV)的标签(Tag)上。
    • 块设备存储域元数据的具体细节由 Vdsm 负责维护。

2.1.4 SPM(Storage Pool Manager)

  • oVirt 虚拟化环境使用元数据描述存储域的内部结构。
  • 所有主机会使用 " 一写,多读 " 的机制处理存储域元数据。能修改存储域元数据的主机就是 SPM 主机。
【Ovirt 笔记】组件与技术原理分析和整理_第4张图片
存储域元数据读写数据流
  • SPM 主机负责协调数据中心内所有存储域元数据的变更操作,比如创建删除磁盘镜像、创建合并快照、在存储域之间复制镜像、创建虚拟机模板、块设备存储分配等。
  • 一个数据中心只能有一个 SPM 主机,数据中心中的其它主机对存储域元数据信息只有读权限。
  • 主机(计算节点)有两种方式升级为 SPM 主机。
    • 人为通过管理门户直接将某主机设置为 SPM(通过 ovirt-engine 下发命令)
    • 由 ovirt-engine 根据 SPM 选举机制确定 SPM。
  • 设置某一主机为 SPM 时,ovirt-engine 将向该主机上的 Vdsm 发送 spmStart 命令,将尝试获取一个叫 storage-centric 的租约,成功获取到租约,该主机就升级为 SPM 主机并一直持有 storage-centric 租约,直到失去 SPM 角色或该 SPM 主机因为异常被 ovirt-engine 移出集群或数据中心。
  • 拥有 storage-centric 租约的主机(SPM 主机)对存储域元数据具有 " " 权限。
  • storage-centric 租约直接被写入到主存储域(Master Storage Domain)上的一个特殊的名字叫 leases 的逻辑卷上(文件存储则是写到一个名为 leases 的文件)。
    • 主存储域(Master Storage Domain),Vdsm 会把数据中心中第一个被创建的存储域(SD)作为 Master。对于块存储,磁盘镜像等虚拟机相关的元数据都存放在 Master 上。

2.1.5 sanlock

  • sanlock 是一个基于 SAN 的分布式锁管理器。
  • 集群中的每个节点都各自运行 sanlock 服务,锁的状态都被写到了共享存储上,使用 Disk Paxos 算法读写共享存储以实现对分布式锁的获取、释放和超时。
  • oVirt 使用了 sanlock 作为其存储域的分布式锁管理器。
    • oVirt 支持各类后端,如 NFS、iSCSI、FCoE、GlusterFS 等,其存储域是分布式的,由集群共同管理,其中一个节点充当领导节点,领导节点失效时能自动选举。
    • sanlock 用于保证 领导节点的唯一性,用于保护共享存储设备上的存储域的 元数据的一致性,以及保护同一个 虚拟机镜像不会被多台虚拟机同时使用
  • 起初 oVirt 存储域 v1 版使用了自身实现的集群锁,其算法和 sanlock 的 Delta Lease 一致,后续使用了 sanlock 作为存储域 v3 版的分布式锁。
  • libvirt 作为计算节点上的虚拟化管理工具,也使用了 sanlock,它的 sanlock 插件可以在虚拟机启动前为所有的磁盘请求锁保护,以防止在意外情况下有两台虚拟机使用同一个磁盘镜像。

资源的锁定

  • 需要进行资源锁定的应用程序可以在 sanlock 中进行注册,已经注册的应用程序可以请求 sanlock 锁定某个资源,从而使其它程序无法访问被锁定的资源。例如,Vdsm 可以请求 sanlock 锁定 SPM 角色资源,而不需要自己锁定它。
  • 每个存储域都有一个 lockspace 区,锁定状态被记录在 lockspace 区的磁盘中,SPM 角色资源只能分配给一个 " 活跃的 " 主机,sanlock 需要检查 SPM 主机是否是 " 活跃的 "。SPM 主机连接到存储域时,会更新从 ovirt-engine 获得的 hostid,并且定期在 lockspace 中写一个时间戳(timestamp)。ids 逻辑卷会记录每个 hostid,并在每个主机更新 hostid 时进行相应的更新。sanlock 根据主机的 hostid 和时间戳决定它是否处于 " 活跃 " 状态。
  • 资源的使用情况被记录在 leases 逻辑卷的磁盘中。当磁盘中代表某个资源的数据被更新为带有某个进程的 id 时,系统则认为该资源被这个进程所占用。具体到 SPM 角色资源,当它被占用时,它的数据会被更新为 SPM 主机的 hostid。

资源的释放

  • 如果主机无法从 ovirt-engine 重复获得它的 hostid,那么这个主机就会失去它所占有的在 lockspace 中记录的所有的资源。 sanlock 会更新相应的资源记录来标识这些资源不再被占用。
  • 当 SPM 主机在一定的时间内无法更新存储域的 lockspace 中的时间戳时,这个主机上的 sanlock 会要求 Vdsm 进程释放它所占用的资源。如果 Vdsm 进程接受了这个请求,它将释放它所占用的资源(即 lockspace 中的 SPM 角色资源就可以被其它主机使用)。如果 SPM 主机上的 Vdsm 无法接受释放资源的请求,主机上的 sanlock 就会使用 kill 命令终止 Vdsm 进程。如果 kill 命令运行失败,sanlock 会使用 sigkill 命令终止 Vdsm 进程。如果 sigkill 命令仍然无法终止进程,sanlock 会通过 watchdog 守护进程重启 sanlock 所在的主机。
  • 每次当主机的 Vdsm 更新它的 hostid 并更新 lockspace 中的时间戳时,watchdog 守护进程都会收到一个 pet。当 Vdsm 不能进行这些操作时,watchdog 守护进程将无法收到 pet。如果 watchdog 守护进程在一定时间内仍然没有收到 pet,它将会重启主机。这将保证 SPM 资源可以被释放,从而可以被其它主机使用。

2.2 网络

2.2.1 基础网络

  • ovirt 虚拟化环境通过使用 网卡(NIC)、网桥(Bridge)、网络绑定(Bond)、虚拟网卡(vNIC)、虚拟局域网(VLAN)为虚拟机、主机、虚拟(逻辑)网络提供网络服务。
    • 网卡,网桥,虚拟网卡使得主机,虚拟机,本地网络,外部网络之间可以相互通信。
    • Bond 与 VLAN 可以增强网络的安全、性能及容灾能力。

网卡(NIC)

  • 网络接口控制器(Network Interface Controller)NIC,用于将计算机连接至网络的网络适配器,工作在网络层和数据链路层来为所在的机器提供网络连接功能。
    • 在 ovirt 虚拟化环境中的主机(计算节点)都最少需要有一个 NIC。
    • 一个物理网卡可以有多个虚拟网卡(vNIC)和它相连,而一个虚拟网卡可以看做是一个虚拟机的物理网卡。
    • 为了区分虚拟网卡和物理网卡,ovirt-engine 会为每个虚拟网卡分配一个独立的 MAC 地址(engine-config -s MacPoolRanges 可以配置 MAC 地址池)。

网桥(Bridge)

  • 网桥(bridge)是数据包交换网络中进行数据包转发的软件设备。
    • 通过使用网桥,多个网络接口设备可以共享同一个物理网卡的连接,而每个网络接口设备都会以独立的物理设备的形式出现在网络中。
    • 网桥会检查一个数据包的源地址来决定相关的目标地址,一旦获得了目标地址的信息,它会在一个表中添加这个地址以供以后使用。
    • 通过使用网桥,主机可以把网络数据重新定向到使用虚拟网卡的、相应的虚拟机上。
  • 在 ovirt 虚拟化环境中,逻辑网络是通过网桥来实现的。一个 IP 地址会分配给网桥而不是主机本身的物理网络接口,这个 IP 地址不需要和连接到这个网桥上的虚拟机的网络处于同一个子网中。
    • 如果分配给网桥的 IP 地址和虚拟机处于同一个子网中,网桥所在的主机将可以被虚拟机直接访问。虚拟机通过虚拟网卡连接到逻辑网络中,虚拟机上的每个虚拟网卡都可以通过 DHCP 或静态分配的方式来获得 IP 地址。
    • 网桥和以太网连接都可以设置自定义属性。Vdsm 会把网络定义和自定义属性传给设置网络的 hook 脚本。
  • 通过 brctl show 命令可以查看网桥。
[root@node ~]# brctl show
bridge name bridge id       STP enabled interfaces
ovirtmgmt   8000.000c29bd6658   no      eno16780032

网络绑定(Bond)

  • 绑定(bond)是由多个网卡组合成的一个单一的、由软件定义的网络设备。
    • 一个绑定(bond)由多个网卡组成,可以提供比单一网卡更高的网络传输速度。
    • 提供更好的网络容错功能(绑定只有在所有的网卡都出现问题时才会停止工作)。
    • 绑定必须由相同型号的网卡组成。
      • 绑定设备的数据包传输算法是由绑定的模式所决定的,绑定模式共有 7 种 (mode-0 ~ mode-6),其中 mode-1 ~ mode-4 支持虚拟机网络(使用网桥)和非虚拟机网络(无网桥)。
      • mode-0、mode-5、mode-6 只支持非虚拟机网络(无网桥)。
      • ovirt 虚拟化环境默认使用的是 mode-4。

虚拟网卡(vNIC)

  • 虚拟网卡是基于主机物理网卡的虚拟网络接口。每一个主机可以有多个物理网卡,每个物理网卡可以有多个虚拟网卡。
    • 为虚拟机添加一个虚拟网卡时,ovirt-engine 会在虚拟机、虚拟网卡本身和虚拟网卡所基于的主机的物理网卡间创建一定的关联。
    • 当虚拟机第一次启动时,libvirt 会为虚拟网卡分配一个 PCI 地址。
    • 这样,虚拟机就可以使用 MAC 地址和 PCI 地址(如 eth0)指定虚拟网卡。
  • 如果虚拟机是通过模板或快照创建。
    • 如果模板或快照中已经包括了 PCI 地址,通过这个模板或快照所创建的虚拟机上的虚拟网卡的顺序会 基于这些 PCI 地址和 MAC 地址按顺序 分配。
    • 如果模板中没有包括 PCI 地址,基于这个模板所创建的虚拟机上的虚拟网卡会根据 虚拟机网卡的名称 来分配新的 MAC 地址。
    • 如果快照中没有包括 PCI 地址,ovirt-engine 会 根据快照 为虚拟网卡分配新的 MAC 地址。
  • 创建后虚拟网卡被添加到网桥设备中,网桥将用来处理虚拟机和虚拟机网络的连接。
  • 通过 ip addr 命令可以查看虚拟网卡。
[root@node ~]# ip addr
.....
4: sdcvmnet:  mtu 1500 qdisc noqueue state UP 
    link/ether 00:0c:29:bd:66:58 brd ff:ff:ff:ff:ff:ff
    inet 192.168.xxx.xx/21 brd 192.168.xxx.255 scope global sdcvmnet
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:febd:6658/64 scope link 
       valid_lft forever preferred_lft forever

2.2.2 集群网络

  • 一个数据中心就是由多个集群组成的一个逻辑组,而一个集群则是由多个主机组成的一个逻辑组。在一个集群中的所有主机都可以访问相同的存储域,同时它们也在集群这一层来关联逻辑网络。

逻辑网络(Logical Network)

  • 逻辑网络使得 ovirt 虚拟化环境可以根据网络数据类型对不同网络进行隔离。
    • 可以创建存储网络、显示网络和迁移网络把不同的网络流量分离,从而提高系统性能,以及便于故障排除。
    • 使用相似要求和使用情况的多个网络通信可以组成一个逻辑网络。
    • 安装 ovirt-engine 时默认创建的 ovirtmgmt 网络则作为处理 ovirt-engine 和计算节点(VDSM)间的 管理通信网络
  • 所有逻辑网络都可以设置为 " 必需的 " 或 " 可选的 ",二者选一。
  • ovirt 虚拟化环境中的每个虚拟机的逻辑网络都必须由一个主机上的一个网桥设备支持。
    • ovirt-engine 会自动为虚拟机的逻辑网络创建所需要的网桥设备。
    • ovirt-engine 为虚拟机的逻辑网络所创建的网桥(Bridge)设备需要和主机上的一个网络接口(NIC)关联。
    • 当虚拟机被创建并被添加到一个特定的逻辑网络中时,它们的虚拟网卡(vNIC)会被添加到逻辑网络所在的网桥中,这些虚拟机可以和连接到该网桥中的其它设备进行网络通信。
    • 如果和网桥相关联的主机网络接口(NIC)已经被其它网络所使用,则新加入的网络接口将可以共享那些已经连接到主机网络接口中的网络。

必须的网络(Required)

  • 一个 " 必须的 " 属性的逻辑网络对一个集群中的 所有主机有效
  • 当一个主机上的 " 必须的 " 网络无法工作时,其上运行的虚拟机会被迁移到另外一个主机上,具体的迁移过程取决于选择的调度策略。
  • 当一个逻辑网络创建并加入到集群后,网络类型默认为 " 必须的 "。

可选的网络(Optional)

  • " 可选的 " 网络只在 设置的主机上有效
  • 有或没有 " 可选的 " 网络不会影响到一个主机的 " 可操作 " 状态。
  • 当一个 " 可选的 " 网络无法工作时,使用它的虚拟机不会被迁移到另一个主机上。

虚拟机网络(VM network)

  • 虚拟机网络是只处理 虚拟机网络流量 的逻辑网络。
  • 虚拟机网络可以是 " 必须的 ",也可以是 " 可选的 "。
  • 使用一个 " 可选的 " 虚拟机网络的虚拟机只会在设置了该网络的主机上运行。

端口镜像(port mirroring)

  • 端口镜像把指定 逻辑网络和主机上第三层网络流量 复制到一个虚拟机的虚拟网络接口上。
    • 通过这个虚拟机就可以进行网络纠错、网络优化、网络入侵检测以及对在同一个主机和逻辑网络中运行的虚拟机进行监控。
  • 端口镜像只复制一个主机和一个逻辑网络内部的网络数据,不会增加这个主机以外的网络流量。
    • 启用了端口镜像功能的主机会比其它主机消耗更多 CPU 和内存资源。
  • 端口镜像可以通过 逻辑网络的 vNIC 配置集 被启用或禁用。
    • 不支持对在配置集中启用了端口镜像功能的 vNIC 进行 " 热插 "。
    • 当 vNIC 配置集被附加到一个虚拟机时,端口镜像功能就无法改变。

2.2.3 主机网络

网桥配置

  • 在虚拟化环境中最简单的配置为 " 网桥 + 网卡 " 的配置,通过网桥将一个或多个虚拟机连接至主机的物理网卡。
【Ovirt 笔记】组件与技术原理分析和整理_第5张图片
" 网桥 + 网卡 " 的配置
  • 安装 ovirt-engine 时自动创建 ovirtmgmt 网桥,ovirt-engine 在主机上安装 Vdsm,Vdsm 的安装过程中会创建 ovirtmgmt 网桥,ovirtmgmt 网桥可以获得主机的 IP 地址实现主机的管理网络功能。
[root@node ~]# virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 vdsm-sdcvmnet        active     yes           yes

VLAN 配置

  • 使用 VLAN 可以为网络中的数据传输提供了一个安全的通道。
  • 使用多个 VLAN 可以实现把多个网桥连接到一个网卡的功能。
【Ovirt 笔记】组件与技术原理分析和整理_第6张图片
VLAN 配置

网桥与 Bond 配置

  • 多个主机网卡通过 Bond 和同一个网桥和网络进行连接。
【Ovirt 笔记】组件与技术原理分析和整理_第7张图片
网桥与 Bond 配置
  • 通过 Bond 创建一个逻辑连接把两个(或更多)物理网卡(NIC)连接起来。
  • 这种配置可以提供网卡容错、增加网络带宽等特性,具体取决于所配置的 bond-mode。

多网桥、多 VLAN 与单网卡配置

  • 配置把一个网卡连接到两个 VLAN(需要网络交换机的配合,相应的上联口需要配置为 trunk 模式)。
  • 主机使用两个独立的 vNIC 分别处理两个 VLAN 的网络数据,每个 VLAN 通过 vNIC 连接到不同的网桥中,在此基础上,每个网桥可以被多个虚拟机使用。
【Ovirt 笔记】组件与技术原理分析和整理_第8张图片
多网桥、多 VLAN 与单网卡配置

多网桥、多 VLAN 与单 Bond 配置

  • 使用多个网卡组成一个 Bond 设备连接到多个 VLAN 配置。
【Ovirt 笔记】组件与技术原理分析和整理_第9张图片
多网桥、多 VLAN 与单 Bond 配置
  • 配置中的 VLAN 通过 Bond 设备和网卡进行连接。
  • 每个 VLAN 连接到不同的网桥,每个网桥可以连接一个或多个虚拟机。

你可能感兴趣的:(【Ovirt 笔记】组件与技术原理分析和整理)