Quality of Service (QoS)

Quality of Service (QoS)

QoS didefinisikan sebagai kemampuan untuk menjamin kebutuhan jaringan tertentu seperti bandwidth, latency, jitter, dan kehandalan untuk memenuhi Service Level Agreement (SLA) antara provider aplikasi dan end user.

Perangkat jaringan seperti switch dan router bisa menandai traffic sehingga ditangani dengan prioritas yang lebih tinggi untuk memenuhi persyaratan QoS yang disetujui di bawah SLA. Dalam kasus lain, traffic jaringan tertentu seperti Voice over IP (VoIP) dan video streaming perlu ditransmisikan dengan keterbatasan bandwidth minimal. Pada sistem tanpa manajemen QoS jaringan, semua traffic akan ditransmisikan dalam cara “best-effort” membuat hal itu mustahil untuk menjamin pelayanan kepada pelanggan.

QoS adalah layanan canggih plug-in. QoS dipisahkan dari sisa kode OpenStack Networking pada beberapa tingkat dan tersedia melalui driver ekstensi ml2.

Rincian tentang model DB, ekstensi API, dan use case berada di luar cakupan panduan ini tetapi dapat ditemukan dalam Neutron QoS specification.

Supported QoS rule types

Plug-in atau ml2 mechanism driver dapat mengklaim dukungan untuk beberapa tipe aturan QoS dengan memberikan plug-in/driver class property yang disebut supported_qos_rule_types yang mengembalikan daftar string yang sesuai dengan QoS rule types.

Catatan

Untuk rilis Newton seterusnya DSCP marking akan didukung.

Dalam kasus yang paling sederhana, properti dapat diwakili oleh daftar Python sederhana yang didefinisikan di kelas.

Untuk plug-in ml2, daftar tipe aturan QoS yang didukung didefinisikan sebagai subset anuran umum yang didukung oleh semua driver mekanisme aktif.

Catatan

Daftar tipe aturan yang dilansir core plug-in tidak diberlakukan ketika mengakses QoS rule resources. Hal ini terutama karena kita tidak akan mampu untuk membuat aturan apapun sementara satu ml2 driver tidak memiliki dukungan untuk QoS (pada saat penulisan, hanya macvtap adalah driver tersebut).

Konfigurasi

Untuk mengaktifkan layanan ini, ikuti langkah-langkah di bawah ini:

Pada node jaringan:

  1. Menambahkan layanan QoS untuk pengaturan service_plugins di `` / etc / neutron / neutron.conf``. Sebagai contoh:

    service_plugins = \
    neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,
    neutron.services.metering.metering_plugin.MeteringPlugin,
    neutron.services.qos.qos_plugin.QoSPlugin
    
  2. Opsional, mengatur diperlukan `` notification_drivers`` di `` [QoS] `` bagian dalam `` / etc / neutron / neutron.conf`` (`` message_queue`` is the default).

  3. Dalam `` / etc / neutron / plugins / ML2 / ml2_conf.ini``, menambahkan `` qos`` untuk extension_drivers di bagian `` [ml2] ``. Sebagai contoh:

    [ml2]
    extension_drivers = port_security, qos
    
  4. Jika agen Open vSwitch sedang digunakan, atur `` extensions`` untuk `` qos`` di `` [agen] `` bagian dari /etc/neutron/plugins/ml2/openvswitch_agent.ini. Sebagai contoh:

    [agent]
    extensions = qos
    

Pada compute nodes:

  1. Dalam `` / etc / neutron / plugins / ML2 / ml2_conf.ini``, menambahkan `` qos`` ke pengaturan `` extensions`` di bagian `` [agen] ``. Sebagai contoh:

    [agent]
    extensions = qos
    

Catatan

QoS saat ini bekerja dengan ml2 saja (SR-IOV, Open vSwitch, dan linuxbridge adalah driver yang diaktifkan untuk QoS dalam rilis Mitaka).

Konfigurasi terpercaya tenants policy.json

Jika tenant dipercaya untuk administrate kebijakan QoS sendiri di cloud Anda, file neutron policy.json ini dapat dimodifikasi untuk memungkinkan ini.

Memodifikasi entri kebijakan /etc/neutron/policy.json sebagai berikut:

"get_policy": "rule:regular_user",
"create_policy": "rule:regular_user",
"update_policy": "rule:regular_user",
"delete_policy": "rule:regular_user",

Untuk mengaktifkan aturan batas bandwidth:

"get_policy_bandwidth_limit_rule": "rule:regular_user",
"create_policy_bandwidth_limit_rule": "rule:admin_only",
"delete_policy_bandwidth_limit_rule": "rule:admin_only",
"update_policy_bandwidth_limit_rule": "rule:admin_only",
"get_rule_type": "rule:regular_user",

Untuk mengaktifkan aturan DSCP marking:

"get_policy_dscp_marking_rule": "rule:regular_user",
"create_dscp_marking_rule": "rule:admin_only",
"delete_dscp_marking_rule": "rule:admin_only",
"update_dscp_marking_rule": "rule:admin_only",
"get_rule_type": "rule:regular_user",

Alur kerja user

Kebijakan QoS hanya dibuat oleh admin dengan default policy.json. Oleh karena itu, Anda harus memiliki cloud operator mengaturnya atas nama cloud tenant.

Jika tenant dipercaya untuk membuat kebijakan mereka sendiri, periksa tenant dipercaya bagian konfigurasi policy.json.

Pertama, buatlah kebijakan QoS dan aturan batas bandwidth:

$ 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                                 |
+----------------+--------------------------------------+

Catatan

Burst value diberikan dalam kilobit, bukan di kilobit per detik sebagai nama parameter mungkin menyarankan. Ini adalah jumlah data yang dapat dikirim sebelum batas bandwidth berlaku.

Catatan

Pelaksanaan QoS memerlukan burst value untuk memastikan perilaku yang tepat dari aturan batas bandwidth dalam Open vSwitch dan agen Linux bridge. Jika Anda tidak memberikan nilai, standarnya ke 80% dari batas bandwidth yang bekerja untuk typical TCP traffic.

Kedua, mengaitkan kebijakan dibuat dengan port neutron yang ada. Untuk melakukan ini, user mengekstrak id port yang akan dikaitkan dengan kebijakan yang sudah dibuat. Pada contoh berikut, kita akan menetapkan kebijakan bw-limiter ke VM dengan alamat IP 10.0.0.3

$ 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"}|
+--------------------------------------+----------------------------------+

$ neutron port-update 88101e57-76fa-4d12-b0e0-4fc7634b874a --qos-policy bw-limiter
Updated port: 88101e57-76fa-4d12-b0e0-4fc7634b874a

Dalam rangka untuk melepaskan port dari kebijakan QoS, hanya update ulang konfigurasi port.

$ neutron port-update 88101e57-76fa-4d12-b0e0-4fc7634b874a --no-qos-policy
Updated port: 88101e57-76fa-4d12-b0e0-4fc7634b874a

Port dapat dibuat dengan kebijakan yang menyertainya juga.

$ 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-10-0-0-4", ...   }            |
| dns_name              |                                                  |
| fixed_ips             | {"subnet_id":                                    |
|                       |         "fabaf9b6-7a84-43b6-9d23-543591b531b8",  |
|                       |          "ip_address": "10.0.0.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                 |
+-----------------------+--------------------------------------------------+

Anda dapat melekatkan jaringan untuk kebijakan QoS. Artinya ini adalah bahwa port komputasi terhubung ke jaringan akan menggunakan kebijakan jaringan secara default kecuali port memiliki kebijakan tertentu yang melekat padanya. Jaringan port yang dimiliki seperti DHCP dan router port dikecualikan dari kebijakan aplikasi jaringan.

Dalam rangka untuk melekatkan kebijakan QoS ke jaringan, update jaringan yang ada, atau sejak awal ciptakan jaringan yang melekat pada kebijakan.

$ neutron net-update private --qos-policy bw-limiter
Updated network: private

Catatan

Konfigurasi burst value tepat sangat penting. Jika burst value diatur terlalu rendah, penggunaan bandwidth akan mencekik begitu juga dengan pengaturan batas bandwidth yang tepat. Masalah ini dibahas dalam berbagai sumber dokumentasi, misalnya di Juniper’s documentation. Burst value untuk traffic TCP dapat ditetapkan sebagai 80% dari nilai yang diinginkan batas bandwidth. Sebagai contoh, jika batas bandwidth diatur ke 1000kbps maka nilai yang cukup meledak akan 800kbit. Jika burst value dikonfigurasi terlalu rendah, batas bandwidth dicapai akan lebih rendah dari yang diharapkan. Jika burst value dikonfigurasi terlalu tinggi, terlalu sedikit paket bisa dibatasi dan batas bandwidth mencapai akan lebih tinggi dari yang diharapkan.

Penegakan administrasi

Administrator dapat menegakkan kebijakan pada port tenant atau jaringan. Selama kebijakan tersebut tidak dibagi, tenant tidak dapat melepaskan kebijakan apa saja yang melekat ke jaringan atau port.

Jika kebijakan ini bersama, tenant mampu melekatkan atau melepaskan kebijakan tersebut dari port dan jaringan sendiri.

Modifikasi aturan

Anda dapat memodifikasi aturan pada saat runtime. Modifikasi aturan akan disebarkan ke port yang terpasang.

$ 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                                 |
+----------------+--------------------------------------+

Sama seperti dengan bandwidth yang membatasi, membuat kebijakan untuk aturan DSCP marking:

$ 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     |
+-------------+--------------------------------------+

Anda dapat membuat, memperbarui, mendaftar, menghapus, dan menunjukkan DSCP marking dengan klien neutron:

$ 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-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

$ neutron qos-dscp-marking-rule-list

+--------------------------------------+----------------------------------+
| id                                   | dscp_mark                        |
+--------------------------------------+----------------------------------+
| 115e4f70-8034-4176-8fe9-2c47f8878a7d | 22                               |
+--------------------------------------+----------------------------------+
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.