Настройка QoS в Open vSwitch
Данная инструкция описывает процесс настройки ограничений пропускной способности (QoS) для SAN-VLAN и основной сети на базе Open vSwitch (OVS).
Используется драйвер очередей linux-htb, позволяющий задавать максимальные скорости на уровне портов.
🟦 1. Ограничение пропускной способности SAN-порта (VLAN 25)
1.1. Создать очередь с максимальной скоростью 4.2 Гбит/с
ovs-vsctl -- --id=@q0 create queue other-config:max-rate=4509715661 \
-- --id=@qos create qos type=linux-htb other-config:max-rate=4509715661 queues:0=@q0 \
-- set port san25 qos=@qos
В этой команде выполняется сразу три действия:
-
создаётся очередь q0 с лимитом 4 509 715 661 бит/с;
-
создаётся объект QoS, привязанный к этой очереди;
-
QoS назначается на порт san25 (внутренний порт VLAN 25).
1.2. Проверка конфигурации SAN-QoS
Показать все политики QoS:
ovs-vsctl list qos
Показать все очереди:
ovs-vsctl list queue
Проверить настройки порта SAN-VLAN:
ovs-vsctl list port san25
2. Ограничение пропускной способности основной сети (vmbr0)
Для всех остальных сетей задаётся ограничение 1 Гбит/с.
2.1. Создать очередь и назначить QoS на vmbr0
ovs-vsctl -- --id=@q1 create queue other-config:max-rate=1073741824 \
-- --id=@qos1 create qos type=linux-htb other-config:max-rate=1073741824 queues:0=@q1 \
-- set port vmbr0 qos=@qos1
Создаётся:
-
очередь q1 с лимитом 1 073 741 824 бит/с;
-
объект QoS с тем же ограничением;
-
привязка QoS к порту vmbr0.
2.2. Проверка конфигурации QoS для vmbr0
Просмотр параметров порта:
ovs-vsctl list port vmbr0
Список QoS-объектов:
ovs-vsctl list qos
Список очередей:
ovs-vsctl list queue
3. Скрипт для автозапуска qos
расположение /usr/local/sbin/ovs-qos.sh:
#!/bin/bash
#Основной вариант
# Ожидание запуска Open vSwitch
for i in {1..10}; do
ovs-vsctl show >/dev/null 2>&1 && break
echo "OVS not ready, retrying..."
sleep 2
done
# Если OVS так и не поднялся — выход
ovs-vsctl show >/dev/null 2>&1 || exit 1
# Проверка: существует ли уже QoS на san25
EXIST_SAN=$(ovs-vsctl get port san25 qos 2>/dev/null)
if [[ "$EXIST_SAN" == "[]" ]]; then
echo "Applying QoS for san25..."
ovs-vsctl -- --id=@q0 create queue other-config:max-rate=4509715661 \
-- --id=@qos create qos type=linux-htb other-config:max-rate=4509715661 queues:0=@q0 \
-- set port san25 qos=@qos
fi
# Проверка: существует ли QoS на vmbr0
EXIST_MGMT=$(ovs-vsctl get port vmbr0 qos 2>/dev/null)
if [[ "$EXIST_MGMT" == "[]" ]]; then
echo "Applying QoS for vmbr0..."
ovs-vsctl -- --id=@q1 create queue other-config:max-rate=1073741824 \
-- --id=@qos1 create qos type=linux-htb other-config:max-rate=1073741824 queues:0=@q1 \
-- set port vmbr0 qos=@qos1
fi
exit 0
#-------------------------------------------------------------------------------------------
#или этот
#!/bin/bash
# Скрипт для применения QoS к портам OVS после перезагрузки
# QoS для SAN сети
ovs-vsctl -- --id=@q0 create queue other-config:max-rate=4509715661 \
-- --id=@qos create qos type=linux-htb other-config:max-rate=4509715661 queues:0=@q0 \
-- set port san25 qos=@qos
# QoS для management сети
ovs-vsctl -- --id=@q1 create queue other-config:max-rate=1073741824 \
-- --id=@qos1 create qos type=linux-htb other-config:max-rate=1073741824 queues:0=@q1 \
-- set port vmbr0 qos=@qos1
exit 0
Сделаем скрипт исполняемым
chmod +x /usr/local/sbin/ovs-qos.sh
3.1. Создаём systemd unit
Файл: /etc/systemd/system/ovs-qos.service
[Unit]
Description=Apply OVS QoS after boot
After=network.target openvswitch-switch.service
Requires=openvswitch-switch.service
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/ovs-qos.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
3.2. Включаем автозапуск
systemctl daemon-reload
systemctl enable ovs-qos.service
systemctl start ovs-qos.service
No comments to display
No comments to display