
Havana 周期在 Cinder 和 Nova 中引入了一个 QoS 功能。快速了解这个优秀的实现。
最初,QEMU 和 KVM 都支持速率限制。这显然是通过 libvirt 实现的,并且作为 <disk> 部分中的一个额外的 xml 标志可用,称为 iotune。
QoS 选项是
total_bytes_sec:客户机每秒允许的总带宽read_bytes_sec:顺序读取限制write_bytes_sec:顺序写入限制total_iops_sec:客户机每秒允许的总 IOPSread_iops_sec:随机读取限制write_iops_sec:随机写入限制
OpenStack 在 Nova 和 Cinder 中都实现了这样一个(简单?)功能,这真是太好了。这也表明 OpenStack 正在现有核心项目中变得更加丰富和完善。拥有这样的设施对于几个原因来说都非常有用。首先,并非所有存储后端都支持 QoS。例如,Ceph 根本没有内置的 QoS 功能。此外,限制直接在 hypervisor 层进行,您的存储解决方案甚至不需要具有这样的功能。另一个好处是,从运营商的角度来看,能够提供不同等级的服务非常好。运营商现在可以根据一定的 QoS 提供不同类型的卷,然后,客户将根据此付费。
II. 测试一下!
首先在 Cinder 中创建 QoS
1
2
3
4
5
6
7
8
9
| $ cinder qos-create high-iops consumer="front-end" read_iops_sec=2000 write_iops_sec=1000
+----------+---------------------------------------------------------+
| Property | Value |
+----------+---------------------------------------------------------+
| consumer | front-end |
| id | c38d72f8-f4a4-4999-8acd-a17f34b040cb |
| name | high-iops |
| specs | {u'write_iops_sec': u'1000', u'read_iops_sec': u'2000'} |
+----------+---------------------------------------------------------+
|
创建一个新的卷类型
1
2
3
4
5
6
| $ cinder type-create high-iops
+--------------------------------------+-----------+
| ID | Name |
+--------------------------------------+-----------+
| 9c746ca5-eff8-40fe-9a96-1cdef7173bd0 | high-iops |
+--------------------------------------+-----------+
|
然后将卷类型与 QoS 关联
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| $ cinder qos-associate c38d72f8-f4a4-4999-8acd-a17f34b040cb 9c746ca5-eff8-40fe-9a96-1cdef7173bd0
$ cinder create --display-name slow --volume-type slow 1
+---------------------+--------------------------------------+
| Property | Value |
+---------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2013-12-02T12:59:33.177875 |
| display_description | None |
| display_name | high-iop |
| id | 743549c1-c7a3-4e86-8e99-b51df4cf7cdc |
| metadata | {} |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| volume_type | high-iop |
+---------------------+--------------------------------------+
|
最终将卷附加到实例
1
2
3
4
5
6
7
8
9
| $ nova volume-attach cirrOS 743549c1-c7a3-4e86-8e99-b51df4cf7cdc /dev/vdc
+----------+--------------------------------------+
| Property | Value |
+----------+--------------------------------------+
| device | /dev/vdc |
| serverId | 7fff1d37-efc4-46b9-8681-3e6b1086c453 |
| id | 743549c1-c7a3-4e86-8e99-b51df4cf7cdc |
| volumeId | 743549c1-c7a3-4e86-8e99-b51df4cf7cdc |
+----------+--------------------------------------+
|
预期结果
在附加设备时,您应该在 nova-volume 调试日志中看到以下 xml 创建。转储 virsh xml 也可以。
2013-12-11 14:12:05.874 DEBUG nova.virt.libvirt.config [req-232cf5eb-a79b-42d5-a183-2f4758e8d8eb admin admin] Generated XML <disk type="network" device="disk">
<driver name="qemu" type="raw" cache="none"/>
<source protocol="rbd" name="volumes/volume-743549c1-c7a3-4e86-8e99-b51df4cf7cdc">
<host name="192.168.251.100" port="6790"/>
</source>
<auth username="volumes">
<secret type="ceph" uuid="95c98032-ad65-5db8-f5d3-5bd09cd563ef"/>
</auth>
<target bus="virtio" dev="vdc"/>
<serial>2e589abc-a008-4433-89ae-1bb142b139e3</serial>
<iotune>
<read_iops_sec>2000</read_iops_sec>
<write_iops_sec>1000</write_iops_sec>
</iotune>
</disk>
W 重要提示:Havana 中的速率限制目前已损坏,但是 bug 已经报告,并且 修复已提交/接受。相同的补丁也已经作为 潜在的 Havana 回移植 提出。