管理存储库
本节介绍了创建存储库类型并使其可用于 Citrix Hypervisor 服务器。本部分内容介绍了存储库 (SR) 日常管理中所需的各种操作,包括实时 VDI 迁移。
创建存储库
本节介绍了如何创建不同类型的存储库 (SR) 并使其可用于 Citrix Hypervisor 服务器。提供的示例涉及使用 xe CLI 创建 SR。有关使用 XenCenter 通过新建存储库向导添加 SR 的详细信息,请参阅 XenCenter 文档。
注意:
lvm
和ext
类型的本地 SR 只能使用 xe CLI 创建。创建后,可以使用 XenCenter 或 xe CLI 管理所有 SR 类型。
使用 CLI 创建在主机上使用的存储库包括两个基本步骤:
-
探测 SR 类型以确定任何必需参数的值。
-
创建 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 必须从主机上拔出。
-
拔出 PBD 以将 SR 与相应的 Citrix Hypervisor 服务器分离:
xe pbd-unplug uuid=pbd_uuid <!--NeedCopy-->
-
使用
sr-destroy
命令可删除 SR。该命令将销毁 SR,从 Citrix Hypervisor 服务器数据库中删除 SR 及其相应的 PBD,并从物理磁盘中删除 SR 内容:xe sr-destroy uuid=sr_uuid <!--NeedCopy-->
-
使用
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。
-
探测现有 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-->
-
引入从
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-->
-
创建一个随附 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-->
-
插入此 PBD 以连接 SR:
xe pbd-plug uuid=pbd_uuid <!--NeedCopy-->
-
验证此 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 移动虚拟磁盘
-
在资源窗格中,选择存储虚拟磁盘的 SR,然后单击存储选项卡。
-
在虚拟磁盘列表中,选择要移动的虚拟磁盘,然后单击移动。
-
在移动虚拟磁盘对话框中,选择要将 VDI 移至的目标 SR。
注意:
确保该 SR 具有可容纳另一个虚拟磁盘的充足空间:可用空间在可用 SR 列表中显示。
-
单击移动以移动虚拟磁盘。
有关 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”选项。
- 关闭 VM。
- 在 XenCenter 中,选择该 VM,然后选择 VM > 复制 VM 选项。
- 选择所需的目标 SR。
将各个 VDI 复制到另一个 SR
可以结合使用 xe CLI 和 XenCenter 在 SR 之间复制各个 VDI。
-
关闭 VM。
-
使用 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。 -
在 XenCenter 中,选择 VM 存储选项卡。对于要移动的每个 VDI,请选择该 VDI,然后单击分离按钮。还可以使用
vbd-destroy
命令执行此步骤。注意:
如果使用
vbd-destroy
命令分离 VDI 的 UUID,请首先检查 VBD 是否将参数other-config:owner
设置为true
。将此参数设置为false
。发出带other-config:owner=true
的vbd-destroy
命令还将销毁关联的 VDI。 -
使用
vdi-copy
命令复制要移动到所需 SR 的每个 VM 的 VDI。xe vdi-copy uuid=valid_vdi_uuid sr-uuid=valid_sr_uuid <!--NeedCopy-->
-
在 XenCenter 中,选择 VM 存储选项卡。单击连接按钮并从新 SR 中选择 VDI。还可以使用
vbd-create
命令执行此步骤。 -
要删除原始 VDI,请在 XenCenter 中选择原始 SR 的存储选项卡。将列出原始 VDI,其中 VM 字段的值为空。使用删除按钮删除 VDI。
将本地光纤通道 SR 转换为共享 SR
使用 xe CLI 和 XenCenter 修复存储库功能将本地 FC SR 转换为共享 FC SR:
-
将资源池中的所有主机升级为 Citrix Hypervisor 8.2。
-
确保池中的所有主机都对 SR 的 LUN 进行了适当的分区。有关使用
sr-probe
命令验证每台主机上是否都存在 LUN 的详细信息,请参阅探测 SR。 -
将 SR 转换为共享 SR:
xe sr-param-set shared=true uuid=local_fc_sr <!--NeedCopy-->
-
在 XenCenter 中,SR 将从主机级别移动到池级别,指示其现在为共享 SR。使用红色感叹号对该 SR 进行标记,以显示当前并未在池中的所有主机上都插入了该 SR。
-
选择该 SR,然后选择存储 > 修复存储库选项。
-
单击修复以创建并为池中的每个主机插上 PBD。
使用丢弃功能回收备用阵列上基于块的存储的空间
可以使用空间回收功能释放精简预配的 LUN 上未使用的块。释放空间后,存储阵列随后可以重复使用这一回收的空间。
注意:
空间回收功能仅在某些类型的存储阵列上可用。请参阅硬件兼容性列表和存储供应商特定的文档,确定阵列是否支持此功能,以及是否需要特定的配置。
要使用 XenCenter 回收空间,请执行以下操作:
-
选择基础结构视图,然后单击连接到 SR 的服务器或池。
-
单击存储选项卡。
-
从列表中选择该 SR,然后单击回收释放的空间。
-
单击是确认该操作。
-
单击通知,然后单击事件,查看操作状态。
有关详细信息,请在 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 的主机。
-
在主机上打开控制台并运行以下命令:
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-->
-
此命令将挂起 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 类型应用默认磁盘调度程序 noop
。noop
调度程序提供可与访问相同设备的 VM 相媲美的最佳性能。
-
使用以下命令调整磁盘计划程序:
xe sr-param-set other-config:scheduler=<option> uuid=<sr_uuid> <!--NeedCopy-->
<option>
的值可以是以下术语之一:noop
、cfq
或deadline
。 -
拔出并重新插入相应的 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=rt
或sched=real-time
- 此值将计划参数设置为实时优先级,这需要class
参数来设置值。 -
sched=idle
- 此值将调度参数设置为空闲优先级,此优先级不需要使用class
参数来设置任何值。 -
sched=anything
- 此值将计划参数设置为最大努力优先级,这需要class
参数来设置值。
注册表项
qos_algorithm_param:class
可以具有以下值之一:-
以下关键字之一:
highest
、high
、normal
、low
、lowest
。 -
介于 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-->