XenServer

管理存储库

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

创建存储库

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

注意:

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

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

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

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

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

不再使用 SR 时可以将其销毁,以释放物理设备。此外,还可以忘记 SR,以将 SR 与 XenServer 主机分离,并将其连接到另一个主机。有关详细信息,请参阅以下部分中的删除 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

有关探测 GFS2 SR 的信息,请参阅创建 GFS2 SR

删除 SR

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

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

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

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

注意:

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

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

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

    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. 创建一个随附 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 扩展

为了满足容量要求,可能需要为存储阵列添加容量,以增加为 XenServer 主机预配的 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. 将资源池中的所有主机升级为 XenServer 8。

  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 命令,该命令将返回错误。
  • 空间回收是一种密集型操作,会导致存储阵列性能下降。因此,仅在阵列上需要空间回收时启动此操作。我们建议您将此项工作安排在非阵列需求高峰期进行。

删除快照时自动回收空间

通过 XenServer 删除快照时,基于 LVM 的 SR 上分配的空间将自动回收,并且无需重新启动 VM。此操作称为“联机合并”。联机合并适用于所有类型的 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 或 XenServer 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-->