Блог

Новини, акції та корисні статті для розробників.

Налаштування LACP на CentOS 6

Background

Link Aggregation (LAG) - це об'єднання деяких фізичних каналів в один логічний з метою об'єднати пропускну здатність та підвищити відмовостійкість.

Об'єднання пропускної здатності відбувається за допомогою алгоритму балансування, при цьому алгоритм балансування обирається надсилаючою стороною. Наприклад, є сервер та комутатор, між ними налаштовано LAG, усі вихідні пакети сервер балансує сам та сам розподіляє їх за інтерфейсами, а усі вхідні на сервер пакети балансуються вже комутатором. Іншими словами - алгоритм балансування має бути налаштовано з обох сторін, в іншому разі трафік буде "ходити" через один інтерфейс.

Link Aggregation (LAG) може бути статичним або динамічним. Один з протоколів для динамічного об'єднання каналів LACP (Link Aggregation Control Protocol) описано в стандарте IEEE 802.3ad. При використанні LACP дві сторони обмінюются між собою пакетами LACPDU, та на основі цих пакетів учасники визначають, чи належать порти до одного логічного каналу, та чи перевіряється стан фізичних интерфейсов. При цьому LACP не передає ніякої інформації щодо алгоритмів балансування, вони усі обираються на обладнанні.

Більшість алгоритмів балансування розподіляють пакети за інтерфейсами на основі хеш-суми MAC-адрес, IP-адрес, портів призначення та відправника в TCP/UDP-пакетах. Базові алгоритми працюють тільки з MAC або IP+MAC. При цьому результатом є наступне: усі пакети, відправлені з одного сервера на інший, можуть зайняти максимум один інтерфейс, а повну утилізацію 2-х інтерфейсів можна отримати тільки якщо до серверу звернуться два різних клієнта з різними MAC-адресами та не меншою швидкістю інтерфейсів. Виключенням є алгоритм balance-rr (round robin) - він вміє розподіляти трафік між декількома інтерфейсами, але йому потрібна подтримка транків або EtherChannel зі сторони комутатора.

Список режимів:

- mode=0 (balance-rr)

Режим використовується стандартно, якщо в налаштуваннях не вказане інше. Balance-rr забезпечує балансування навантаження та відмовостійкість. У цьому режимі пакети надсилаються "по колу" від першого інтерфейса до останнього, а потім спочатку. Якщо виходить з ладу один з інтерфейсів, пакети надсилаються на ті, які залишились. При підключенні портів до різних комутаторів буде потрібне їх налаштування.

- mode=1 (active-backup)

Один з інтерфейсів є активним, інші інтерфейси працюють в режимі очікування. Якщо активний інтерфейс виходить з ладу (link down тощо), інший інтерфейс замінює активний. Не потребує підтримки даного функціоналу від комутатора.

- mode=2 (balance-xor)

Передача пакетів розподіляється між об'єднаними інтерфейсами за формулою:

((MAC-адреса джерела) XOR (MAC-адреса отримувача)) % число інтерфейсів

Один й той же інтерфейс працює з певними отримувачем. Режим дає балансування навантаження та відмовостійкість.

- mode=3 (broadcast)

Відбувається передача на всі об'єднані інтерфейси, забезпечуючи відмовостійкість.

- mode=4 (802.3ad)

Це динамічне об'єднання портів. В данному режимі можна отримувати значне збільшення пропускної здатності як вхідного так і вихідного трафіку, використувуючи усі об'єднані інтерфейси. Вимагає підтримку режиму від комутатора, а також додаткове налаштування комутатора.

- mode=5 (balance-tlb)

Адаптивне балансування навантаження. При balance-tlb вхідний трафік отримується тільки активним інтерфейсом, вихідний - розподіляється в залежності від поточного завантаження кожного інтерфейса. Забезпечується відмовостійкість та розподіл навантаження вхідного трафіка. Не вимагає спеціальної підтримки коммутатора.

- mode=6 (balance-alb)

Адаптивне балансування навантаження (більш сучасне). Забезпечує балансування навантаження як вихідного (TLB, transmit load balancing), так і вхідного трафіка (для IPv4 через ARP). Не потребує спеціальної підтримки комутатором, але потребує можливість змінювати MAC-адресу прострою.

Example

В сервері є два 1Gb/s мережевих інтерфейса - eth0 и eth1.
Об'єднаємо ці інтерфейси в bond0 та налаштуємо на них LACP.

Редагуємо файли ifcfg-eth0 и ifcfg-eth1 до стану:

# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"
HWADDR="00:25:90:00:BD:4E"
ONBOOT="yes"
# cat /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE="eth1"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"
HWADDR="00:25:90:00:BD:4F"
ONBOOT="yes"

Створюємо файл об'єднаного мережевого інтерфейса ifcfg-bond0 наступного змісту:

# cat /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE="bond0"
BOOTPROTO="none"
IPADDR="77.120.120.77"
NETMASK="255.255.255.0"
GATEWAY="77.120.120.1"
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer2+3"
ONBOOT="yes"

Основний параметр "BINDING_OPTS" - параметр "mode". Він визначає, в якому режимі буде працювати об'єднаний інтерфейс, в прикладі це "mode=4" (802.3ad) - використовувати LACP протокол.
Параметр "miimon" відповідає за hardware-моніторинг лінку, встановлює в мілісекундах частоту перевірки.
Параметр "xmit_hash_policy" визначає алгоритм, за яким буде розподілятися трафік мережевими інтерфейсами. Є три варианта:

layer2 - за MAC-адресою;
layer2+3 - за MAC-адресою та IP-адресою;
layer3+4 - за IP-адресою та портом.

Алгоритм layer2+3 є корисним в тих випадках, коли між сервером та клієнтами встановлено router.

Рестартуємо network-сервіс:

# service network restart

Перевіряємо стан об'єднаного інтерфейса в /proc/net/bonding/bond0:

# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2+3 (2)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
        Aggregator ID: 2
        Number of ports: 2
        Actor Key: 9
        Partner Key: 1
        <strong>Partner Mac Address</strong>: 00:1c:43:0a:87:01

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:25:90:00:bd:4e
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:25:90:00:bd:4f
Aggregator ID: 2
Slave queue ID: 0

Якщо "Partner Mac Address" в секції "802.3ad info" дорівнює 00:00:00:00:00:00, то це значить, що обміну пакетами LACPDU не відбулося та LACP або не налаштовано на комутаторі, або ним не підтримується.