Servis Kalitesi (QoS)

Servis Kalitesi (QoS)

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.

Desteklenen QoS kural türleri

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.

Yapılandırma

Servisi etkinleştirmek için aşağıdaki adımları takip edin:

Ağ düğümleri üzerinde:

  1. 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
    
  2. Seçimli olarak, /etc/neutron/neutron.conf dosyasında [qos] bölümünde gerekli notification_drivers ayarlayın (message_queue varsayılandır).

  3. /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
    
  4. 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:

  1. /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).

Güvenilen projeler policy.json yapılandırması

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",

Kullanıcı iş akışı

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önetici yaptırımları

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.

Kural düzenlemesi

Ç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                                                             |
+-------------+-------------------------------------------------------------------+
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.