基于容量的质量服务¶
在许多环境中,Cinder 管理的存储系统性能随着集群中的存储空间而扩展。例如,一个 Ceph RBD 集群可能具有 10,000 IOPS 和 1000 GB 存储容量。但是,当 RBD 集群扩展到 2000 GB 时,IOPS 会扩展到 20,000 IOPS。
基本的 QoS 允许您为卷定义硬性限制,但是,如果您为卷设置了 1000 IOPS 的限制,并且用户创建了 10 个 1GB 卷,每个卷 1000 IOPS(在一个具有 1000GB 存储和 10,000 IOPS 的集群中),您将无法保证服务质量,除非您添加额外的容量(这些容量将未被使用)。相反的情况也可能存在问题,如果用户创建一个 1000GB 卷,并设置 1000 IOPS,则会留下 9000 个未使用的 IOPS。
基于容量的质量服务允许您将 QoS 值乘以卷的大小,这将允许您有效地使用 Cinder 管理的存储。在某些情况下,它会“强制”用户配置比他们需要的更大的卷,以获得所需的 IOPS,但如果他们不使用它来提供服务质量,额外的空间本来就会未被使用。
目前有 6 个选项可以控制基于容量的质量服务,这些选项的值应该相当容易理解
用于每个卷的动态 IOPS。
read_iops_sec_per_gbwrite_iops_sec_per_gbtotal_iops_sec_per_gb
用于每个卷的动态带宽。
read_bytes_sec_per_gbwrite_bytes_sec_per_gbtotal_bytes_sec_per_gb
此外,还有 6 个选项可以控制最小值。这在用户创建非常小的卷,由于性能原因导致最终得到一个不可用的卷时非常有用。
用于每个卷的最小 IOPS。
read_iops_sec_per_gb_minwrite_iops_sec_per_gb_mintotal_iops_sec_per_gb_min
用于每个卷的最小带宽。
read_bytes_sec_per_gb_minwrite_bytes_sec_per_gb_mintotal_bytes_sec_per_gb_min
基于容量的选项可以与基本选项结合使用,例如 *_sec_max,以便为卷设置上限。这对于可能消耗所有存储性能的大型卷非常有用。
例如,为了创建一个具有每 GB 总写入 30 IOPS 和每 GB 1MB 吞吐量的 QoS,您可以使用 Cinder 客户端以以下方式操作
$ cinder qos-create high-iops consumer="front-end" \
total_iops_sec_per_gb=30 total_bytes_sec_per_gb=1048576
+----------+--------------------------------------+
| Property | Value |
+----------+--------------------------------------+
| consumer | front-end |
| id | f448f61c-4238-4eef-a93a-2024253b8f75 |
| name | high-iops |
| specs | total_iops_sec_per_gb : 30 |
| | total_bytes_sec_per_gb : 1048576 |
+----------+--------------------------------------+
完成此操作后,您可以使用 qos-associate Cinder 客户端命令将此 QoS 与卷类型关联。
$ cinder qos-associate <qos-id> <volume-type-id>
现在您可以创建一个新卷并尝试将其附加到 Nova 等消费者。如果您登录到 Nova 计算主机,您将能够在检查虚拟机的 XML 定义时使用 virsh dumpxml 看到新的计算限制。