XenServer

管理存储库

本节介绍持续管理存储库 (SR) 中所需的各种操作,包括实时 VDI 迁移。

删除 SR

存储库 (SR) 可以暂时或永久删除。

分离: 断开存储设备与池或主机之间的关联(PBD 拔出)。SR(及其 VDI)将变得不可访问。VDI 的内容以及虚拟机用于访问 VDI 的元信息将保留。当您暂时使 SR 脱机时(例如,进行维护),可以使用分离功能。分离的 SR 以后可以重新连接。

忘记: 保留物理磁盘上 SR 的内容,但永久删除将虚拟机连接到其 VDI 的信息。例如,允许您将 SR 重新连接到另一个 XenServer® 主机,而无需删除任何 SR 内容。

销毁: 从物理磁盘中删除 SR 的内容。

注意:

使用 SMB 存储时,请勿在分离 SMB SR 之前从存储中删除共享。

对于销毁或忘记操作,连接到 SR 的 PBD 必须从主机拔出。

  1. 拔出 PBD 以从相应的 XenServer 主机分离 SR:

    xe pbd-unplug uuid=pbd_uuid
    <!--NeedCopy-->
    
  2. 使用 sr-destroy 命令删除 SR。此命令销毁 SR,从 XenServer 主机数据库中删除 SR 和相应的 PBD,并从物理磁盘中删除 SR 内容:

    xe sr-destroy uuid=sr_uuid
    <!--NeedCopy-->
    
  3. 使用 sr-forget 命令忘记 SR。此命令从 XenServer 主机数据库中删除 SR 和相应的 PBD,但保留物理介质上的实际 SR 内容不变:

    xe sr-forget uuid=sr_uuid
    <!--NeedCopy-->
    

注意:

可能需要一些时间才能对与 SR 对应的软件对象进行垃圾回收。

引入 SR

要重新引入之前被遗忘的 SR,请创建一个 PBD。手动将 PBD 连接到相应的 XenServer 主机以激活 SR。

以下示例引入了一个类型为 lvmoiscsi 的 SR。

  1. 探测现有 SR 以确定其 UUID:

    xe sr-probe type=lvmoiscsi device-config:target=192.168.1.10 \
        device-config:targetIQN=192.168.1.10:filer1 \
        device-config:SCSIid=149455400000000000000000002000000b70200000f000000
    <!--NeedCopy-->
    
  2. 引入从 sr-probe 命令返回的现有 SR UUID。将返回新 SR 的 UUID:

    xe sr-introduce content-type=user name-label="Example Shared LVM over iSCSI SR" \
        shared=true uuid=valid_sr_uuid type=lvmoiscsi
    <!--NeedCopy-->
    
  3. 创建一个 PBD 以配合 SR。将返回新 PBD 的 UUID:

    xe pbd-create type=lvmoiscsi host-uuid=valid_uuid sr-uuid=valid_sr_uuid \
        device-config:target=192.168.0.1 \
        device-config:targetIQN=192.168.1.10:filer1 \
        device-config:SCSIid=149455400000000000000000002000000b70200000f000000
    <!--NeedCopy-->
    
  4. 连接 PBD 以挂载 SR:

    xe pbd-plug uuid=pbd_uuid
    <!--NeedCopy-->
    
  5. 验证 PBD 连接状态。如果成功,currently-attached 属性为 true:

    xe pbd-list sr-uuid=sr_uuid
    <!--NeedCopy-->
    

注意:

对资源池中的每个主机执行步骤 3 到 5。这些步骤也可以使用 XenCenter 中的“修复存储库”功能来执行。

实时 LUN 扩展

为了满足容量需求,您可能需要向存储阵列添加容量,以增加分配给 XenServer 主机的 LUN 大小。实时 LUN 扩展允许您在不造成任何虚拟机停机的情况下增加 LUN 的大小。

向存储阵列添加更多容量后,输入,

xe sr-scan sr-uuid=sr_uuid
<!--NeedCopy-->

此命令会重新扫描 SR,并且任何额外容量都会被添加并可用。

此操作在 XenCenter 中也可用。选择要调整大小的 SR,然后单击 重新扫描

警告:

  • 无法缩小或截断 LUN。减小存储阵列上的 LUN 大小可能导致数据丢失。
  • 调整 GFS2 SR 大小可能需要很长时间。在调整大小期间,您可能无法向池中添加更多主机或执行其他 SR 操作。

实时 VDI 迁移

实时 VDI 迁移允许管理员在不关闭虚拟机的情况下重新定位虚拟机的虚拟磁盘映像 (VDI)。此功能支持以下管理操作:

  • 将虚拟机从廉价的本地存储移动到快速、弹性、阵列支持的存储。
  • 将虚拟机从开发环境移动到生产环境。
  • 当虚拟机受存储容量限制时,在存储层之间移动。
  • 执行存储阵列升级。

限制和注意事项

实时 VDI 迁移受以下限制和注意事项的约束

  • 目标存储库上必须有足够的可用磁盘空间。

使用 XenCenter 移动虚拟磁盘

  1. 资源窗格中,选择存储虚拟磁盘的 SR,然后单击存储选项卡。

  2. 虚拟磁盘列表中,选择要移动的虚拟磁盘,然后单击移动

  3. 在“移动虚拟磁盘”对话框中,选择您希望将 VDI 移动到的目标 SR。

    注意:

    确保 SR 有足够的空间容纳另一个虚拟磁盘:可用空间显示在可用 SR 列表中。

  4. 单击“移动”以移动虚拟磁盘。

有关 xe CLI 参考,请参阅 vdi-pool-migrate

SR 之间的冷 VDI 迁移(脱机迁移)

与 VM 关联的 VDI 可以从一个 SR 复制到另一个 SR,以适应维护要求或分层存储配置。XenCenter 使您能够将 VM 及其所有 VDI 复制到相同或不同的 SR。XenCenter 和 xe CLI 的组合可用于复制单个 VDI。

有关 xe CLI 参考,请参阅 vm-migrate

将 VM 的所有 VDI 复制到不同的 SR

XenCenter 的“复制 VM”功能会在相同或不同的 SR 上为选定的 VM 创建所有 VDI 的副本。默认情况下,源 VM 和 VDI 不受影响。要将 VM 移动到选定的 SR 而不是创建副本,请在“复制虚拟机”对话框中选择“删除原始 VM”选项。

  1. 关闭 VM。
  2. 在 XenCenter 中,选择 VM,然后选择“VM > 复制 VM”选项。
  3. 选择所需的目标 SR。

将单个 VDI 复制到不同的 SR

xe CLI 和 XenCenter 的组合可用于在 SR 之间复制单个 VDI。

  1. 关闭虚拟机。

  2. 使用 xe CLI 识别要移动的 VDI 的 UUID。如果虚拟机有 DVD 驱动器,其 vdi-uuid 会被列为 not in database,可以忽略。

    xe vbd-list vm-uuid=valid_vm_uuid
    <!--NeedCopy-->
    

    注意:

    vbd-list 命令会同时显示 VBD 和 VDI 的 UUID。请务必记录 VDI 的 UUID,而不是 VBD 的 UUID。

  3. 在 XenCenter 中,选择“VM Storage”选项卡。对于每个要移动的 VDI,选择该 VDI 并单击“Detach”按钮。此步骤也可以使用 vbd-destroy 命令完成。

    注意:

    如果使用 vbd-destroy 命令分离 VDI UUID,请首先检查 VBD 的参数 other-config:owner 是否设置为 true。将此参数设置为 false。使用 vbd-destroy 命令并带上 other-config:owner=true 也会销毁关联的 VDI。

  4. 使用 vdi-copy 命令将每个要移动的 VM VDI 复制到所需的 SR。

    xe vdi-copy uuid=valid_vdi_uuid sr-uuid=valid_sr_uuid
    <!--NeedCopy-->
    
  5. 在 XenCenter 中,选择“VM Storage”选项卡。单击“Attach”按钮并从新的 SR 中选择 VDI。此步骤也可以使用 vbd-create 命令完成。

  6. 要删除原始 VDI,请在 XenCenter 中选择原始 SR 的“Storage”选项卡。原始 VDI 的 VM 字段值为空。使用“Delete”按钮删除 VDI。

将本地光纤通道 SR 转换为共享 SR

使用 xe CLI 和 XenCenter 的“Repair Storage Repository”功能将本地 FC SR 转换为共享 FC SR:

  1. 将资源池中的所有主机升级到 XenServer 8.4。

  2. 确保池中的所有主机都已正确分区 SR 的 LUN。有关使用 sr-probe 命令验证 LUN 是否存在于每个主机上的详细信息,请参阅 探测 SR

  3. 将 SR 转换为共享:

    xe sr-param-set shared=true uuid=local_fc_sr
    <!--NeedCopy-->
    
  4. SR 从 XenCenter 中的主机级别移动到池级别,表明它现在是共享的。SR 标有红色感叹号,表示它当前未插入池中的所有主机。

  5. 选择 SR,然后选择 存储 > 修复存储库 选项。

  6. 单击 修复 为池中的每个主机创建并插入 PBD。

使用丢弃功能回收后端阵列上基于块的存储空间

您可以使用空间回收功能释放精简配置 LUN 上未使用的块。空间释放后,存储阵列可以重新使用此回收的空间。

注意:

空间回收功能仅适用于某些类型的存储阵列。要确定您的阵列是否支持此功能以及是否需要特定配置,请参阅 硬件兼容性列表 和您的存储供应商特定文档。

要使用 XenCenter 回收空间:

  1. 选择 基础架构 视图,然后选择连接到 SR 的主机或池。

  2. 单击 存储 选项卡。

  3. 从列表中选择 SR,然后单击 回收已释放空间

  4. 单击 确认操作。

  5. 单击 通知,然后单击 事件 以查看操作状态。

有关详细信息,请在 XenCenter 中按 F1 访问联机帮助。

要使用 xe CLI 回收空间,可以使用以下命令:

xe host-call-plugin host-uuid=host_uuid \
    plugin=trim fn=do_trim args:sr_uuid=sr_uuid

注意:

  • 此操作仅适用于基于 LVM 且基于阵列上精简配置 LUN 的 SR。本地 SSD 也可以受益于空间回收。
  • 对于基于文件的 SR(例如 NFS 和 EXT3/EXT4),不需要空间回收。XenCenter 中不提供这些 SR 类型的“回收已释放空间”按钮。
  • 如果您对基于文件的 SR 或厚配置的基于 LVM 的 SR 运行空间回收 xe 命令,该命令将返回错误。
  • 空间回收是一项密集型操作,可能导致存储阵列性能下降。因此,仅当阵列需要空间回收时才启动此操作。我们建议您在阵列需求高峰时段之外安排此工作。

删除快照时自动回收空间

使用 XenServer 删除快照时,基于 LVM 的 SR 上分配的空间会自动回收,并且不需要重新启动 VM。此操作称为“在线合并”。在线合并适用于所有类型的 SR。

在某些情况下,自动空间回收可能无法进行。我们建议您在以下情况下使用离线合并工具:

  • 在 VM I/O 吞吐量很大的情况下
  • 在一段时间后空间未被回收的情况下

注意:

  • 运行离线合并工具会导致 VM 停机,因为会执行挂起/恢复操作。
  • 在运行该工具之前,请删除所有不再需要的快照和克隆。该工具会根据剩余的快照/克隆尽可能多地回收空间。如果要回收全部空间,请删除所有快照和克隆。
  • VM 磁盘必须位于单个主机的共享存储或本地存储上。磁盘位于两种存储类型的 VM 无法合并。

使用离线合并工具回收空间

使用 XenCenter 启用隐藏对象。单击 视图 > 隐藏 对象。在资源窗格中,选择要获取 UUID 的虚拟机。UUID 显示在 常规 选项卡中。

资源 窗格中,选择资源池协调器(列表中的第一个主机)。常规 选项卡显示 UUID。如果您未使用资源池,请选择虚拟机的宿主机。

  1. 在宿主机上打开控制台并运行以下命令:

    xe host-call-plugin host-uuid=host-UUID \
        plugin=coalesce-leaf fn=leaf-coalesce args:vm_uuid=VM-UUID
    <!--NeedCopy-->
    

    例如,如果虚拟机 UUID 为 9bad4022-2c2d-dee6-abf5-1b6195b1dad5 且宿主机 UUID 为 b8722062-de95-4d95-9baa-a5fe343898ea,请运行以下命令:

    xe host-call-plugin host-uuid=b8722062-de95-4d95-9baa-a5fe343898ea \
        plugin=coalesce-leaf fn=leaf-coalesce args:vm_uuid=9bad4022-2c2d-dee6-abf5-1b6195b1dad5
    <!--NeedCopy-->
    
  2. 此命令会暂停虚拟机(除非它已关机),启动空间回收过程,然后恢复虚拟机。

注意:

建议您在运行离线合并工具之前手动关闭或暂停虚拟机。您可以使用 XenCenter 或 XenServer CLI 关闭或暂停虚拟机。如果您在运行中的虚拟机上运行合并工具,该工具会自动暂停虚拟机,执行所需的 VDI 合并操作,然后恢复虚拟机。敏捷虚拟机可能会在不同的宿主机上重新启动。

如果要合并的虚拟磁盘映像 (VDIs) 位于共享存储上,则必须在池协调器上运行离线合并工具。

如果要合并的 VDIs 位于本地存储上,请在连接了本地存储的宿主机上运行离线合并工具。

使用磁盘 I/O

您可以配置磁盘 I/O 调度程序和磁盘 I/O 优先级设置来更改磁盘的性能。

注意:

本节中描述的磁盘 I/O 功能不适用于 GFS2、NFS 或 SMB3 存储。

调整磁盘 I/O 调度程序

对于一般性能,默认磁盘调度程序 noop 应用于所有新的 SR 类型。noop 调度程序为访问同一设备的竞争虚拟机提供最公平的性能。

  1. 使用以下命令调整磁盘调度程序:

    xe sr-param-set other-config:scheduler=<option> uuid=<sr_uuid>
    <!--NeedCopy-->
    

    <option> 的值可以是以下术语之一:noopcfqdeadline

  2. 拔出并重新插入相应的 PBD,以使调度程序参数生效。

    xe pbd-unplug uuid=<pbd_uuid>
    xe pbd-plug uuid=<pbd_uuid>
    <!--NeedCopy-->
    

要应用磁盘 I/O 请求优先级,请覆盖默认设置并将 cfq 磁盘调度程序分配给 SR。

虚拟磁盘 I/O 请求优先级

虚拟磁盘具有可选的 I/O 请求优先级设置。您可以使用这些设置来优先处理特定虚拟机磁盘的 I/O,而不是其他磁盘的 I/O。

在为 VBD 配置任何磁盘 I/O 请求优先级参数之前,请确保已正确设置 SR 的磁盘调度程序。调度程序参数必须在 SR 上设置为 cfq,并且关联的 PBD 必须拔出并重新插入。有关如何调整调度程序的信息,请参阅 调整磁盘 I/O 调度程序

对于共享 SR,当多个主机访问同一 LUN 时,优先级设置将应用于从同一主机访问 LUN 的 VBD。这些设置不适用于池中的所有主机。

主机向远程存储发出请求,但请求优先级由远程存储完成。

设置磁盘 I/O 请求参数

可以使用带以下参数的 xe vbd-param-set 命令将这些设置应用于现有虚拟磁盘:

  • qos_algorithm_type - 此参数必须设置为值 ionice,这是虚拟磁盘唯一支持的算法。

  • qos_algorithm_param - 使用此参数设置键值对。对于虚拟磁盘,qos_algorithm_param 采用 sched 键,并且根据值,还需要一个 class 键。

    qos_algorithm_param:sched 可以具有以下值之一:

    • sched=rtsched=real-time - 此值将调度参数设置为实时优先级,这需要一个 class 参数来设置值。

    • sched=idle - 此值将调度参数设置为空闲优先级,这不需要 class 参数来设置任何值。

    • sched=anything - 此值将调度参数设置为尽力而为优先级,这需要 class 参数来设置一个值。

    qos_algorithm_param:class 可以具有以下值之一:

    • 以下关键字之一:highesthighnormallowlowest

    • 一个介于 0 和 7 之间的整数,其中 7 是最高优先级,0 是最低优先级。例如,优先级为 5 的 I/O 请求优先于优先级为 2 的 I/O 请求。

示例

例如,以下 CLI 命令将虚拟磁盘的 VBD 设置为使用实时优先级 5

xe vbd-param-set uuid=<vbd_uuid> qos_algorithm_type=ionice
xe vbd-param-set uuid=<vbd_uuid> qos_algorithm_params:sched=rt
xe vbd-param-set uuid=<vbd_uuid> qos_algorithm_params:class=5
xe sr-param-set uuid=<sr_uuid> other-config:scheduler=cfq
xe pbd-unplug uuid=<pbd_uuid>
xe pbd-plug uuid=<pbd_uuid>
<!--NeedCopy-->