Citrix Hypervisor

管理存储库

本节介绍了创建存储库类型并使其可用于 Citrix Hypervisor 服务器。本部分内容介绍了存储库 (SR) 日常管理中所需的各种操作,包括实时 VDI 迁移。

创建存储库

本节介绍了如何创建不同类型的存储库 (SR) 并使其可用于 Citrix Hypervisor 服务器。提供的示例涉及使用 xe CLI 创建 SR。有关使用 XenCenter 通过新建存储库向导添加 SR 的详细信息,请参阅 XenCenter 文档

注意:

lvmext 类型的本地 SR 只能使用 xe CLI 创建。创建后,可以使用 XenCenter 或 xe CLI 管理所有 SR 类型。

使用 CLI 创建在主机上使用的存储库包括两个基本步骤:

  1. 探测 SR 类型以确定任何必需参数的值。

  2. 创建 SR 以初始化 SR 对象及关联的 PBD 对象、插入 PBD 以及激活 SR。

根据所创建的 SR 类型,这些步骤在细节上有所不同。在所有示例中,如果成功,sr-create 命令将返回创建的 SR 的 UUID。

不再使用 SR 时可以将其销毁,以释放物理设备。此外,还可以忘记 SR,以将 SR 与 Citrix Hypervisor 服务器分离,并将其连接到另一个服务器。有关详细信息,请参阅以下部分中的删除 SR

探测 SR

sr-probe 命令有以下两种使用方式:

  • 确定未知参数以在创建 SR 时使用
  • 返回现有 SR 的列表

在这两种情况下,sr-probe 通过指定 SR 类型和该 SR 类型的一个或多个 device-config 参数起作用。如果提供的参数集不完整,sr-probe 命令将返回错误消息,指示参数缺失以及缺失参数的可能选项。如果提供的参数集完整,则将返回现有 SR 的列表。所有 sr-probe 输出将以 XML 格式返回。

例如,可以通过指定已知 iSCSI 目标的名称或 IP 地址来探测该目标。将返回该目标上可用的 IQN 集合:

    xe sr-probe type=lvmoiscsi device-config:target=192.168.1.10

    Error code: SR_BACKEND_FAILURE_96
    Error parameters: , The request is missing or has an incorrect target IQN parameter, \
    <?xml version="1.0" ?>
    <iscsi-target-iqns>
        <TGT>
            <Index>
                0
            </Index>
            <IPAddress>
                192.168.1.10
            </IPAddress>
            <TargetIQN>
                iqn.192.168.1.10:filer1
            </TargetIQN>
        </TGT>
    </iscsi-target-iqns>
<!--NeedCopy-->

再次探测相同的目标并指定名称/IP 地址和所需的 IQN 将返回该目标/IQN 上的可用 SCSIids (LUN) 集合。

    xe sr-probe type=lvmoiscsi device-config:target=192.168.1.10  \
    device-config:targetIQN=iqn.192.168.1.10:filer1

    Error code: SR_BACKEND_FAILURE_107
    Error parameters: , The SCSIid parameter is missing or incorrect, \
    <?xml version="1.0" ?>
    <iscsi-target>
        <LUN>
            <vendor>
                IET
            </vendor>
            <LUNid>
                0
            </LUNid>
            <size>
                42949672960
            </size>
            <SCSIid>
                149455400000000000000000002000000b70200000f000000
            </SCSIid>
        </LUN>
    </iscsi-target>
<!--NeedCopy-->

探测上述目标并提供所有三个参数将返回在 LUN 上存在(如果有)的 SR 的列表。

    xe sr-probe type=lvmoiscsi device-config:target=192.168.1.10  \
    device-config:targetIQN=192.168.1.10:filer1 \
    device-config:SCSIid=149455400000000000000000002000000b70200000f000000

    <?xml version="1.0" ?>
    <SRlist>
        <SR>
            <UUID>
                3f6e1ebd-8687-0315-f9d3-b02ab3adc4a6
            </UUID>
            <Devlist>
                /dev/disk/by-id/scsi-149455400000000000000000002000000b70200000f000000
            </Devlist>
        </SR>
    </SRlist>
<!--NeedCopy-->

可以针对每个 SR 类型探测以下参数:

SR 类型 device-config 参数(按依赖关系排序) 是否可以探测? sr-create 必填的吗?
lvmoiscsi target
  chapuser
  chappassword
  targetIQN
  SCSIid
lvmohba SCSIid
lvmofcoe SCSIid
nfs server
  serverpath
‘smb’ server
  username
  password
lvm device
ext device

删除 SR

存储库 (SR) 可被临时或永久删除。

分离: 断开存储设备与池或主机之间的关联 (PBD Unplug)。SR(及其 VDI)将变得不可访问。VDI 的内容和 VM 用来访问 VDI 的元信息将被保存。需要临时将 SR 置于脱机状态(例如,为了进行维护)时,可以使用分离。分离的 SR 随后可以重新连接。

忘记: 在物理磁盘上保存 SR 的内容,但永久删除用于将 VM 连接到其 VDI 的信息。例如,这允许您将 SR 重新连接到另一个 Citrix Hypervisor 服务器,而不必删除 SR 的任何内容。

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

注意:

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

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

  1. 拔出 PBD 以将 SR 与相应的 Citrix Hypervisor 服务器分离:

    xe pbd-unplug uuid=pbd_uuid
    <!--NeedCopy-->
    
  2. 使用 sr-destroy 命令可删除 SR。该命令将销毁 SR,从 Citrix Hypervisor 服务器数据库中删除 SR 及其相应的 PBD,并从物理磁盘中删除 SR 内容:

    xe sr-destroy uuid=sr_uuid
    <!--NeedCopy-->
    
  3. 使用 sr-forget 命令可忘记 SR。该命令将从 Citrix Hypervisor 服务器数据库中删除 SR 及其相应的 PBD,但会保持物理介质上的实际 SR 内容不变:

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

注意:

需要一段时间才能完成对与 SR 相对应的软件对象进行垃圾回收。

引入 SR

要重新引入以前忘记的 SR,请创建一个 PBD。将该 PBD 手动插入相应的 Citrix Hypervisor 服务器以激活 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. 创建一个随附 SR 的 PBD。将返回新 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 扩展

为了满足容量要求,可能需要为存储阵列添加容量,以增加为 Citrix Hypervisor 服务器预配的 LUN 大小。实时 LUN 扩展允许您增加 LUN 的大小而不会出现任何 VM 停机的情况。

将更多容量添加到存储阵列后,请输入

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

此命令会重新扫描 SR,之后将添加任何额外容量并使其可用。

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

警告:

  • 无法收缩或截断 LUN。减小存储阵列中的 LUN 大小可能导致数据丢失。

实时 VDI 迁移

实时 VDI 迁移允许管理员重新定位 VM 虚拟磁盘映像 (VDI),而无需关闭 VM。此功能支持执行管理操作,例如:

  • 将 VM 从便宜的本地存储移至快速灵活且支持阵列的存储中。
  • 将 VM 从开发环境移至生产环境。
  • 在存储层中移动 VM(如果 VM 受到存储容量限制)。
  • 执行存储阵列升级。

限制和注意事项

实时 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. 关闭 VM。

  2. 使用 xe CLI 标识要移动的 VDI 的 UUID。如果 VM 具有 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 存储选项卡。对于要移动的每个 VDI,请选择该 VDI,然后单击分离按钮。还可以使用 vbd-destroy 命令执行此步骤。

    注意:

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

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

    xe vdi-copy uuid=valid_vdi_uuid sr-uuid=valid_sr_uuid
    <!--NeedCopy-->
    
  5. 在 XenCenter 中,选择 VM 存储选项卡。单击连接按钮并从新 SR 中选择 VDI。还可以使用 vbd-create 命令执行此步骤。

  6. 要删除原始 VDI,请在 XenCenter 中选择原始 SR 的存储选项卡。将列出原始 VDI,其中 VM 字段的值为空。使用删除按钮删除 VDI。

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

使用 xe CLI 和 XenCenter 修复存储库功能将本地 FC SR 转换为共享 FC SR:

  1. 将资源池中的所有主机升级为 Citrix Hypervisor 8.2。

  2. 确保池中的所有主机都对 SR 的 LUN 进行了适当的分区。有关使用 sr-probe 命令验证每台主机上是否都存在 LUN 的详细信息,请参阅探测 SR

  3. 将 SR 转换为共享 SR:

    xe sr-param-set shared=true uuid=local_fc_sr
    <!--NeedCopy-->
    
  4. 在 XenCenter 中,SR 将从主机级别移动到池级别,指示其现在为共享 SR。使用红色感叹号对该 SR 进行标记,以显示当前并未在池中的所有主机上都插入了该 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 的 SR,这些 SR 基于阵列上经过精简预配的 LUN。本地 SSD 也将从空间回收中受益。
  • 基于文件的 SR 不需要空间回收,例如 NFS 和 EXT3/EXT4。回收释放的空间按钮在 XenCenter 中对这些 SR 类型不可用。
  • 如果对基于文件的 SR 或厚预配的基于 LVM 的 SR 运行 space reclamation xe 命令,该命令将返回错误。
  • 空间回收是一种密集型操作,会导致存储阵列性能下降。因此,仅在阵列上需要空间回收时启动此操作。我们建议您将此项工作安排在非阵列需求高峰期进行。

删除快照时自动回收空间

通过 Citrix Hypervisor 删除快照时,基于 LVM 的 SR 上分配的空间将被自动回收,并且无需重新启动 VM。此操作称为“联机合并”。联机合并适用于所有类型的 SR。但是,GFS2 SR 无法执行叶子合并,也就是说,VM 正在写入的 VDI 无法与其在 GFS2 SR 上的父级进行合并。

在某些情况下,自动执行的空间回收可能无法继续。我们建议您在以下情况下使用脱机合并工具:

  • VM I/O 吞吐量相当大时
  • 一段时间后未回收空间时

备注:

  • 由于需要执行挂起/恢复操作,因此运行“脱机合并”工具会导致 VM 停机。
  • 在运行此工具之前,请删除不再需要的任何快照和克隆。该工具将回收尽可能多的空间用于剩余的快照/克隆。如果要回收整个空间,请删除所有快照和克隆。
  • VM 磁盘必须位于一个主机的共享或本地存储上。如果 VM 的磁盘采用这两种存储类型,VM 将无法合并。

使用脱机合并工具回收空间

使用 XenCenter 启用隐藏的对象。单击查看 > 隐藏的对象。在“资源”窗格中,选择要获得 UUID 的 VM。UUID 将显示在常规选项卡中。

资源窗格中,选择资源池主服务器(列表中的第一个主机)。常规选项卡将显示 UUID。如果未使用资源池,请选择该 VM 的主机。

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

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

    例如,如果 VM 的 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. 此命令将挂起 VM(除非 VM 已经关机),启动空间回收过程,然后恢复该 VM。

备注:

我们建议您在运行脱机合并工具之前手动关闭或挂起 VM。可以使用 XenCenter 或 Citrix Hypervisor CLI 关闭或挂起 VM。如果在运行中的 VM 上运行合并工具,该工具将自动挂起 VM,执行所需的 VDI 合并操作,然后恢复该 VM。敏捷 VM 可能会在其他主机上重新启动。

如果要合并的虚拟磁盘映像 (VDI) 位于共享存储上,则必须在池主服务器上运行脱机合并工具。

如果要合并的 VDI 位于本地存储上,请在本地存储连接到的服务器上运行脱机合并工具。

使用磁盘 I/O

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

注意:

本部分内容中介绍的磁盘 I/O 功能不适用于 EqualLogic、NetApp 或 NFS 存储。

调整磁盘 I/O 调度程序

为了获得一般性能,会对所有新 SR 类型应用默认磁盘调度程序 noopnoop 调度程序提供可与访问相同设备的 VM 相媲美的最佳性能。

  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 请求优先级设置。您可以使用这些设置将特定 VM 磁盘的 I/O 优先于其他 VM 磁盘。

为 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-->