OpenStack的虛擬機存儲Qos實踐

背景

在使用OpenStack虛機的過程中,經常會遇到這樣一種情況:同一個OpenStack集羣的幾臺虛機如果讀寫負荷較大,可能會導致其他虛機因爲搶佔不到後端存儲資源而反應卡頓,這個時候需要QoS的配合來限制虛機的IO速率及讀寫帶寬。

1、什麼是QoS?

QoS(Quality of Service)即服務質量,在網絡業務中,QoS包括傳輸的帶寬、時延等。

2、爲什麼要QoS?

資源總是有限的,包括網絡資源、後端存儲資源,只要存在搶佔資源的情況,就需要QoS來管理資源的分配。

3、如何做QoS?

以網絡通道連接的兩端來分,OpenStack中有前端(Front-End)QoS和後端(Back-End)QoS,前端QoS是Hypervisor來實現的,即在宿主機上設置虛擬機的 QoS,通常使用 cgroup 或者 qemu-iothrottling。後端QoS是存儲端驅動接管的,本文以前端QoS的配置及驗證爲例進行介紹。

4、前端QoS配置

(1)創建一個Cinder QoS Spec

[root@ceph-node1 ~]# cinder qos-create front_200_read_100_write consumer=front-end read_iops_sec=200 write_iops_sec=100

在這裏插入圖片描述
備註:

front_200_read_100_write是創建的QoS Spec的名稱

consumer指定該QoS Spec是由前端還是後端進行處理

read_iops_sec和write_iops_sec是限定讀及寫的IOPS上限

可以設置的上限選項爲:

total_bytes_sec: 順序讀寫總帶寬上限

read_bytes_sec: 順序讀帶寬上限

write_bytes_sec: 順序寫帶寬上限

total_iops_sec: 隨機讀寫總IOPS上限(IOPS是指每秒讀寫的次數)

read_iops_sec: 隨機讀IOPS上限

write_iops_sec: 隨機寫IOPS上限

5、創建卷類型——volume_type

[root@ceph-node1 ~]# cinder type-create type_front_200_read_100_write

在這裏插入圖片描述

6、將卷類型和後端存儲綁定——volume_type和新建的qos綁定

查看卷類型

[root@node1 ~]# cinder type-list

查看Qos

[root@node1 ~]# cinder qos-list

volume_type和qos綁定

[root@ceph-node1 ~]# cinder qos-associate 083b0556-c564-4b21-908f-c44e6e9547b0 0095370a-32b6-43f0-9347-a2900223661a

綁定命令爲cinder qos-associate <qos_specs_id> <volume_type_id>

後端存儲類型名稱查看(volume_backend_name有時候和az的名稱一樣)

[root@node1 ~]# cat /etc/cinder/cinder.conf | grep volume_backend_name | grep -v ^#
volume_backend_name = ceph

7、驗證

創建一個type_front_200_read_100_write類型的空白雲盤

[root@ceph-node1 ~]# cinder create --display-name test_qos_disk1 --volume-type type_front_200_read_100_write 200

在這裏插入圖片描述
將剛纔創建的空白雲盤掛載到一個虛機上

[root@ceph-node1 ~]# nova volume-attach 2029f6ac-64f4-4f76-a0e1-4a9ea9adfeb9 f1a8472c-4f81-4d4a-a265-cb0232fcc1d4

在這裏插入圖片描述
掛載命令爲nova volume-attach <server_id> <volume_id>

前端QoS驗證

在虛機中對關聯QoS的空白雲盤運行fio進行IO測試,看看該雲盤是否已經被限制住IOPS了。
fio命令:

./fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randread -size=1G -filename=/dev/vdc -name=“QoS test” -iodepth=8 -numjobs=4 -group_reporting

./fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -size=1G -filename=/dev/vdc -name=“QoS test” -iodepth=8 -numjobs=4 -group_reporting

fio結果:

通過FIO的測試結果可以看到,前端QEMU是可以實現Limit上限維度的QoS控制的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章