跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.5

10 基本 VM 客户机管理 编辑源文件

大多数管理任务,例如启动或停止 VM 客户机,都可以使用图形应用程序 Virtual Machine Manager 或在命令行中使用 virsh 来完成。 只能从图形用户界面通过 VNC 连接到图形控制台。

Note
注意:管理远程 VM 主机服务器上的 VM 客户机

如果启动在 VM 主机服务器上,则 libvirt 工具 Virtual Machine Manager、virshvirt-viewer 可用于管理主机上的 VM 客户机。 但是,也可以管理远程 VM 主机服务器上的 VM 客户机。 这需要在主机上配置 libvirt 的远程访问。 有关说明,请参阅 第 11 章,连接和授权

要连接到这样的远程主机,需要按照 第 11.2.2 节,“使用 Virtual Machine Manager 管理连接” 中所述设置连接。 如果使用 virshvirt-viewer 连接到远程主机,则需要使用参数 -c 指定连接 URI(例如,virsh -c qemu+tls://saturn.example.com/systemvirsh -c xen+ssh://)。 连接 URI 的形式取决于连接类型和虚拟机管理程序——请参阅 第 11.2 节,“连接到 VM 主机服务器” 以获取详细信息。

本章中的示例均未附带连接 URI。

10.1 列出 VM 客户机 编辑源文件

VM 客户机列表显示由 VM 主机服务器上的 libvirt 管理的所有 VM 客户机。

10.1.1 使用 Virtual Machine Manager 列出 VM 客户机 编辑源文件

Virtual Machine Manager 的主窗口列出与它连接的每个 VM 主机服务器的所有 VM 客户机。 每个 VM 客户机条目包含机器的名称、其状态(运行中暂停已关闭)显示为图标和文字,以及 CPU 使用率条。

10.1.2 使用 virsh 列出 VM 客户机 编辑源文件

使用命令 virsh list 获取 VM 客户机列表

列出所有正在运行的客户机
> virsh list
列出所有正在运行和非活动的客户机
> virsh list --all

有关更多信息和更多选项,请参阅 virsh help listman 1 virsh

10.2 通过控制台访问 VM 客户机 编辑源文件

可以通过 VNC 连接(图形控制台)或(如果客户机操作系统支持)通过串行控制台访问 VM 客户机。

10.2.1 打开图形控制台 编辑源文件

打开 VM 客户机的图形控制台让您通过 VNC 连接像物理主机一样与机器交互。 如果访问 VNC 服务器需要身份验证,系统将提示您输入用户名(如果适用)和密码。

当您单击 VNC 控制台时,光标被“抓取”并且无法在控制台外部使用。 要释放它,请按 AltCtrl

Tip
提示:无缝(绝对)光标移动

要防止控制台抓取光标并启用无缝光标移动,请将平板输入设备添加到 VM 客户机。 有关更多信息,请参阅 第 13.5 节,“输入设备”

某些键组合,例如 CtrlAltDel,由主机系统解释,不会传递到 VM 客户机。 要将此类键组合传递到 VM 客户机,请从 VNC 窗口打开“发送键”菜单,然后选择所需的键组合条目。 “发送键”菜单仅在使用 Virtual Machine Manager 和 virt-viewer 时可用。 使用 Virtual Machine Manager,还可以使用“粘滞键”功能,如 提示:将键组合传递到虚拟机 中所述。

Note
注意:支持的 VNC 查看器

原则上,所有 VNC 查看器都可以连接到 VM 客户机的控制台。 但是,如果您使用 SASL 身份验证和/或 TLS/SSL 连接访问客户机,则选项有限。 诸如 tightvnctigervnc 之类的常用 VNC 查看器均不支持 SASL 身份验证或 TLS/SSL。 Virtual Machine Manager 和 virt-viewer 的唯一支持替代方案是 Remmina(请参阅 “参考”书籍,第 4 章“使用 VNC 进行远程图形会话”,第 4.2 节“Remmina:远程桌面客户端”)。

10.2.1.1 使用 Virtual Machine Manager 打开图形控制台 编辑源文件

  1. 在 Virtual Machine Manager 中,右键单击 VM 客户机条目。

  2. 从弹出菜单中选择 打开

10.2.1.2 使用 virt-viewer 打开图形控制台 编辑源文件

virt-viewer 是一个简单的 VNC 查看器,增加了显示 VM 客户机控制台的功能。 例如,它可以以“等待”模式启动,在这种模式下,它会等待 VM 客户机启动后再连接。 它还支持自动重新连接到已重新启动的 VM 客户机。

virt-viewer 通过名称、ID 或 UUID 来寻址 VM 客户机。 使用 virsh list --all 获取此数据。

要连接到正在运行或暂停的客户机,可以使用 ID、UUID 或名称。 处于关闭状态的 VM 客户机没有 ID,只能通过 UUID 或名称连接到它们。

使用 ID 8 连接到客户机
> virt-viewer 8
连接到非活动的客户机,名为 sles12;客户机启动后打开连接窗口
> virt-viewer --wait sles12

使用 --wait 选项,即使 VM 客户机当前未运行,也会保持连接。 当客户机启动时,将启动查看器。

有关更多信息,请参阅 virt-viewer --helpman 1 virt-viewer

Note
注意:通过 SSH 进行远程连接的密码输入

当使用 virt-viewer 通过 SSH 打开到远程主机的连接时,需要输入 SSH 密码两次。 第一次用于验证 libvirt,第二次用于验证 VNC 服务器。 第二个密码需要在启动 virt-viewer 的命令行中提供。

10.2.2 打开串行控制台 编辑源文件

访问虚拟机的图形控制台需要在访问 VM 客户机的客户端上具有图形环境。 作为替代方案,使用 libvirt 管理的虚拟机也可以通过串行控制台和 virsh 从 shell 访问。 要打开名为 sles12 的 VM 客户机的串行控制台,请运行以下命令

> virsh console sles12

virsh console 接受两个可选标志:--safe 确保独占访问控制台,--force 在连接之前断开任何现有会话。 客户机操作系统需要支持这两个功能。

能够通过串行控制台连接到 VM 客户机需要客户机操作系统支持串行控制台访问并得到正确支持。 有关更多信息,请参阅客户机操作系统的手册。

Tip
提示:为 SUSE Linux Enterprise 和 openSUSE 客户机启用串行控制台访问

SUSE Linux Enterprise 和 openSUSE 中的串行控制台访问默认情况下已禁用。 要启用它,请按以下步骤操作

SLES 12、15 和 openSUSE

启动 YaST 引导加载程序模块并切换到 内核参数 选项卡。 将 console=ttyS0 添加到字段 可选内核命令行参数

SLES 11

启动 YaST 引导加载程序模块并选择要激活串行控制台访问的引导条目。 选择 编辑 并将 console=ttyS0 添加到字段 可选内核命令行参数。 此外,编辑 /etc/inittab 并取消注释包含以下内容的行

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

10.3 更改 VM 客户机状态:启动、停止、暂停 编辑源文件

可以使用 Virtual Machine Manager 或 virsh 启动、停止或暂停 VM 客户机。 还可以配置 VM 客户机在引导 VM 主机服务器时自动启动。

在关闭 VM 客户机时,您可以选择优雅地关闭它,也可以强制关闭它。 后者相当于拔掉物理主机的电源插头,仅在没有其他选择时才建议这样做。 强制关闭可能会导致 VM 客户机上的文件系统损坏和数据丢失。

Tip
提示:优雅关闭

要能够执行优雅关闭,VM 客户机必须配置为支持 ACPI。 如果您使用 Virtual Machine Manager 创建客户机,则 ACPI 应该在 VM 客户机中可用。

根据客户机操作系统,ACPI 的可用性可能不足以执行优雅关闭。 强烈建议在在生产中使用之前测试关闭和重新启动客户机。 例如,openSUSE 或 SUSE Linux Enterprise Desktop 可能需要 Polkit 授权才能关闭和重新启动。 确保在所有 VM 客户机上关闭此策略。

如果在 Windows XP/Windows Server 2003 客户机安装期间启用了 ACPI,则在 VM 客户机配置中启用它是不够的。 有关更多信息,请参阅

无论 VM 客户机的配置如何,始终可以从客户机操作系统内部优雅地关闭。

10.3.1 使用 Virtual Machine Manager 更改 VM 客户机状态 编辑源文件

可以从 Virtual Machine Manager 的主窗口或 VNC 窗口更改 VM 客户机状态。

过程 10.1:从 Virtual Machine Manager 窗口更改状态
  1. 右键单击 VM 客户机条目。

  2. 从弹出菜单中选择 运行暂停关闭选项 中的一个。

过程 10.2:从 VNC 窗口更改状态
  1. 按照 第 10.2.1.1 节,“使用 Virtual Machine Manager 打开图形控制台” 中所述打开 VNC 窗口。

  2. 从工具栏或“虚拟机”菜单中选择 运行暂停关闭 选项之一。

10.3.1.1 自动启动 VM 客户机 编辑源文件

虚拟机主机启动时,您可以自动启动一个客户机。此功能默认未启用,需要为每个虚拟机客户机单独启用。无法全局激活它。

  1. 双击虚拟机关理器中的虚拟机客户机条目以打开其控制台。

  2. 选择 视图 › 详细信息 以打开虚拟机客户机配置窗口。

  3. 选择 启动选项 并选中 主机启动时启动虚拟机

  4. 使用 应用 保存新的配置。

10.3.2 使用 virsh 更改虚拟机客户机的状态 编辑源文件

在以下示例中,更改了一个名为 sles12 的虚拟机客户机的状态。

启动
> virsh start sles12
暂停
> virsh suspend sles12
恢复(已挂起的虚拟机客户机)
> virsh resume sles12
重新启动
> virsh reboot sles12
优雅地关闭
> virsh shutdown sles12
强制关闭
> virsh destroy sles12
启用自动启动
> virsh autostart sles12
禁用自动启动
> virsh autostart --disable sles12

10.4 保存和恢复虚拟机客户机的状态 编辑源文件

保存虚拟机客户机可以保留客户机内存的确切状态。此操作类似于计算机的 休眠。可以快速将保存的虚拟机客户机恢复到之前保存的运行状态。

保存后,虚拟机客户机将暂停,其当前内存状态保存到磁盘,然后客户机停止。该操作不会复制虚拟机客户机虚拟磁盘的任何部分。保存虚拟机所需的时间取决于分配的内存量。保存后,虚拟机客户机的内存将返回到虚拟机主机上可用的内存池中。

恢复操作加载虚拟机客户机之前保存的内存状态文件并启动它。客户机不会启动,而是从之前保存的点恢复。此操作类似于从休眠中恢复。

虚拟机客户机保存到状态文件。请确保要保存到的分区上有足够的空间。要估算预期的文件大小(以兆字节为单位),请在客户机上发出以下命令

> free -mh | awk '/^Mem:/ {print $3}'
Warning
警告:始终恢复保存的客户机

在使用保存操作后,请勿启动或启动保存的虚拟机客户机。这样做会导致机器的虚拟磁盘和保存的内存状态不同步。这可能会在恢复客户机时导致严重错误。

要能够再次使用保存的虚拟机客户机,请使用恢复操作。如果您使用 virsh 保存了虚拟机客户机,则无法使用虚拟机关理器恢复它。在这种情况下,请确保使用 virsh 恢复。

Important
重要提示:恢复后同步虚拟机客户机的时间

如果在保存后长时间(数小时)才恢复虚拟机客户机,其时间同步服务(例如 chronyd)可能会拒绝同步其时间。在这种情况下,请手动同步虚拟机客户机的时间。例如,对于 KVM 主机,您可以使用 QEMU 客户机代理并使用 guest-set-time 指示客户机。有关更多详细信息,请参阅 第 19 章,QEMU 客户机代理

Important
重要提示:仅适用于磁盘类型为 rawqcow2 的虚拟机客户机

只有当虚拟机客户机使用类型为 raw.img)或 qcow2 的虚拟磁盘时,才能保存和恢复虚拟机客户机。

10.4.1 使用虚拟机关理器保存/恢复 编辑源文件

过程 10.3: 保存虚拟机客户机
  1. 打开到虚拟机客户机的 VNC 连接窗口。确保客户机正在运行。

  2. 选择 虚拟机 › 关闭 › 保存

过程 10.4: 恢复虚拟机客户机
  1. 打开到虚拟机客户机的 VNC 连接窗口。确保客户机未运行。

  2. 选择 虚拟机 › 恢复

    如果之前使用虚拟机关理器保存了虚拟机客户机,则不会提供 运行 客户机的选项。但是,请注意在 警告:始终恢复保存的客户机 中概述的用 virsh 保存的机器的注意事项。

10.4.2 使用 virsh 保存和恢复 编辑源文件

使用命令 virsh save 保存正在运行的虚拟机客户机,并指定保存到的文件。

保存名为 opensuse13 的客户机
> virsh save opensuse13 /virtual/saves/opensuse13.vmsav
保存 ID 为 37 的客户机
> virsh save 37 /virtual/saves/opensuse13.vmsave

要恢复虚拟机客户机,请使用 virsh restore

> virsh restore /virtual/saves/opensuse13.vmsave

10.5 创建和管理快照 编辑源文件

虚拟机客户机快照是整个虚拟机的快照,包括 CPU、RAM、设备和所有可写磁盘的状态。要使用虚拟机快照,所有附加的硬盘都需要使用 qcow2 磁盘镜像格式,并且至少需要一个可写磁盘。

快照允许您恢复机器在特定时间点的状态。这对于撤消错误的配置或安装大量软件包非常有用。在启动在虚拟机客户机关闭时创建的快照后,需要启动它。之后写入磁盘的任何更改在启动快照时都会丢失。

Note
注意

快照仅受 KVM 虚拟机主机支持。

10.5.1 术语 编辑源文件

有几个特定的术语用于描述快照的类型

内部快照

保存到原始虚拟机客户机的 qcow2 文件中的快照。该文件同时保存了快照的保存状态和自快照以来的更改。内部快照的主要优点是它们都存储在一个文件中,因此易于在多台机器之间复制或移动。

外部快照

创建外部快照时,原始 qcow2 文件被保存并设为只读,同时创建一个新的 qcow2 文件来保存更改。原始文件有时称为 备份基本 文件,而包含所有更改的新文件称为 叠加派生 文件。外部快照在备份虚拟机客户机时很有用。但是,外部快照不受虚拟机关理器支持,并且不能直接使用 virsh 删除。有关 QEMU 中外部快照的更多信息,请参阅 第 33.2.4 节,“有效地操作磁盘镜像”

实时快照

在原始虚拟机客户机运行时创建的快照。内部实时快照支持保存设备、内存和磁盘状态,而使用 virsh 的外部实时快照支持保存内存状态、磁盘状态或两者。

离线快照

从已关闭的虚拟机客户机创建的快照。这可确保数据完整性,因为所有客户机的进程都已停止且没有内存在使用中。

10.5.2 使用虚拟机关理器创建和管理快照 编辑源文件

Important
重要提示:仅内部快照

虚拟机关理器仅支持内部快照,可以是实时快照或离线快照。

要在虚拟机关理器中打开快照管理视图,请按照 第 10.2.1.1 节,“使用虚拟机关理器打开图形控制台” 中所述打开 VNC 窗口。现在,选择 视图 › 快照 或单击工具栏中的 管理虚拟机快照

窗口左侧显示所选虚拟机客户机的现有快照列表。上次启动的快照用绿色勾号标记。窗口右侧显示列表中当前标记的快照的详细信息。这些详细信息包括快照的标题和时间戳、客户机在拍摄快照时状态的描述。运行客户机的快照还包括屏幕截图。描述 可以直接从此视图更改。其他快照数据无法更改。

10.5.2.1 创建快照 编辑源文件

要拍摄虚拟机客户机的快照,请按以下步骤操作

  1. 可选地,关闭虚拟机客户机以创建离线快照。

  2. 单击 VNC 窗口左下角的 添加

    打开窗口 创建快照

  3. 提供 名称 并可选地提供描述。快照拍摄后无法更改名称。为了以后能够轻松识别快照,请使用 有意义的名称

  4. 使用 完成 确认。

10.5.2.2 删除快照 编辑源文件

要删除虚拟机客户机的快照,请按以下步骤操作

  1. 单击 VNC 窗口左下角的 删除

  2. 使用 确认删除。

10.5.2.3 启动快照 编辑源文件

要启动快照,请按以下步骤操作

  1. 单击 VNC 窗口左下角的 运行

  2. 使用 确认启动。

10.5.3 使用 virsh 创建和管理快照 编辑源文件

要列出域(以下示例中的 admin_server)的所有现有快照,请运行 snapshot-list 命令

> virsh snapshot-list --domain sle-ha-node1
 Name                 Creation Time             State
------------------------------------------------------------
 sleha_12_sp2_b2_two_node_cluster 2016-06-06 15:04:31 +0200 shutoff
 sleha_12_sp2_b3_two_node_cluster 2016-07-04 14:01:41 +0200 shutoff
 sleha_12_sp2_b4_two_node_cluster 2016-07-14 10:44:51 +0200 shutoff
 sleha_12_sp2_rc3_two_node_cluster 2016-10-10 09:40:12 +0200 shutoff
 sleha_12_sp2_gmc_two_node_cluster 2016-10-24 17:00:14 +0200 shutoff
 sleha_12_sp3_gm_two_node_cluster 2017-08-02 12:19:37 +0200 shutoff
 sleha_12_sp3_rc1_two_node_cluster 2017-06-13 13:34:19 +0200 shutoff
 sleha_12_sp3_rc2_two_node_cluster 2017-06-30 11:51:24 +0200 shutoff
 sleha_15_b6_two_node_cluster 2018-02-07 15:08:09 +0100 shutoff
 sleha_15_rc1_one-node 2018-03-09 16:32:38 +0100 shutoff

上次启动的快照使用 snapshot-current 命令: 显示

> virsh snapshot-current --domain admin_server
Basic installation incl. SMT for CLOUD4

可以通过运行 snapshot-info 命令获取有关特定快照的详细信息

> virsh snapshot-info --domain admin_server \
   -name  "Basic installation incl. SMT for CLOUD4"
Name:           Basic installation incl. SMT for CLOUD4
Domain:         admin_server
Current:        yes
State:          shutoff
Location:       internal
Parent:         Basic installation incl. SMT for CLOUD3-HA
Children:       0
Descendants:    0
Metadata:       yes

10.5.3.1 创建内部快照 编辑源文件

要拍摄虚拟机客户机的内部快照,无论是实时快照还是离线快照,请使用 snapshot-create-as 命令,如下所示

> virsh snapshot-create-as --domain admin_server1 --name "Snapshot 1"2 \
--description "First snapshot"3

1

域名。必需。

2

快照名称。建议使用 有意义的名称,因为这样可以更轻松地识别快照。必需。

3

快照描述。可选。

10.5.3.2 创建外部快照 编辑源代码

使用 virsh,您可以对客户机的内存状态、磁盘状态或两者都进行外部快照。

要对客户机的磁盘进行实时和离线外部快照,请指定 --disk-only 选项

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" --disk-only

您可以使用 --diskspec 选项来控制如何创建外部文件

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" \
 --disk-only --diskspec vda,snapshot=external,file=/path/to/snapshot_file

要对客户机的内存进行实时外部快照,请指定 --live--memspec 选项

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" --live \
 --memspec snapshot=external,file=/path/to/snapshot_file

要对客户机的磁盘和内存状态都进行实时外部快照,请组合使用 --live--diskspec--memspec 选项

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" --live \
 --memspec snapshot=external,file=/path/to/snapshot_file
 --diskspec vda,snapshot=external,file=/path/to/snapshot_file

有关更多详细信息,请参阅 man 1 virsh 中的 SNAPSHOT COMMANDS 部分。

10.5.3.3 删除快照 编辑源代码

无法使用 virsh 删除外部快照。要删除 VM Guest 的内部快照并恢复其占用的磁盘空间,请使用 snapshot-delete 命令

> virsh snapshot-delete --domain admin_server --snapshotname "Snapshot 2"

10.5.3.4 启动快照 编辑源代码

要启动快照,请使用 snapshot-revert 命令

> virsh snapshot-revert --domain admin_server --snapshotname "Snapshot 1"

要启动当前快照(VM Guest 启动的快照),只需使用 --current 而不是指定快照名称即可

> virsh snapshot-revert --domain admin_server --current

10.6 删除 VM Guest 编辑源代码

默认情况下,使用 virsh 删除 VM Guest 只会删除其 XML 配置文件。由于默认情况下不删除附加存储,因此您可以将其与另一个 VM Guest 重新使用。使用 Virtual Machine Manager,您还可以删除 Guest 的存储文件。

10.6.1 使用 Virtual Machine Manager 删除 VM Guest 编辑源代码

  1. 在 Virtual Machine Manager 中,右键单击 VM 客户机条目。

  2. 在上下文菜单中,选择 删除

  3. 将打开一个确认窗口。单击 删除 将永久擦除 VM Guest。删除不可恢复。

    您还可以通过激活 删除关联的存储文件 来永久删除 Guest 的虚拟磁盘。删除同样不可恢复。

10.6.2 使用 virsh 删除 VM Guest 编辑源代码

要删除 VM Guest,首先需要将其关闭。无法删除正在运行的 Guest。有关关闭的信息,请参阅 第 10.3 节,“更改 VM Guest 的状态:启动、停止、暂停”

要使用 virsh 删除 VM Guest,请运行 virsh undefine VM_NAME

> virsh undefine sles12

没有自动删除附加存储文件的选项。如果它们由 libvirt 管理,请按照 第 8.2.1.4 节,“从存储池中删除卷” 中的描述进行删除。

10.7 迁移 VM Guest 编辑源代码

虚拟化的主要优势之一是 VM Guest 具有可移植性。当 VM Host Server 需要停机维护时,或者当主机过载时,Guest 可以轻松地移动到另一个 VM Host Server。KVM 和 Xen 甚至支持 实时 迁移,在此期间 VM Guest 始终可用。

10.7.1 迁移要求 编辑源代码

要成功将 VM Guest 迁移到另一个 VM Host Server,需要满足以下要求

Important
重要提示

要使用后复制实时迁移选项,内核版本为 5.11 或更高版本的 KVM 主机需要将 unprivileged_userfaultfd 系统值设置为 1

> sudo sysctl -w vm.unprivileged_userfaultfd=1

由于内核版本低于 5.11 不需要将 unprivileged_userfaultfd 设置为 1 才能使用后复制选项,libvirt/usr/lib/sysctl.d/60-qemu-postcopy-migration.conf 文件中提供设置以保留旧行为。

  • 源系统和目标系统必须具有相同的架构。

  • 存储设备必须可以从两台机器访问(例如,通过 NFS 或 iSCSI),并且必须在两台机器上配置为存储池。有关更多信息,请参阅 第 12 章,高级存储主题

    这也适用于在移动期间连接的 CD-ROM 或软盘镜像。但是,您可以按照 第 13.11 节,“使用 Virtual Machine Manager 弹出和更改软盘或 CD/DVD-ROM 介质” 中的描述在移动之前断开它们。

  • libvirtd 需要在两台 VM Host Server 上运行,并且您必须能够打开目标主机和源主机之间(或反之)的远程 libvirt 连接。有关详细信息,请参阅 第 11.3 节,“配置远程连接”

  • 如果目标主机上运行防火墙,则需要打开端口以允许迁移。如果您在迁移过程中没有指定端口,libvirt 将从范围 49152:49215 中选择一个端口。请确保在 目标主机 的防火墙中打开此范围(推荐)或您选择的专用端口。

  • 主机和目标机器应位于网络上的同一子网中,否则迁移后网络将失败。

  • 参与迁移的所有 VM Host Server 必须具有相同的 qemu 用户 UID 和相同的 kvm、qemu 和 libvirt 组 GID。

  • 目标主机上不能存在正在运行或暂停的同名 VM Guest。如果存在已关闭的同名机器,其配置将被覆盖。

  • 主机 CPU 模型外,所有 CPU 模型都受支持,可在迁移 VM Guest 时使用。

  • SATA 磁盘设备类型不可迁移。

  • 文件系统直通功能与迁移不兼容。

  • VM Host Server 和 VM Guest 需要安装适当的时间同步。请参阅 第 17 章,VM Guest 时钟设置

  • 不能将物理设备从主机传递到 Guest。当前不支持使用 PCI 直通或 SR-IOV 的设备进行实时迁移。如果需要支持实时迁移,则需要使用软件虚拟化(半虚拟化或完全虚拟化)。

  • 缓存模式设置是迁移的重要设置。请参阅:第 16.6 节,“缓存模式和实时迁移”

  • 镜像目录应位于两台主机上的相同路径中。

  • 所有主机都应处于相同的微代码级别(尤其是 spectre 微代码更新)。可以通过在所有主机上安装最新的 openSUSE Leap 更新来实现这一点。

10.7.2 使用 Virtual Machine Manager 迁移 编辑源代码

使用 Virtual Machine Manager 迁移 VM Guest 时,它不重要是在哪个机器上启动的。您可以在源主机或目标主机,甚至在第三台主机上启动 Virtual Machine Manager。在后一种情况下,您需要能够打开到目标主机和源主机的远程连接。

  1. 启动 Virtual Machine Manager 并建立到目标主机或源主机的连接。如果 Virtual Machine Manager 既未在目标主机上启动,也未在源主机上启动,则需要打开到两台主机的连接。

  2. 右键单击要迁移的 VM Guest,然后选择 迁移。确保 Guest 正在运行或暂停——无法迁移已关闭的 Guest。

    Tip
    提示:提高迁移速度

    要提高迁移速度,请暂停 VM Guest。这等效于 Virtual Machine Manager 以前的所谓 离线迁移 选项。

  3. 选择 VM Guest 的 新主机。如果未显示所需的目标主机,请确保已连接到该主机。

    要更改连接到远程主机的默认选项,在 连接 下,设置 模式 以及目标主机的 地址(IP 地址或主机名)和 端口。如果您指定了 端口,则还必须指定 地址

    高级选项 下,选择移动是永久的(默认)还是临时的,使用 临时移动

    此外,还有 允许不安全 选项,该选项允许在不禁用 VM Host Server 缓存的情况下进行迁移。这可以加快迁移速度,但仅当当前配置允许在不使用 cache="none"/0_DIRECT 的情况下对 VM Guest 存储进行一致的查看时才有效。

    Note
    注意:带宽选项

    在 Virtual Machine Manager 的最新版本中,已删除设置迁移带宽的选项。要设置特定的带宽,请使用 virsh 代替。

  4. 要执行迁移,请单击 迁移

    迁移完成后,迁移 窗口将关闭,VM Guest 现在将列在 Virtual Machine Manager 窗口中的新主机上。原始 VM Guest 仍然可在目标主机上使用(处于关闭状态)。

10.7.3 使用 virsh 迁移 编辑源代码

要使用 virsh migrate 迁移 VM Guest,您需要对 VM Host Server 具有直接或远程 shell 访问权限,因为该命令需要在主机上运行。迁移命令如下所示

> virsh migrate [OPTIONS] VM_ID_or_NAME CONNECTION_URI [--migrateuri tcp://REMOTE_HOST:PORT]

下面列出了最重要的选项。有关完整列表,请参阅 virsh help migrate

--live

执行实时迁移。如果未指定,Guest 将在迁移期间暂停(“离线迁移”)。

--suspend

执行离线迁移,并且不在目标主机上重新启动 VM Guest。

--persistent

默认情况下,迁移的 VM Guest 是临时的,因此如果其被关闭,其配置将在目标主机上自动删除。使用此开关使迁移持久。

--undefinesource

如果指定,则在成功迁移后删除源主机上的 VM Guest 定义(但是,附加到此 Guest 的虚拟磁盘 不会 被删除)。

--parallel --parallel-connections NUM_OF_CONNECTIONS

并行迁移可用于在单个迁移线程无法饱和源主机和目标主机之间的网络链路的情况下提高迁移数据吞吐量。在具有 40 GB 网络接口的主机上,可能需要四个迁移线程才能饱和链路。通过并行迁移,可以显著减少大型内存 VM 的迁移时间。

以下示例使用 mercury.example.com 作为源系统,jupiter.example.com 作为目标系统;VM Guest 的名称为 opensuse131,ID 为 37

使用默认参数的离线迁移
> virsh migrate 37 qemu+ssh://tux@jupiter.example.com/system
使用默认参数的瞬态实时迁移
> virsh migrate --live opensuse131 qemu+ssh://tux@jupiter.example.com/system
持久实时迁移;删除源主机上的 VM 定义
> virsh migrate --live --persistent --undefinesource 37 \
qemu+tls://tux@jupiter.example.com/system
使用端口 49152 的离线迁移
> virsh migrate opensuse131 qemu+ssh://tux@jupiter.example.com/system \
--migrateuri tcp://@jupiter.example.com:49152
Note
注意:瞬态与持久迁移

默认情况下,virsh migrate 在目标主机上创建 VM Guest 的临时(瞬态)副本。原始 guest 描述的关机版本保留在源主机上。瞬态副本在关机后从服务器上删除。

要创建目标主机上 guest 的永久副本,请使用选项 --persistent。原始 guest 描述的关机版本也保留在源主机上。将选项 --undefinesource--persistent 选项一起使用,可以实现“真实”移动,在目标主机上创建永久副本,并删除源主机上的版本。

不建议在没有 --persistent 选项的情况下使用 --undefinesource 选项,因为这会导致在目标主机上关机后丢失 VM Guest 定义。

10.7.4 逐步示例 编辑源文件

10.7.4.1 导出存储 编辑源文件

首先,需要导出存储,以便在主机之间共享 Guest 镜像。这可以通过 NFS 服务器完成。在以下示例中,我们希望共享 /volume1/VM 目录给网络 10.0.1.0/24 上的所有机器。我们正在使用 SUSE Linux Enterprise NFS 服务器。以 root 用户身份,编辑 /etc/exports 文件并添加

/volume1/VM 10.0.1.0/24  (rw,sync,no_root_squash)

需要重新启动 NFS 服务器

> sudo systemctl restart nfsserver
> sudo exportfs
/volume1/VM      10.0.1.0/24

10.7.4.2 在目标主机上定义池 编辑源文件

在您希望迁移 VM Guest 的每个主机上,必须定义池才能访问包含 Guest 镜像的卷。我们的 NFS 服务器 IP 地址是 10.0.1.99,其共享是 /volume1/VM 目录,并且我们希望将其挂载到 /var/lib/libvirt/images/VM 目录中。池名称是 VM。要定义此池,请创建一个 VM.xml 文件,内容如下

<pool type='netfs'>
  <name>VM</name>
  <source>
    <host name='10.0.1.99'/>
    <dir path='/volume1/VM'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/VM</path>
    <permissions>
      <mode>0755</mode>
      <owner>-1</owner>
      <group>-1</group>
    </permissions>
  </target>
  </pool>

然后使用 pool-define 命令将其加载到 libvirt

# virsh pool-define VM.xml

另一种定义此池的方法是使用 virsh 命令

# virsh pool-define-as VM --type netfs --source-host 10.0.1.99 \
     --source-path /volume1/VM --target /var/lib/libvirt/images/VM
Pool VM created

以下命令假定您位于 virsh 的交互式 shell 中,也可以通过使用不带任何参数的命令 virsh 来访问。然后可以将池设置为在主机启动时自动启动(autostart 选项)

virsh # pool-autostart VM
Pool VM marked as autostarted

要禁用 autostart

virsh # pool-autostart VM --disable
Pool VM unmarked as autostarted

检查池是否存在

virsh # pool-list --all
 Name                 State      Autostart
-------------------------------------------
 default              active     yes
 VM                   active     yes

virsh # pool-info VM
Name:           VM
UUID:           42efe1b3-7eaa-4e24-a06a-ba7c9ee29741
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       2,68 TiB
Allocation:     2,38 TiB
Available:      306,05 GiB
Warning
警告:池必须存在于所有目标主机上

请记住:此池必须在您希望能够迁移 VM Guest 的每个主机上定义。

10.7.4.3 创建卷 编辑源文件

池已定义——现在我们需要一个包含磁盘镜像的卷

virsh # vol-create-as VM sled12.qcow2 8G --format qcow2
Vol sled12.qcow2 created

显示的卷名称稍后用于使用 virt-install 安装 guest。

10.7.4.4 创建 VM Guest 编辑源文件

让我们使用 virt-install 命令创建一个 openSUSE Leap VM Guest。使用 --disk 选项指定 VM 池,如果不想在迁移时使用 --unsafe 选项,建议使用 cache=none

# virt-install --connect qemu:///system --virt-type kvm --name \
   sled12 --memory 1024 --disk vol=VM/sled12.qcow2,cache=none --cdrom \
   /mnt/install/ISO/SLE-12-Desktop-DVD-x86_64-Build0327-Media1.iso --graphics \
   vnc --os-variant sled12
Starting install...
Creating domain...

10.7.4.5 迁移 VM Guest 编辑源文件

现在一切准备就绪,可以进行迁移了。在当前托管 VM Guest 的 VM Host Server 上运行 migrate 命令,并选择目标主机。

virsh # migrate --live sled12 --verbose qemu+ssh://IP/Hostname/system
Password:
Migration: [ 12 %]

10.8 监控 编辑源文件

10.8.1 使用 Virtual Machine Manager 监控 编辑源文件

启动 Virtual Machine Manager 并连接到 VM Host Server 后,将显示所有正在运行的 guest 的 CPU 使用率图表。

也可以使用此工具获取有关磁盘和网络使用情况的信息,但是,您必须先在 Preferences 中激活它

  1. 运行 virt-manager

  2. 选择 Edit › Preferences

  3. 将选项卡从 General 更改为 Polling

  4. 激活您想要查看的活动类型的复选框:Poll Disk I/OPoll Network I/OPoll Memory stats

  5. 如果需要,还可以使用 Update status every n seconds 更改更新间隔。

  6. 关闭 Preferences 对话框。

  7. View › Graph 下激活应显示的图表。

此后,磁盘和网络统计信息也将在 Virtual Machine Manager 的主窗口中显示。

可以从 VNC 窗口获取更精确的数据。如 第 10.2.1 节,“打开图形控制台” 中所述打开 VNC 窗口。从工具栏或 View 菜单中选择 Details。统计信息将从左侧树形菜单的 Performance 条目中显示。

10.8.2 使用 virt-top 监控 编辑源文件

virt-top 是一个命令行工具,类似于众所周知的进程监控工具 topvirt-top 使用 libvirt,因此能够显示在不同 hypervisor 上运行的 VM Guest 的统计信息。建议使用 virt-top 而不是特定于 hypervisor 的工具,如 xentop

默认情况下,virt-top 显示所有正在运行的 VM Guest 的统计信息。显示的数据包括使用的内存百分比 (%MEM) 和 CPU (%CPU) 以及 guest 的运行时间 (TIME)。数据会定期更新(默认情况下每三秒)。以下是在具有七个 VM Guest 的 VM Host Server 上的输出,其中四个处于非活动状态

virt-top 13:40:19 - x86_64 8/8CPU 1283MHz 16067MB 7.6% 0.5%
7 domains, 3 active, 3 running, 0 sleeping, 0 paused, 4 inactive D:0 O:0 X:0
CPU: 6.1%  Mem: 3072 MB (3072 MB by guests)

   ID S RDRQ WRRQ RXBY TXBY %CPU %MEM    TIME   NAME
    7 R  123    1  18K  196  5.8  6.0   0:24.35 sled12_sp1
    6 R    1    0  18K    0  0.2  6.0   0:42.51 sles12_sp1
    5 R    0    0  18K    0  0.1  6.0  85:45.67 opensuse_leap
    -                                           (Ubuntu_1410)
    -                                           (debian_780)
    -                                           (fedora_21)
    -                                           (sles11sp3)

默认情况下,输出按 ID 排序。使用以下键组合更改排序字段

ShiftP:CPU 使用率
ShiftM:guest 分配的总内存
ShiftT:时间
ShiftI:ID

要使用其他字段进行排序,请按 ShiftF 并从列表中选择一个字段。要切换排序顺序,请使用 ShiftR

virt-top 还支持不同的 VM Guest 数据视图,可以在运行时通过按以下键更改

0:默认视图
1:显示物理 CPU
2:显示网络接口
3:显示虚拟磁盘

virt-top 支持更多热键来更改数据的视图和许多命令行开关,这些开关会影响程序的行为。有关更多信息,请参阅 man 1 virt-top

10.8.3 使用 kvm_stat 监控 编辑源文件

kvm_stat 可用于跟踪 KVM 性能事件。它监视 /sys/kernel/debug/kvm,因此需要挂载 debugfs。在 openSUSE Leap 上,默认情况下应挂载它。如果未挂载,请使用以下命令

> sudo mount -t debugfs none /sys/kernel/debug

kvm_stat 可以以三种不同的模式使用

kvm_stat                    # update in 1 second intervals
kvm_stat -1                 # 1 second snapshot
kvm_stat -l > kvmstats.log  # update in 1 second intervals in log format
                            # can be imported to a spreadsheet
示例 10.1: kvm_stat 的典型输出
kvm statistics

 efer_reload                  0       0
 exits                 11378946  218130
 fpu_reload               62144     152
 halt_exits              414866     100
 halt_wakeup             260358      50
 host_state_reload       539650     249
 hypercalls                   0       0
 insn_emulation         6227331  173067
 insn_emulation_fail          0       0
 invlpg                  227281      47
 io_exits                113148      18
 irq_exits               168474     127
 irq_injections          482804     123
 irq_window               51270      18
 largepages                   0       0
 mmio_exits                6925       0
 mmu_cache_miss           71820      19
 mmu_flooded              35420       9
 mmu_pde_zapped           64763      20
 mmu_pte_updated              0       0
 mmu_pte_write           213782      29
 mmu_recycled                 0       0
 mmu_shadow_zapped       128690      17
 mmu_unsync                  46      -1
 nmi_injections               0       0
 nmi_window                   0       0
 pf_fixed               1553821     857
 pf_guest               1018832     562
 remote_tlb_flush        174007      37
 request_irq                  0       0
 signal_exits                 0       0
 tlb_flush               394182     148

有关如何解释这些值的更多信息,请参阅 http://clalance.blogspot.com/2009/01/kvm-performance-tools.html

打印此页面