深入理解Openstack QoS控制實(shí)現(xiàn)與實(shí)踐
0.什么是QoSFrom
Wikipedia:
Quality of service (QoS) is the overall performance of a telephony or computer network, particularly the performance seen by the users of the network. To quantitatively measure quality of service, several related aspects of the network service are often considered, such as error rates, bit rate, throughput, transmission delay, availability, jitter, etc.
簡(jiǎn)單來(lái)說(shuō),QoS是一種控制機(jī)制,提供針對(duì)不同用戶或者不同數(shù)據(jù)流采用相應(yīng)不同的優(yōu)先級(jí),或者根據(jù)應(yīng)用程序的要求,保證數(shù)據(jù)流的性能達(dá)到一定的水準(zhǔn)。QoS的保證對(duì)于容量有限的網(wǎng)絡(luò)來(lái)說(shuō)是十分重要的,特別是對(duì)于流媒體應(yīng)用,例如VoIP和IPTV等,因?yàn)檫@些應(yīng)用常常需要固定的傳輸率,對(duì)延時(shí)也比較敏感。
QoS通常指網(wǎng)絡(luò)上的數(shù)據(jù)流控制,本文討論的QoS則更廣泛些,不僅包含了傳統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)流控制(即網(wǎng)絡(luò)IO控制),還包括了本地磁盤的讀寫控制,比如IOPS等。其中包括兩種類型:
- 質(zhì)量控制:通過(guò)提供不同性能的硬件設(shè)備來(lái)滿足不同應(yīng)用的性能需求,比如存儲(chǔ)設(shè)備有SATA、SSD、RAID等。
- 量化控制:針對(duì)應(yīng)用,對(duì)其流量進(jìn)行嚴(yán)格控制,比如IOPS、網(wǎng)絡(luò)帶寬等。
Openstack同時(shí)支持以上兩種QoS控制,這些組件包括但不限于計(jì)算服務(wù)Nova、網(wǎng)絡(luò)服務(wù)Neutron、塊存儲(chǔ)服務(wù)Cinder、對(duì)象存儲(chǔ)Swift等,Ceph雖然不是Openstack的組件之一,但通常作為Openstack的存儲(chǔ)后端,因此本文也會(huì)對(duì)其進(jìn)行簡(jiǎn)單的介紹。
本文旨在歸納總結(jié)Openstack如何在應(yīng)用層實(shí)現(xiàn)QoS控制,讀者如果對(duì)底層實(shí)現(xiàn)原理感興趣,可以查閱相關(guān)資料。
1.Ceph
Ceph是近年來(lái)非?;馃岬拈_源統(tǒng)一分布式存儲(chǔ)系統(tǒng),最初是Sage Weil在University of California, Santa Cruz(UCSC)的PhD研究?jī)?nèi)容,目前由Inktank公司掌控Ceph的開發(fā)。Ceph同時(shí)支持塊存儲(chǔ)(LVM、裸硬盤)、對(duì)象存儲(chǔ)(S3、Swift)、文件系統(tǒng)存儲(chǔ)(HDFS、GFS),并且具有高擴(kuò)展性、高可靠性、高性能的優(yōu)點(diǎn)。
Ceph其中最廣泛的應(yīng)用之一是作為Openstack的存儲(chǔ)后端,為Openstack提供統(tǒng)一分布式存儲(chǔ)服務(wù)。Openstack組件中Nova、Glance、Cinder都支持直接對(duì)接Ceph,云主機(jī)的在線遷移、故障轉(zhuǎn)移、鏡像存儲(chǔ)等功能都依賴于Ceph提供的統(tǒng)一分布式存儲(chǔ)服務(wù)。
實(shí)際在部署時(shí)不同的機(jī)房或者機(jī)架可能配置不同的存儲(chǔ)設(shè)備,比如SSD固態(tài)存儲(chǔ)設(shè)備、SATA普通硬盤等,rbd image實(shí)例使用不同的存儲(chǔ)后端,顯然能夠提供不同的性能。
我們知道ceph是通過(guò)crush算法和crush map決定對(duì)象如何分布存儲(chǔ)的,cursh map描述了存儲(chǔ)設(shè)備的層級(jí)拓?fù)?可以是物理拓?fù)?,比如機(jī)架、機(jī)房、區(qū)域等,也可以是邏輯拓?fù)?,比如故障域、性能?,整個(gè)map圖是一個(gè)樹狀結(jié)構(gòu),如圖:
- ssd
- / | \
- / | \
- rack1 rack2 rack3
- / \ ... / \
- host-1 host-2 host-m host-n
- / \ ... ... / \
- osd1 osd2 osd-m osd-n
其中中間節(jié)點(diǎn)由自定義的bucket type實(shí)例構(gòu)成,通常和物理拓?fù)涿Q一致,比如room、rack、host等,葉子節(jié)點(diǎn)是真正的存儲(chǔ)設(shè)備,對(duì)應(yīng)一塊硬盤或者分區(qū)。根據(jù)樹的結(jié)構(gòu),每個(gè)存儲(chǔ)設(shè)備(葉子)有唯一一條路徑到root節(jié)點(diǎn),該路徑定義為crush location,比如:
- root=ssd rack=rack1 host=host-1
crush map rule能夠制定某個(gè)pool的數(shù)據(jù)放置策略,rule的格式如下:
- rule <rulename> {
- ruleset <ruleset>
- type [ replicated | erasure ]
- min_size <min-size>
- max_size <max-size>
- step take <bucket-name>
- step [choose|chooseleaf] [firstn|indep] <N> <bucket-type>
- step emit
- }
其中ruleset為rule的id,type用于區(qū)分是存儲(chǔ)驅(qū)動(dòng)設(shè)備(replicated)還是RAID。min_size為最小副本數(shù),如果副本數(shù)小于這個(gè)數(shù),crush將不會(huì)選這個(gè)rule,同理max_size為最大副本數(shù)。step take開始選擇root(注意圖上我們只畫了一棵樹,但crush map可以有多棵樹,因此存在多個(gè)root type),choose表示從子樹種選擇對(duì)應(yīng)的bucket type,其中N表示選擇的數(shù)量:
- N == 0, 表示設(shè)置為pool副本數(shù)量;
- N > 0 && N < replicas,表示真實(shí)的數(shù)量;
- N < 0,表示副本數(shù)減去該數(shù)的絕對(duì)值。
比如:
- step choose firstn 1 type rack
表示從當(dāng)前位置向下迭代遍歷隨機(jī)選擇一個(gè)rack類型。
該step必須位于take或者choose之下。
chooseleaf和choose類似,唯一不同的是在選擇的每個(gè)bucket中再?gòu)闹羞x擇一個(gè)葉子節(jié)點(diǎn)。
以官方例子說(shuō)明:
- rule ssd-primary {
- ruleset 5
- type replicated
- min_size 5
- max_size 10
- step take ssd
- step chooseleaf firstn 1 type host
- step emit
- step take sata
- step chooseleaf firstn -1 type host
- step emit
- }
假設(shè)冗余副本數(shù)為3,則以上規(guī)則會(huì)首先從ssd中選擇其中一個(gè)host,然后在host中選擇其中一個(gè)osd作為主節(jié)點(diǎn),然后從sata中選擇3-1=2個(gè)host,分別從當(dāng)中選擇一個(gè)osd節(jié)點(diǎn),一共兩個(gè)osd節(jié)點(diǎn)作為副本節(jié)點(diǎn)。
注:
- 主節(jié)點(diǎn)負(fù)責(zé)實(shí)際和client通信的節(jié)點(diǎn),而副本節(jié)點(diǎn)不會(huì)直接和client通信,但會(huì)和主節(jié)點(diǎn)保持?jǐn)?shù)據(jù)同步,當(dāng)主節(jié)點(diǎn)掛了,其中一個(gè)副本節(jié)點(diǎn)會(huì)接管主節(jié)點(diǎn)。
- 在寫入數(shù)據(jù)時(shí),主節(jié)點(diǎn)會(huì)同步到副本節(jié)點(diǎn),只有當(dāng)所有的副本節(jié)點(diǎn)都寫完后,主節(jié)點(diǎn)才算寫成功,因此ceph采取的是強(qiáng)一致性模型(而Swift是最終一致性模型)
- 可以通過(guò)primary-affinity值設(shè)置選擇為主節(jié)點(diǎn)的概率,值為0表示不會(huì)被選擇為主節(jié)點(diǎn),值為1表示表示選擇為主節(jié)點(diǎn)的概率極大(考慮到有多個(gè)節(jié)點(diǎn)都為1的情況)。
關(guān)于crush map 和rule參考官方文檔。
ceph中不同的pool可以定義不同的crush以及ruleset,從而可以實(shí)現(xiàn)不同的pool,選擇不同的osd,比如固定某個(gè)pool選擇ssd,另一個(gè)pool選擇sata,其中官方也有個(gè)例子:
- device 0 osd.0
- device 1 osd.1
- device 2 osd.2
- device 3 osd.3
- device 4 osd.4
- device 5 osd.5
- device 6 osd.6
- device 7 osd.7
- host ssd-server-1 {
- id -1
- alg straw
- hash 0
- item osd.0 weight 1.00
- item osd.1 weight 1.00
- }
- host ssd-server-2 {
- id -2
- alg straw
- hash 0
- item osd.2 weight 1.00
- item osd.3 weight 1.00
- }
- host sata-server-1 {
- id -3
- alg straw
- hash 0
- item osd.4 weight 1.00
- item osd.5 weight 1.00
- }
- host sata-server-2 {
- id -4
- alg straw
- hash 0
- item osd.6 weight 1.00
- item osd.7 weight 1.00
- }
- root sata {
- id -5
- alg straw
- hash 0
- item sata-server-1 weight 2.00
- item sata-server-2 weight 2.00
- }
- root ssd {
- id -6
- alg straw
- hash 0
- item ssd-server-1 weight 2.00
- item ssd-server-2 weight 2.00
- }
- rule sata {
- ruleset 1
- type replicated
- min_size 0
- max_size 10
- step take platter
- step chooseleaf firstn 0 type host
- step emit
- }
- rule ssd {
- ruleset 2
- type replicated
- min_size 0
- max_size 4
- step take ssd
- step chooseleaf firstn 0 type host
- step emit
- }
拓?fù)鋱D如下:
- ssd | sata
- / \ | / \
- / \ | / \
- / \ | / \
- ssd-server-1 ssd-server-2 | sata-server-1 sata-server-2
- / \ / \ | / \ / \
- / \ / \ | / \ / \
- osd0 osd1 osd2 osd3 | osd4 osd5 osd6 osd7
我們定義兩個(gè)rule,假設(shè)冗余副本數(shù)為3,一個(gè)是ssd,它會(huì)從ssd中(即左邊的樹中)中選擇osd,另一個(gè)是sata,從sata中(即右邊的樹種)選擇osd。
我們創(chuàng)建兩個(gè)pool,并關(guān)聯(lián)ruleset:
- ceph osd pool set sata crush_ruleset 1
- ceph osd pool set ssd crush_ruleset 2
通過(guò)以上方式我們實(shí)現(xiàn)了不同性能的ceph pool,實(shí)現(xiàn)QoS質(zhì)量控制。
那ceph是否支持量化控制呢,rbd目前好像并不支持控制,但可以通過(guò)qemu、kvm等控制讀寫速率。
2.Cinder
介紹完Ceph,接下來(lái)終于進(jìn)入Openstack正題,首先從Cinder談起。Cinder是Openstack的基礎(chǔ)組件之一,提供塊存儲(chǔ)服務(wù),類似AWS的EBS服務(wù)。但是Cinder本身并不提供塊服務(wù),而只是一個(gè)管理工具,由具體后端實(shí)現(xiàn),后端包括比如LVM、Ceph RBD等,Cinder通過(guò)調(diào)用對(duì)應(yīng)的驅(qū)動(dòng)來(lái)完成volume的生命周期管理。
下面以Ceph RBD作為存儲(chǔ)后端為例,首先介紹如何實(shí)現(xiàn)volume的QoS質(zhì)量控制。Cinder支持多后端存儲(chǔ),不同的后端通過(guò)不同的配置組區(qū)別開,如:
- [sata-ceph]
- volume_backend_name=sata
- rbd_pool=sata
- volume_driver=cinder.volume.drivers.rbd.RBDDriver
- rbd_ceph_conf=/etc/ceph/ceph.conf
- ...
- [ssd-ceph]
- volume_backend_name=ssd
- rbd_pool=ssd
- volume_driver=cinder.volume.drivers.rbd.RBDDriver
- rbd_ceph_conf=/etc/ceph/ceph.conf
- ...
以上有兩個(gè)配置組,分別為sata-ceph和ssd-ceph,這里我們都使用了ceph rbd作為存儲(chǔ)后端,實(shí)際部署時(shí)可以是完全不同的存儲(chǔ)后端,比如混合rbd和LVM。以上我們指定了不同pool以及不同的后端名稱,后端名稱是為了方便后續(xù)創(chuàng)建volume type引用。我們由上面關(guān)于Ceph中介紹可知,不同的pool可以定義不同的rule從而選擇不同特性的硬件,如果能夠綁定Ceph pool和volume問(wèn)題就解決了,值得慶幸的是,Cinder就是這么實(shí)現(xiàn)的。
Cinder自定義volume type,分別創(chuàng)建ssd和sata兩個(gè)volume type:
- cinder type-create ssd
- cinder type-create sata
創(chuàng)建完后type后綁定volume_backend_name從而實(shí)現(xiàn)與ceph pool關(guān)聯(lián)起來(lái):
- cinder type-key sata set volume_backend_name=sata
- cinder type-key ssd set volume_backend_name=ssd
查看extra-specs:
- [root@server-39.0.lg.ustack.in ~ ]$ cinder extra-specs-list
- +--------------------------------------+------+-----------------------------------+
- | ID | Name | extra_specs |
- +--------------------------------------+------+-----------------------------------+
- | 1a0cb988-58a6-43bf-b4ea-199e0e02239b | sata | {u'volume_backend_name': u'sata'} |
- | 38344c5c-b61b-4677-9a48-e70d723b8620 | ssd | {u'volume_backend_name': u'ssd'} |
- +--------------------------------------+------+-----------------------------------+
此時(shí)只需要在創(chuàng)建時(shí)指定volume type就可以實(shí)現(xiàn)創(chuàng)建不同QoS性能的數(shù)據(jù)卷,比如:
- cinder create --volume-type ssd --display-name int32bit-test-ssd 1
以上我們通過(guò)自定義volume type并綁定不同的后端實(shí)現(xiàn)了對(duì)volume訪問(wèn)的QoS質(zhì)量控制,接下來(lái)我們介紹如何通過(guò)制定volume type實(shí)現(xiàn)不同的QoS量化控制。和前面的步驟類似,首先創(chuàng)建一個(gè)high-iops-type volume type:
- cinder type-create high-iops-type
cinder通過(guò)qos實(shí)例對(duì)volume進(jìn)行量化控制,我們需要?jiǎng)?chuàng)建high-iops,設(shè)置讀最大iops為2000,寫最大iopos為1000:
cinder qos-create high-iops consumer="front-end" read_iops_sec=2000 write_iops_sec=1000
查看qos列表:
- $ cinder qos-list
- +--------------------------------------+-----------+-----------+---------------------------------------------------------+
- | ID | Name | Consumer | specs |
- +--------------------------------------+-----------+-----------+---------------------------------------------------------+
- | 4ba70d30-eb36-4267-8ee5-5c9cc2f8af32 | high-iops | front-end | {u'write_iops_sec': u'1000', u'read_iops_sec': u'2000'} |
- +--------------------------------------+-----------+-----------+---------------------------------------------------------+
其中consumer的合法值為front-end、back-end、both。front-end表示使用前端控制(hypervisor控制,會(huì)在libvirt xml文件中定義), 而back-end表示使用后端控制(cinder drivers,需要driver支持),both表示前后端同時(shí)進(jìn)行QoS控制。
最后綁定qos實(shí)例和volume type實(shí)例:
- QOS_SPEC_ID=4ba70d30-eb36-4267-8ee5-5c9cc2f8af32
- VOLUME_TYPE_ID=26e33f06-e011-4cf7-a397-91a00ef0a233
- cinder qos-associate $QOS_SPEC_ID $VOLUME_TYPE_ID
查看綁定情況:
- $ cinder qos-get-association 4ba70d30-eb36-4267-8ee5-5c9cc2f8af32
- +------------------+----------------+--------------------------------------+
- | Association_Type | Name | ID |
- +------------------+----------------+--------------------------------------+
- | volume_type | high-iops-type | 26e33f06-e011-4cf7-a397-91a00ef0a233 |
- +------------------+----------------+--------------------------------------+
下面我們創(chuàng)建一個(gè)volume驗(yàn)證其功能,我們創(chuàng)建時(shí)指定volume type為high-iops-type,并掛載到虛擬機(jī)中:
- cinder create --volume-type high-iops-type --display-name high-iops-test 1
- SERVER_ID=1ea33417-b577-45cb-83a0-fc412e421811
- VOLUME_ID=bb2ccbfb-654a-473e-9f35-ae548c8e59e1
- nova volume-attach $SERVER_ID $VOLUME_ID
查看libvirt xml文件,截取部分disk信息如下:
- <disk type='network' device='disk'>
- <driver name='qemu' type='raw' cache='writeback'/>
- <auth username='admin'>
- <secret type='ceph' uuid='bdf77f5d-bf0b-1053-5f56-cd76b32520dc'/>
- </auth>
- <source protocol='rbd' name='openstack-00/volume-bb2ccbfb-654a-473e-9f35-ae548c8e59e1'>
- <host name='10.0.103.61' port='6789'/>
- <host name='10.0.103.62' port='6789'/>
- <host name='10.0.103.63' port='6789'/>
- </source>
- <backingStore/>
- <target dev='vdc' bus='virtio'/>
- <iotune>
- <read_iops_sec>2000</read_iops_sec>
- <write_iops_sec>1000</write_iops_sec>
- </iotune>
- <serial>bb2ccbfb-654a-473e-9f35-ae548c8e59e1</serial>
- <alias name='virtio-disk2'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
- </disk>
由xml文件可見在iotune中對(duì)讀寫IOPS的控制。
以上總結(jié)了Openstack Cinder的QoS的控制,接下來(lái)將介紹Nova實(shí)現(xiàn)機(jī)制。
3.Nova
Nova是Openstack最核心的服務(wù),提供計(jì)算服務(wù),其功能類似AWS EC2。官方描述為:
Nova is an OpenStack project designed to provide power massively scalable, on demand, self service access to compute resources.
Nova雖然沒(méi)有直接方式對(duì)QoS質(zhì)量進(jìn)行控制,但我們可以通過(guò)主機(jī)集合(Host Aggregate)實(shí)現(xiàn),比如我們有兩個(gè)計(jì)算節(jié)點(diǎn)node-1,node-2,配置SSD磁盤,我們創(chuàng)建對(duì)應(yīng)的主機(jī)集合并把兩個(gè)節(jié)點(diǎn)加入到該主機(jī)集合中:
- nova aggregate-create ssd nova
- nova aggregate-set-metadata ssd ssd=true
- nova aggregate-add-host ssd node-1
- nova aggregate-add-host ssd node-2
創(chuàng)建一個(gè)新的flavor并設(shè)置key指定綁定的key-value:
- nova flavor-create ssd.large 6 8192 80 4
- nova flavor-key set_key --name=ssd.large --key=ssd --value=true
查看flavor:
- $ nova flavor-show ssd.large
- +----------------------------+-------------------+
- | Property | Value |
- +----------------------------+-------------------+
- | OS-FLV-DISABLED:disabled | False |
- | OS-FLV-EXT-DATA:ephemeral | 0 |
- | disk | 80 |
- | extra_specs | {u'ssd': u'true'} |
- | id | 6 |
- | name | ssd.large |
- | os-flavor-access:is_public | True |
- | ram | 8192 |
- | rxtx_factor | 1.0 |
- | swap | |
- | vcpus | 4 |
- +----------------------------+-------------------+
此時(shí)當(dāng)用戶指定ssd.large flavor時(shí),調(diào)度器將篩選具有ssd=true標(biāo)簽的計(jì)算節(jié)點(diǎn),其余不滿足條件的主機(jī)將被過(guò)濾掉, 最后在node-1和node-2中選取作為虛擬機(jī)的宿主機(jī)。
同樣地,Nova可通過(guò)flavor的Extra Specs實(shí)現(xiàn)QoS量化控制,以下內(nèi)容直接參考官方文檔-compute flavors:
比如限制IO最大讀寫速率為10MB/s:
- openstack flavor set FLAVOR-NAME \
- --property quota:read_bytes_sec=10240000 \
- --property quota:write_bytes_sec=10240000
除了IO控制,還支持CPU以及內(nèi)存限制:
CPU
- openstack flavor set FLAVOR-NAME \
- --property quota:cpu_quota=10000 \
- --property quota:cpu_period=20000
內(nèi)存
- openstack flavor set FLAVOR-NAME \
- --property quota:memory_shares_level=custom \
- --property quota:memory_shares_share=15
設(shè)置虛擬機(jī)最大的disk寫入數(shù)據(jù)為10MB/s:
- openstack flavor set FLAVOR-NAME \
- --property quota:disk_write_bytes_sec=10485760
另外,除了QoS控制,F(xiàn)lavor的強(qiáng)大之處遠(yuǎn)不止這些,還支持用戶自定義CPU拓?fù)?
- openstack flavor set FLAVOR-NAME \
- --property hw:cpu_sockets=FLAVOR-SOCKETS \
- --property hw:cpu_cores=FLAVOR-CORES \
- --property hw:cpu_threads=FLAVOR-THREADS \
- --property hw:cpu_max_sockets=FLAVOR-SOCKETS \
- --property hw:cpu_max_cores=FLAVOR-CORES \
- --property hw:cpu_max_threads=FLAVOR-THREADS
以及NUMA 拓?fù)?
- openstack flavor set FLAVOR-NAME \
- --property hw:numa_nodes=FLAVOR-NODES \
- --property hw:numa_cpus.N=FLAVOR-CORES \
- --property hw:numa_mem.N=FLAVOR-MEMORY
4.Swift
Openstack Swift提供對(duì)象存儲(chǔ)服務(wù),功能類似AWS S3以及Ceph RGW,Swift可以通過(guò)配置不同的Storage Policies來(lái)實(shí)現(xiàn)不同性能的后端存儲(chǔ)。具體可參看官方文檔Stroage Policie.
5.Neutron
Neutron是OpenStack項(xiàng)目中負(fù)責(zé)提供網(wǎng)絡(luò)服務(wù)的組件,它基于軟件定義網(wǎng)絡(luò)(SDN)的思想,實(shí)現(xiàn)了網(wǎng)絡(luò)虛擬化的資源管理。Neutron支持對(duì)虛擬網(wǎng)卡進(jìn)行帶寬流量限制,主要通過(guò)QoS Policy實(shí)現(xiàn),需要在neutron server端配置項(xiàng)service_plugins中開啟qos插件,參考Neutron QoS。
以下內(nèi)容主要參考官方文檔實(shí)例。首先創(chuàng)建一個(gè)Qos Policy:
- neutron qos-policy-create bw-limiter
設(shè)置帶寬:
- neutron qos-bandwidth-limit-rule-create bw-limiter --max-kbps 3000 \
- --max-burst-kbps 300
通過(guò)neutron port-list找到需要限制帶寬的端口(虛擬網(wǎng)卡):
- $ neutron port-list
- +--------------------------------------+----------------------------------+
- | id | fixed_ips |
- +--------------------------------------+----------------------------------+
- | 0271d1d9-1b16-4410-bd74-82cdf6dcb5b3 | { ... , "ip_address": "10.0.0.1"}|
- | 88101e57-76fa-4d12-b0e0-4fc7634b874a | { ... , "ip_address": "10.0.0.3"}|
- | e04aab6a-5c6c-4bd9-a600-33333551a668 | { ... , "ip_address": "10.0.0.2"}|
- +--------------------------------------+----------------------------------+
關(guān)聯(lián)port和QoS Policy:
- neutron port-update 88101e57-76fa-4d12-b0e0-4fc7634b874a --qos-policy bw-limiter
移除port和Qos Policy的關(guān)聯(lián):
- neutron port-update 88101e57-76fa-4d12-b0e0-4fc7634b874a --no-qos-policy
創(chuàng)建port時(shí)可以指定QoS Policy:
- neutron port-create private --qos-policy-id bw-limiter
總結(jié)
本文詳細(xì)介紹了Openstack基礎(chǔ)服務(wù)的QoS控制,包括質(zhì)量控制和量化控制,涉及的內(nèi)容包括:
- Ceph通過(guò)crush map和ruleset選取不同性能的后端存儲(chǔ)設(shè)備
- Cinder支持多后端存儲(chǔ),Volume type綁定具體的后端從而實(shí)現(xiàn)不同性能的后端選擇,并且可以自定義QoS實(shí)現(xiàn)數(shù)據(jù)卷的IO讀寫限制。
- Nova可以通過(guò)Host Aggregate的Metadata以及Flavor Extra Specs控制調(diào)度器選取符合某些特性的(比如SSD)計(jì)算節(jié)點(diǎn),通過(guò)Flavor Extra Specs實(shí)現(xiàn)虛擬機(jī)的IO讀寫限制。
- Swift 支持多Policy,通過(guò)Storage Policies可以實(shí)現(xiàn)不同性能的后端存儲(chǔ)設(shè)備。
- Neutron通過(guò)Qos Policy完成對(duì)虛擬網(wǎng)卡的帶寬限制。
由此可見,Openstack同時(shí)支持計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)的QoS控制,通過(guò)QoS控制可以滿足不同應(yīng)用對(duì)不同資源的異構(gòu)需求。
【本文是51CTO專欄作者“付廣平”的原創(chuàng)文章,如需轉(zhuǎn)載請(qǐng)通過(guò)51CTO獲得聯(lián)系】































