iSCSI 作为 KVM 存储后端:有关每个 VM 的目标和 LUN 的最佳实践

iSCSI 作为 KVM 存储后端:有关每个 VM 的目标和 LUN 的最佳实践

我正在使用 iSCSI 池作为几个虚拟机的存储后端,我想知道其他人如何在这种用例中使用目标和 LUN。

我一开始使用一个名为的目标iqn.2016-06.iscsihost:kvmguests,每个虚拟机都有一个 LUN。然而,这导致与虚拟机关联的存储目标的一些名称不太理想(请参阅这个问题),因此我想知道我是否应该切换到每个 VM 一个目标(每个目标可能有几个 LUN,例如用于单独的 OS 磁盘等)。这会产生副作用,即名称非常简洁,在 KVM 方面不容易混淆(例如iqn.2016-06.iscsihost:webserver01iqn.2016-06.iscsihost:database07等)。我不确定这会产生什么影响,因此非常感谢任何指示。

所以问题是:最佳做法是什么?每个虚拟机一个目标,一个 (或多个) LUN,还是每个虚拟机一个目标?

更新: 想想看,必须将每个 iSCSI 目标作为存储池添加到每个 KVM 主机。这非常不方便,因为每次添加新 VM 时都必须更改每个 KVM 主机的配置...或者我遗漏了什么。在现实世界中如何做到这一点?

答案1

我不能代表 KVM 发言,但我们正在使用 iSCSI 将带有 4 个 ESXi 主机的 VMWare VSphere 集群连接到我们的 Dell Compellent 存储系统,并且我们只是为大约 4-5 个虚拟机创建数据存储,目前每个 LUN 大约 2 TB。您不希望太多虚拟机位于单个 iSCSI 连接上,但您也不希望每个虚拟机有多个 LUN 带来巨大的管理开销,特别是当您的环境超过 4-5 个虚拟机时。“最佳”设置取决于您的环境、存储后端的功能(多个控制器、负载平衡等)和虚拟化解决方案。

答案2

Libvirt 项目最初设计 iSCSI 存储以存在于 KVM 主机上的池中。正如您所观察到的,使用 iSCSI 这样做没有多大意义,特别是如果您想要移动虚拟机。我相信这就是 QEMU 项目使用库实现自己的“内置 iSCSI”驱动程序的原因libiscsi。这样,虚拟机本身就可以连接到 iSCSI 目标进行存储。如果 QEMU 进程自行连接到目标,则它不依赖于主机,并且可以很容易地实时迁移到其他主机,而主机无需了解任何有关 iSCSI 存储基础架构的信息。

使用原始 QEMU 很容易做到这一点,如下所示:

-device virtio-scsi-pci,id=scsi0 \
-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,drive=disk0 \
-drive id=disk0,file=iscsi://server.example.com/iqn.2000-01.com.example:server:target/0,if=none,cache=none,format=raw,media=disk,discard=unmap

在这里找到 QEMU 文档:

https://www.qemu.org/docs/master/qemu-doc.html#Device-URL-Syntax

我已经能够使 Libvirt 抽象像这样工作:

<domain type='qemu'>
  <!-- snip -->
  <devices>
    <!-- snip -->
    <controller type='scsi' index='0' model='virtio-scsi'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <disk type='network' device='lun'>
      <driver name='qemu' cache='none' discard='unmap'/>
      <source protocol='iscsi' name='iqn.2000-01.com.example:server:target/0'>
        <host name='server.example.com' port='3260'/>
      </source>
      <target dev='sda' bus='scsi'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <!-- snip -->
  </devices>
</domain>

相关内容