多卷多挂载:启用将一个卷挂载到多个服务器

同时将一个卷挂载到多个主机/服务器的能力是主动/主动或主动/待机场景下所需的一种用例。

在 Queens 版本中,CinderNova 中都添加了对具有读/写 (RW) 模式的多卷多挂载的支持。

警告

用户有责任确保在卷上使用多挂载或集群文件系统。否则,数据损坏的可能性很高。

在 Cinder 中,此功能在 microversion ‘3.50’ 或更高版本中可用。

作为先决条件,新的挂载/卸载 API 已添加到 Cinder 中,以克服实现多卷多挂载的早期限制。

如果您将 Cinder 与 Nova 配合使用,如果可用的块存储 API microversion 存在,则计算 API 调用已切换为在 Queens 中使用新的块存储卷挂载 API。

有关将多挂载卷与计算服务一起使用的更多信息,请参阅相应的 计算管理指南部分

如何创建一个“多挂载”卷

为了能够将一个卷挂载到多个服务器实例,您需要在卷详细信息中将“multiattach”标志设置为“True”。 在执行操作之前,请确保您具有正确的角色和策略设置。

创建多挂载卷的唯一方法是创建多挂载卷类型并使用它来创建卷。

注意

有关提供此功能的后端的信息,请参阅 后端支持

多挂载卷类型

从 Queens 版本开始,将一个卷挂载到多个主机/服务器的能力要求该卷具有包含 extra-spec 功能设置的特殊类型,即 multiattach=<是> True。 您可以按以下方式创建卷类型

$ openstack volume type create multiattach
$ openstack volume type set --property multiattach="<is> True"  multiattach

注意

默认情况下,创建新的卷类型是一项仅限管理员的操作。 如果需要,您可以更改 cinder 策略文件中的设置。 有关配置 cinder 策略的更多信息,请参阅 策略配置

要创建卷,您需要使用之前创建的卷类型,如下所示

$ openstack volume create --size 10 --type multiattach my-volume

此外,也可以重新调整卷类型以使其(或不使其)具有多挂载功能。 但是,目前我们仅允许在卷的状态为 available 时重新调整卷类型。

限制背后的原因是,一些消费者/hypervisor 需要在挂载时间对多挂载卷进行特殊考虑(例如禁用缓存),并且目前没有机制可以在保持卷始终挂载的同时安全地更新当前已挂载的卷。

RO / RW 注意事项(第二个 RW 挂载问题)

默认情况下,第二个卷挂载以读/写模式进行,这可能存在问题,尤其是在卷迁移等操作中。

可能会有改进来提供支持,以指定第二个挂载的挂载模式,有关最新信息,请查看 Cinder 的规范列表 以获取当前版本。

后端支持

为了使该功能可用,所选后端需要支持多挂载,这通过相应卷驱动程序中的功能表示。

在 Queens 版本中,参考实现可在 LVM 上使用。 您可以查看 驱动程序支持矩阵 以获取有关哪个后端提供此功能的更多信息。

策略规则

您可以通过可以在 cinder 策略文件中配置的策略来控制多卷多挂载的可用性。 有关 cinder 策略文件的更多信息,包括如何生成示例文件以便查看默认策略设置,请参阅 策略配置

多挂载策略

允许创建或重新调整多挂载卷的通用策略规则名为 volume:multiattach

可启动卷的多挂载策略

这是一个策略,用于禁止对标记为可启动的卷进行多个挂载,其名称为 volume:multiattach_bootable_volume

已知问题和限制

  • 不支持将正在使用的卷从具有多挂载功能的类型重新调整为不具有多挂载功能的类型,反之亦然。

  • 如果该卷具有多个活动的读/写挂载,则不建议重新调整正在使用的多挂载卷。

  • 多挂载卷不支持加密。