QoS, bir uygulama sağlayıcısı ve son kullanıcılar arasındaki bir Servis Düzeyi Sözleşmesi’ni (SLA) karşılamak için bant genişliği, gecikme, titreme ve güvenilirlik gibi belirli ağ gereksinimlerini garanti etme yeteneği olarak tanımlanır.
Anahtarlar ve yönlendiriciler gibi ağ cihazları, trafiği SLA kapsamında üzerinde anlaşmaya varılan QoS koşullarını yerine getirmek için daha yüksek önceliğe sahip olacak şekilde işaretleyebilir. Diğer durumlarda, IP üzerinden ses (VoIP) ve video akışı gibi belirli ağ trafiği, minimum bant genişliği kısıtlamaları ile iletilmelidir. Şebeke QoS yönetimi olmayan bir sistemde, tüm trafik, müşterilere sunulan hizmetlerin garanti edilmesini imkansız hale getiren “en iyi çaba (best-effort)” tarzında iletilecektir.
QoS, gelişmiş bir servis eklentisidir. QoS, OpenStack Ağ kodunun geri kalanından birden fazla düzeyde ayrılır ve ml2 uzantı sürücüsünden edinilebilir.
DB modelleri, API uzantıları ve kullanım durumları hakkındaki detaylar bu belgenin kapsamı dışındadır ama Neutron QoS özellikleri belgesinde bulabilirsiniz.
Herhangi eklenti veya ml2 mekanizma sürücüsü, QoS kural türleri <https://git.openstack.org/cgit/openstack/neutron/tree/neutron/services/qos/qos_consts.py>`_ne karşılık bir karakter dizisi listesi döndüren ``supported_qos_rule_types` isimli bir eklenti/sürücü sınıf özelliği sağlayarak bazı QoS kural türleri için destek talep eder.
Not
Bant genişliği sınırı OVS, Linux köprüsü ve SR-IOV mekanizma sürücüleri tarafından desteklenir. Newton’dan ileri sürümler için DSCP işaretlemesi, OVS ve Linux köprü mekanizması sürücüleri ve SR-IOV NIC mekanizma sürücüsündeki minimum bant genişliği kurallarında desteklenir.
En basit durumda, özellik sınıf üzerinde tanımlanmış basit bir Python listesi ile temsil edilebilir.
Bir ml2 eklentisi için, desteklenen QoS kural türleri listesi, tüm aktif mekanizma sürücüleri tarafından desteklenen kuralların ortak bir alt kümesi olarak tanımlanır.
Not
Çekirdek eklenti tarafından bildirilen desteklenen kural türleri listesi, QoS kural kaynaklarına erişirken zorunlu kılınmaz. Bunun sebebi genellikle, QoS (yazma anında, adece macvtap böyle bir sürücüdür) için en az bir ml2 sürücü desteği yokken herhangi bir kural oluşturamayız.
Servisi etkinleştirmek için aşağıdaki adımları takip edin:
Ağ düğümleri üzerinde:
QoS servisini /etc/neutron/neutron.conf
dosyasında service_plugins
ayarına ekleyin. Örneğin:
service_plugins = \
neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,
neutron.services.metering.metering_plugin.MeteringPlugin,
neutron.services.qos.qos_plugin.QoSPlugin
Seçimli olarak, /etc/neutron/neutron.conf
dosyasında [qos]
bölümünde gerekli notification_drivers
ayarlayın (message_queue
varsayılandır).
/etc/neutron/plugins/ml2/ml2_conf.ini
dosyasında, [ml2]
bölümünde extension_drivers``a ``qos
ekle. Örneğin:
[ml2]
extension_drivers = port_security, qos
Open vSwitch aracı kullanılırsa, /etc/neutron/plugins/ml2/openvswitch_agent.ini
bölümündeki [agent]
bölümünde extensions``ü ``qos
olarak ayarlayın. Örneğin:
[agent]
extensions = qos
Hesaplama düğümlerinde:
/etc/neutron/plugins/ml2/openvswitch_agent.ini``de ``[agent]
bölümünde extensions
ayarına qos
ekleyin. Örneğin:
[agent]
extensions = qos
Not
QoS şu an yalnızca ml2 ile çalışmaktadır (SR-IOV, Open vSwitch ve linuxbridge, Mitaka sürümünde QoS için etkinleştirilen sürücülerdir).
Projeler bulutunuzda kendi QoS politikalarını yönetmek üzere güvenilir ise, neutron’un policy.json
dosyası buna izin verecek şekilde değiştirilebilir.
/etc/neutron/policy.json
politika girdilerini aşağıdaki gibi düzenleyin:
"get_policy": "rule:regular_user",
"create_policy": "rule:regular_user",
"update_policy": "rule:regular_user",
"delete_policy": "rule:regular_user",
"get_rule_type": "rule:regular_user",
Bant genişliği sınır kuralını etkinleştir:
"get_policy_bandwidth_limit_rule": "rule:regular_user",
"create_policy_bandwidth_limit_rule": "rule:regular_user",
"delete_policy_bandwidth_limit_rule": "rule:regular_user",
"update_policy_bandwidth_limit_rule": "rule:regular_user",
DSCP işaretleme kuralını etkinleştirin:
"get_policy_dscp_marking_rule": "rule:regular_user",
"create_dscp_marking_rule": "rule:regular_user",
"delete_dscp_marking_rule": "rule:regular_user",
"update_dscp_marking_rule": "rule:regular_user",
En küçük bant genişliği kuralını etkinleştirin:
"get_policy_minimum_bandwidth_rule": "rule:regular_user",
"create_policy_minimum_bandwidth_rule": "rule:regular_user",
"delete_policy_minimum_bandwidth_rule": "rule:regular_user",
"update_policy_minimum_bandwidth_rule": "rule:regular_user",
QoS politikaları yalnızca varsayılan policy.json
ile yöneticiler tarafından oluşturulur. Bu nedenle bulut projeleri adına onları ayarlayan bulut işletmenine sahip olmanız gerekir.
Eğer projelerin kendi politikalarını oluşturmalarına güveniliyorsa, güvenilir projeler policy.json
yapılandırma bölümünü kontrol edin.
Önce QoS politikası ve bant genişliği sınırını oluşturun:
$ neutron qos-policy-create bw-limiter
Created a new policy:
+-------------+--------------------------------------+
| Field | Value |
+-------------+--------------------------------------+
| description | |
| id | 0ee1c673-5671-40ca-b55f-4cd4bbd999c7 |
| name | bw-limiter |
| rules | |
| shared | False |
| tenant_id | 85b859134de2428d94f6ee910dc545d8 |
+-------------+--------------------------------------+
$ neutron qos-bandwidth-limit-rule-create bw-limiter --max-kbps 3000 \
--max-burst-kbps 300
Created a new bandwidth_limit_rule:
+----------------+--------------------------------------+
| Field | Value |
+----------------+--------------------------------------+
| id | 92ceb52f-170f-49d0-9528-976e2fee2d6f |
| max_burst_kbps | 300 |
| max_kbps | 3000 |
+----------------+--------------------------------------+
Not
Patlama değeri, parametrenin adı öne sürdüği için saniyede kilobit cinsinden değil, kilobit cinsinden verilmiştir. Bu, bant genişliği uygulanmadan önce gönderilebilen veri miktarıdır.
Not
QoS uygulaması, Open vSwitch ve Linux köprü ajanlarında bant genişliği sınır kurallarının uygun davranışından emin olmak için bir patlama değeri gerektirir. Bir değer vermezseniz, tipik bir TCP trafiği için çalışan bant genişliği sınırının % 80’ine varsayılan olarak ayarlanır.
İkincisi, yaratılan politikayı mevcut bir neutron bağlantı noktasıyla ilişkilendirin. Bunu yapmak için kullanıcı, önceden oluşturulan ilkeyle ilişkilendirilecek bağlantı noktası kimliği bilgilerini ayıklar. Bir sonraki örnekte, IP adresi 192.0.2.1
olan VM’ye bw-limiter
politikasını atayacağız.
$ neutron port-list
+--------------------------------------+-----------------------------------+
| id | fixed_ips |
+--------------------------------------+-----------------------------------+
| 0271d1d9-1b16-4410-bd74-82cdf6dcb5b3 | { ... , "ip_address": "192.0.2.1"}|
| 88101e57-76fa-4d12-b0e0-4fc7634b874a | { ... , "ip_address": "192.0.2.3"}|
| e04aab6a-5c6c-4bd9-a600-33333551a668 | { ... , "ip_address": "192.0.2.2"}|
+--------------------------------------+-----------------------------------+
$ neutron port-update 88101e57-76fa-4d12-b0e0-4fc7634b874a --qos-policy bw-limiter
Updated port: 88101e57-76fa-4d12-b0e0-4fc7634b874a
Bir bağlantı noktasını QoS politikasından çıkarmak için, basitçe bağlantı noktası yapılandırmasını güncelleyin.
$ neutron port-update 88101e57-76fa-4d12-b0e0-4fc7634b874a --no-qos-policy
Updated port: 88101e57-76fa-4d12-b0e0-4fc7634b874a
Bağlantı noktaları, kendilerine bağlı bir politika ile de oluşturulabilir.
$ neutron port-create private --qos-policy-id bw-limiter
Created a new port:
+-----------------------+--------------------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------------------+
| admin_state_up | True |
| allowed_address_pairs | |
| binding:vnic_type | normal |
| device_id | |
| device_owner | |
| dns_assignment | {"hostname": "host-192-0-2-4", ... } |
| dns_name | |
| fixed_ips | {"subnet_id": |
| | "fabaf9b6-7a84-43b6-9d23-543591b531b8", |
| | "ip_address": "192.0.2.4"} |
| id | c3cb8faa-db36-429d-bd25-6003fafe63c5 |
| mac_address | fa:16:3e:02:65:15 |
| name | |
| network_id | 4920548d-1a6c-4d67-8de4-06501211587c |
| port_security_enabled | True |
| qos_policy_id | 0ee1c673-5671-40ca-b55f-4cd4bbd999c7 |
| security_groups | b9cecbc5-a136-4032-b196-fb3eb091fff2 |
| status | DOWN |
| tenant_id | 85b859134de2428d94f6ee910dc545d8 |
+-----------------------+--------------------------------------------------+
Bir QoS politikasına ağ bağlayabilirsiniz. Bunun anlamı, ağa bağlı herhangi bir hesaplama bağlantı noktasına, bağlantı noktasına bağlı belirli bir politika olmadığı sürece varsayılan olarak ağ politikasını kullanmasıdır. DHCP ve yönlendirici bağlantı noktaları gibi ağa ait bağlantı noktaları, ağ ilkesi uygulamasından çıkarılır.
Bir ağa bir QoS politikası eklemek için mevcut bir ağı güncelleyin veya başlangıçta ilkeye bağlı ağ oluşturun.
$ neutron net-update private --qos-policy bw-limiter
Updated network: private
Not
Doğru patlama değerini yapılandırmak çok önemlidir. Yayın değeri çok düşük ayarlanmışsa, bant genişliği kullanımı uygun bir bant genişliği sınır ayarı olsa bile azaltılacaktır. Bu durum, çeşitli belge kaynaklarında tartışılmaktadır, örneğin Juniper’s belgesi. TCP trafiği için patlama değeri istenen bant genişliği sınır değerinin % 80’i olarak ayarlanabilir. Örneğin, bant genişliği sınırı 1000kbps’ye ayarlanırsa, yeterli patlama değeri 800kbit olacaktır. Yapılandırılmış patlama değeri çok düşükse, elde edilen bant genişliği sınırı beklenenden daha düşük olur. Yapılandırılmış patlama değeri çok yüksekse, çok az sayıda paket sınırlanabilir ve bant genişliği sınırı elde edilir beklenenden daha yüksek olurdu.
Yöneticiler, proje bağlantı noktaları veya ağlar üzerinde ilkeler uygulayabilir. Politika paylaşılmadığı sürece, proje bir ağa veya bağlantı noktasına eklenen herhangi bir politikayı ayırabilecek durumda değildir.
Politika paylaşılırsa, proje bu tür politikaları kendi bağlantı noktalarından ve ağlarından bağlayabilir veya çıkarabilir.
Çalışma zamanında kuralları değiştirebilirsiniz. Kural değişiklikleri, ekli herhangi bir bağlantı noktasına aktarılır.
$ neutron qos-bandwidth-limit-rule-update \
92ceb52f-170f-49d0-9528-976e2fee2d6f bw-limiter \
--max-kbps 2000 --max-burst-kbps 200
Updated bandwidth_limit_rule: 92ceb52f-170f-49d0-9528-976e2fee2d6f
$ neutron qos-bandwidth-limit-rule-show \
92ceb52f-170f-49d0-9528-976e2fee2d6f bw-limiter
+----------------+--------------------------------------+
| Field | Value |
+----------------+--------------------------------------+
| id | 92ceb52f-170f-49d0-9528-976e2fee2d6f |
| max_burst_kbps | 200 |
| max_kbps | 2000 |
+----------------+--------------------------------------+
Bant genişliği sınırı gibi, DSCP işaretleme kuralı için de bir politika oluşturun:
$ neutron qos-policy-create dscp-marking
Created a new policy:
+-------------+--------------------------------------+
| Field | Value |
+-------------+--------------------------------------+
| description | |
| id | 8569fb4d-3d63-483e-b49a-9f9290d794f4 |
| name | dscp-marking |
| rules | |
| shared | False |
| tenant_id | 85b859134de2428d94f6ee910dc545d8 |
+-------------+--------------------------------------+
Neutron istemcisi ile DSCP işaretlerini oluşturabilir, güncelleyebilir, listeleyebilir, silebilir ve görüntüleyebilirsiniz:
$ neutron qos-dscp-marking-rule-create dscp-marking --dscp-mark 26
Created a new dscp marking rule
+----------------+--------------------------------------+
| Field | Value |
+----------------+--------------------------------------+
| id | 115e4f70-8034-4176-8fe9-2c47f8878a7d |
| dscp_mark | 26 |
+----------------+--------------------------------------+
$ neutron qos-dscp-marking-rule-update \
115e4f70-8034-4176-8fe9-2c47f8878a7d dscp-marking --dscp-mark 22
Updated dscp_rule: 115e4f70-8034-4176-8fe9-2c47f8878a7d
$ neutron qos-dscp-marking-rule-list dscp-marking
+--------------------------------------+----------------------------------+
| id | dscp_mark |
+--------------------------------------+----------------------------------+
| 115e4f70-8034-4176-8fe9-2c47f8878a7d | 22 |
+--------------------------------------+----------------------------------+
$ neutron qos-dscp-marking-rule-show \
115e4f70-8034-4176-8fe9-2c47f8878a7d dscp-marking
+----------------+--------------------------------------+
| Field | Value |
+----------------+--------------------------------------+
| id | 115e4f70-8034-4176-8fe9-2c47f8878a7d |
| dscp_mark | 22 |
+----------------+--------------------------------------+
$ neutron qos-dscp-marking-rule-delete \
115e4f70-8034-4176-8fe9-2c47f8878a7d dscp-marking
Deleted dscp_rule: 115e4f70-8034-4176-8fe9-2c47f8878a7d
Ayrıca politikanızda en küçük bant genişliği kurallarını kapsayabilirsiniz:
$ openstack network qos policy create bandwidth-control
+-------------+--------------------------------------+
| Field | Value |
+-------------+--------------------------------------+
| description | |
| id | 8491547e-add1-4c6c-a50e-42121237256c |
| name | bandwidth-control |
| project_id | 7cc5a84e415d48e69d2b06aa67b317d8 |
| rules | [] |
| shared | False |
+-------------+--------------------------------------+
$ openstack network qos rule create bandwidth-control \
--type minimum-bandwidth --min-kbps 1000 --egress
+------------+--------------------------------------+
| Field | Value |
+------------+--------------------------------------+
| direction | egress |
| id | da858b32-44bc-43c9-b92b-cf6e2fa836ab |
| min_kbps | 1000 |
| name | None |
| project_id | |
+------------+--------------------------------------+
Minimum bant genişliği ile bir politika, kuralın uygulandığı her bir bağlantı noktasında belirtilen bant genişliğinden az olmamak için en iyi çabayı gösterilmesini sağlar. Ancak, bu özellik Hesaplama zamanlayıcısı ile henüz bütünleşmediğinden minimum bant genişliği garanti edilemez.
Bir politikada birkaç kuralın birleştirilmesi de mümkündür:
$ openstack network qos rule create bandwidth-control \
--type bandwidth-limit --max-kbps 50000 --max-burst-kbits 50000
+----------------+--------------------------------------+
| Field | Value |
+----------------+--------------------------------------+
| id | 0db48906-a762-4d32-8694-3f65214c34a6 |
| max_burst_kbps | 50000 |
| max_kbps | 50000 |
| name | None |
| project_id | |
+----------------+--------------------------------------+
$ openstack network qos policy show bandwidth-control
+-------------+-------------------------------------------------------------------+
| Field | Value |
+-------------+-------------------------------------------------------------------+
| description | |
| id | 8491547e-add1-4c6c-a50e-42121237256c |
| name | bandwidth-control |
| project_id | 7cc5a84e415d48e69d2b06aa67b317d8 |
| rules | [{u'max_kbps': 50000, u'type': u'bandwidth_limit', |
| | u'id': u'0db48906-a762-4d32-8694-3f65214c34a6', |
| | u'max_burst_kbps': 50000, |
| | u'qos_policy_id': u'8491547e-add1-4c6c-a50e-42121237256c'}, |
| | {u'direction': |
| | u'egress', u'min_kbps': 1000, u'type': u'minimum_bandwidth', |
| | u'id': u'da858b32-44bc-43c9-b92b-cf6e2fa836ab', |
| | u'qos_policy_id': u'8491547e-add1-4c6c-a50e-42121237256c'}] |
| shared | False |
+-------------+-------------------------------------------------------------------+
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.