配置多存储后端

配置多个存储后端时,您可以创建多个后端存储解决方案来服务于相同的 OpenStack Compute 配置,并为每个后端存储或后端存储池启动一个 cinder-volume

在多存储后端配置中,每个后端都有一个名称 (volume_backend_name)。 多个后端可以具有相同的名称。在这种情况下,调度器会正确决定将卷创建在哪个后端。

后端名称声明为卷类型的额外规范 (例如,volume_backend_name=LVM)。 当创建卷时,调度器会根据用户指定的卷类型选择合适的后端来处理请求。

启用多存储后端

要启用多存储后端,您必须在 cinder.conf 文件中设置 enabled_backends 标志。 此标志定义了不同后端配置组的名称(用逗号分隔):一个名称与后端的一个配置组相关联(例如,[lvmdriver-1])。

注意

配置组名称与 volume_backend_name 无关。

注意

在现有的 cinder 服务上设置 enabled_backends 标志并重新启动块存储服务后,原始 host 服务将被新的主机服务替换。 新服务将以类似于 host@backend 的名称出现。 使用

$ cinder-manage volume update_host --currenthost CURRENTHOST --newhost CURRENTHOST@BACKEND

将当前的块设备转换为新的主机名称。

配置组的选项必须在组中定义(或者使用默认选项)。 所有标准的块存储配置选项 (volume_groupvolume_driver 等) 可以在配置组中使用。 [DEFAULT] 配置组中的配置值不使用。

这些示例显示了三个后端

enabled_backends=lvmdriver-1,lvmdriver-2,lvmdriver-3
[lvmdriver-1]
volume_group=cinder-volumes-1
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name=LVM
[lvmdriver-2]
volume_group=cinder-volumes-2
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name=LVM
[lvmdriver-3]
volume_group=cinder-volumes-3
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name=LVM_b

在此配置中,lvmdriver-1lvmdriver-2 具有相同的 volume_backend_name。 如果卷创建请求 LVM 后端名称,则调度器使用容量过滤器调度器来选择最合适的驱动程序,即 lvmdriver-1lvmdriver-2。 容量过滤器调度器默认启用。 下一节提供更多信息。 此外,此示例还呈现了一个 lvmdriver-3 后端。

注意

对于支持多路径的 Fiber Channel 驱动程序,配置组需要 use_multipath_for_image_xfer=true 选项。 在下面的示例中,您可以查看 HPE 3PAR 和 EMC Fiber Channel 驱动程序的详细信息。

[3par]
use_multipath_for_image_xfer = true
volume_driver = cinder.volume.drivers.hpe.hpe_3par_fc.HPE3PARFCDriver
volume_backend_name = 3parfc

[emc]
use_multipath_for_image_xfer = true
volume_driver = cinder.volume.drivers.emc.emc_smis_fc.EMCSMISFCDriver
volume_backend_name = emcfc

配置共享卷驱动程序后端

配置多个卷后端时,可以使用 [backend_defaults] 部分共享公共配置参数。 例如

[DEFAULT]
enabled_backends=backend1,backend2,backend3

[backend_defaults]
image_volume_cache_enabled = True
volume_clear = none
target_helper = tgtadm
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

[backend1]
volume_group = cinder-volume-1
image_volume_cache_enabled = False

[backend2]
volume_group = cinder-volume-2

[backend3]
volume_group = cinder-volume-3

在此配置中,backend2backend3 具有相同的 image_volume_cache_enabled,因为它在 backend_defaults 部分中定义。 换句话说,backend2backend3 启用了镜像缓存功能。 backend1 中的 image_volume_cache_enabled 为 False,这意味着对卷后端所做的任何覆盖配置都将忽略 backend_defaults 中的原始值。

注意

应根据您的云环境或后端驱动程序信息配置 backend_defaults 部分。

配置块存储调度器多后端

必须启用 filter_scheduler 选项才能使用多存储后端。 过滤器调度器

  1. 过滤可用的后端。 默认情况下,启用 AvailabilityZoneFilterCapacityFilterCapabilitiesFilter

  2. 对先前过滤的后端进行加权。 默认情况下,启用 CapacityWeigher 选项。 启用此选项时,过滤器调度器会将最高权重分配给具有最多可用容量的后端。

调度器使用过滤器和权重来选择最佳后端来处理请求。 调度器使用卷类型来显式地在特定后端上创建卷。 有关过滤器和权重的更多信息,请参阅 配置和使用调度器的驱动程序过滤器和权重

卷类型

在使用它之前,必须将卷类型声明到块存储。 这可以通过以下命令完成

$ openstack --os-username admin --os-tenant-name admin volume type create lvm

然后,必须创建一个额外的规范来将卷类型链接到后端名称。 运行此命令

$ openstack --os-username admin --os-tenant-name admin volume type set lvm \
  --property volume_backend_name=LVM_iSCSI

此示例创建了一个 lvm 卷类型,其额外的规范为 volume_backend_name=LVM_iSCSI

创建另一个卷类型

$ openstack --os-username admin --os-tenant-name admin volume type create lvm_gold

$ openstack --os-username admin --os-tenant-name admin volume type set lvm_gold \
  --property volume_backend_name=LVM_iSCSI_b

第二个卷类型名为 lvm_gold,后端名称为 LVM_iSCSI_b

注意

要列出额外的规范,请使用此命令

$ openstack --os-username admin --os-tenant-name admin volume type list --long

注意

如果卷类型指向在块存储配置中不存在的 volume_backend_name,则 filter_scheduler 会返回错误,表明它找不到具有合适的后端的有效主机。

用法

创建卷时,必须指定卷类型。 卷类型的额外规范用于确定应使用哪个后端。

$ openstack volume create --size 1 --type lvm test_multi_backend

考虑到先前描述的 cinder.conf,调度器将在 lvmdriver-1lvmdriver-2 上创建此卷。

$ openstack volume create --size 1 --type lvm_gold test_multi_backend

第二个卷将在 lvmdriver-3 上创建。