管理存储库

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

创建存储库

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

注意:

lvmext3 类型的本地 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>

再次探测相同的目标并指定名称/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>

探测相同的目标并提供所有三个参数将返回在 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>

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

SR 类型 device-config 参数(按依赖关系排序) 是否可以探测? sr-create 必需?
lvmoiscsi target
  chapuser
  chappassword
  targetIQN
  SCSIid
lvmohba SCSIid
NetApp target
  username
  password
  chapuser
  chappassword
  aggregate 否(请参阅备注 1)
  FlexVols
  allocation
  asis
nfs server
  serverpath
lvm device
ext device
EqualLogic target
  username
  password
  chapuser
  chappassword
  storagepool 否(请参阅备注 2)

注意:

  • 只有在运行 sr-create 时才能执行聚合探测。
  • 只有在运行 sr-create 时才能执行存储池探测。

删除 SR

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

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

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

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

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

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

    xe pbd-unplug uuid=pbd_uuid
    
  2. 使用 sr-destroy 命令可删除 SR。该命令将销毁 SR,从 XenServer 主机数据库中删除 SR 及其相应的 PBD,并从物理磁盘中删除 SR 内容:

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

    xe sr-forget uuid=sr_uuid
    

注意:

需要一段时间才能完成对与 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
    
  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
    
  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
    
  4. 插入此 PBD 以连接 SR:

    xe pbd-plug uuid=pbd_uuid
    
  5. 验证此 PBD 插件的状态。如果成功,currently-attached 属性将为 true:

    xe pbd-list sr-uuid=sr_uuid
    

注意:

请对资源池中的每个服务器执行步骤 3 到 5。还可以使用 XenCenter 中的“修复存储库”功能执行这些步骤。

实时 LUN 扩展

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

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

xe sr-scan sr-uuid=sr_uuid

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

此操作还在 XenCenter 中可用。选择要调整大小的 SR,然后单击重新扫描。有关详细信息,请按 F1 以显示 XenCenter 帮助。

警告:

  • 无法收缩或截断 LUN。减小存储阵列中的 LUN 大小可能导致数据丢失。
  • GFS2 SR 不支持调整 LUN 的大小。

实时 VDI 迁移

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

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

限制和注意事项

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

  • 在目标库中必须具有充足的磁盘空间。

  • 无法迁移具有多个快照的 VDI。

移动虚拟磁盘,工具为 XenCenter

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

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

  3. 移动虚拟磁盘对话框中,选择要将 VDI 移至的目标 SR。

    注意:

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

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

有关 xe CLI 参考,请参阅 [vdi-pool-migrate](/zh-cn/xenserver/current-release/command-line-interface.html#vdi-pool-migrate)。

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

可以将与 VM 关联的 VDI 从一个 SR 复制到另一个 SR 以符合维护要求或分层存储配置。XenCenter 允许您将 VM 及其所有 VDI 复制到同一个或另一个 SR。可以结合使用 XenCenter 和 xe CLI 在 SR 之间复制各个 VDI。

有关 xe CLI 参考,请参阅 [vm-migrate](/zh-cn/xenserver/current-release/command-line-interface.html#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
    

    注意:

    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
    
  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 7.6。

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

  3. 将 SR 转换为共享 SR:

    xe sr-param-set shared=true uuid=local_fc_sr
    
  4. 在 XenCenter 中,SR 将从主机级别移动到池级别,指示其现在为共享 SR。使用红色感叹号对该 SR 进行标记,以显示当前并未在池中的所有主机上都插入了该 SR。

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

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

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

可以使用空间回收功能释放精简预配的 LUN 上未使用的块。释放空间后,存储阵列随后可以重复使用这一回收的空间。

注意:

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

使用 XenCenter 回收空间:

  1. 选择基础结构视图,然后单击连接到 SR 的服务器或池。

  2. 单击存储选项卡。

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

  4. 单击确认该操作。

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

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

注意:

  • 此操作仅在 XenCenter 中可用。
  • 此操作仅适用于基于 LVM 的 SR,这些 SR 基于阵列上经过精简预配的 LUN。本地 SSD 也将从空间回收中受益。
  • 基于文件的 SR 不需要空间回收,例如 NFS 和 Ext3。回收释放的空间按钮在 XenCenter 中对这些 SR 类型不可用。
  • 空间回收是一种密集型操作,会导致存储阵列性能下降。因此,请仅在阵列上需要空间回收时启动此操作。Citrix 建议将此项工作安排在非阵列需求高峰期进行。

删除快照时自动回收空间

通过 XenServer 删除快照时,基于 LVM 的 SR 上分配的空间将自动回收,并且无需重新启动 VM。此操作称为“联机合并”。

联机合并仅适用于基于 LVM 的 SR(LVM、LVMoISCSI 和 LVMoHBA)。不适用于 EXT 或 NFS SR,其行为保持不变。在某些情况下,自动执行的空间回收可能无法继续。我们建议您在以下情况下使用脱机合并工具:

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

注意:

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

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

注意:

联机合并仅适用于基于 LVM 的 SR(LVM、LVMoISCSI 和 LVMoHBA),而不适用于 EXT 或 NFS SR(这些 SR 的行为保持不变)。

使用 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
    

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

注意:

Citrix 建议您在执行脱机合并工具之前手动关闭或挂起 VM。可以使用 XenCenter 或 XenServer CLI 关闭或挂起 VM。如果在运行中的 VM 上执行合并工具,该工具将自动挂起 VM,执行所需的 VDI 合并操作,然后恢复该 VM。

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

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

调整磁盘 I/O 调度程序

为了获得一般性能,会对所有新 SR 类型应用默认磁盘调度程序 noopnoop 调度程序提供可与访问相同设备的 VM 相媲美的最佳性能。为了应用磁盘 QoS,需要覆盖默认设置并将 cfq 磁盘调度程序分配给 SR。必须拔出并重新插入相应的 PBD 以使调度程序参数生效。可以使用以下命令调整磁盘调度程序:

xe sr-param-set other-config:scheduler=noop|cfq|anticipatory|deadline \
uuid=valid_sr_uuid

注意:

此命令不影响 EqualLogic、NetApp 或 NFS 存储。

虚拟磁盘 QoS 设置

虚拟磁盘具有可选 I/O 优先级质量服务 (QoS) 设置。可以按照本节介绍的方法使用 xe CLI 将此设置应用到现有虚拟磁盘。

对于共享 SR(即多个主机访问同一 LUN),会将 QoS 设置应用到从同一主机访问 LUN 的 VBD。即不会跨池中的主机应用 QoS。

为 VBD 配置任何 QoS 参数之前,请确保已适当设置了 SR 的磁盘调度程序。有关如何调整调度程序的详细信息,请参阅前面部分中的调整磁盘 I/O 调度程序。必须在需要 QoS 的 SR 上将调度程序参数设置为 cfq

注意:

请谨记在 SR 上将该调度程序设置为 cfq,并确保已重新插入 PBD 以使调度程序更改生效。

第一个参数为 qos_algorithm_type。必须将此参数值设置为 ionice,这是此版本中的虚拟磁盘唯一支持的 QoS 算法类型。

QoS 参数本身是使用分配给 qos_algorithm_param 参数的键/值对设置的。对于虚拟磁盘,qos_algorithm_param 使用 sched 键,并且根据参数值,还需要使用 class 键。

qos_algorithm_param:sched 可能的值包括:

- sched=rtsched=real-time 将 QoS 调度参数设置为实时优先级,此优先级需要使用类参数来设置

- sched=idle 将 QoS 调度参数设置为空闲优先级,此优先级不需要使用类参数来设置

- sched=anything 将 QoS 调度参数设置为 best-effort 优先级,此优先级需要使用类参数来设置

class 的可能值包括:

  • 以下关键词之一:最高、高、普通、低、最低

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

要启用磁盘 QoS 设置,还必须将 other-config:scheduler 设置为 cfq 并重新插入所涉及的存储的 PBD。

例如,以下 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-plug uuid=pbd_uuid