Спільне використання кількох мережних інтерфейсів в Ubuntu, Debian

"Склеювання" мережевих інтерфейсів (NIC Teaming/Bonding) - не що інше, як злиття декількох мережевих з'єднань в одне паралельне. Це дозволяє збільшити пропускну здатність каналу і підвищити стійкість до відмови мережі у разі відмови однієї з мережевих карт.

Ядро linux йде із вбудованим драйвером для агрегування кількох мережних інтерфейсів в один, званий bond0. У цьому посібнику буде пояснено, як налаштувати цей інтерфейс під debian-based системою на конкретному прикладі.

У прикладі використовується таке обладнання:

  • 2 x PCI-e Gig мережні карти з підтримкою Jumbo-кадрів
  • RAID 6 w/ 5 enterprise grade 15k SAS жорсткі диски
  • Debian Linux 6.0.2 amd64

Також хочу зауважити, що ця інструкція працюватиме і на Ubuntu Server. Нижче наведено команди, виходячи з того, що ви відкрили root консоль, використовуючи su або sudo -i.

Рекомендоване програмне забезпечення.

Ifenslave використовується для приєднання мережевих карт до bond-інтерфейсу. Bond0 буде вважатися в системі як звичайний мережевий інтерфейс, але надсилатиме пакети через приєднані (slave) пристрої, використовуючи планувальник на алгоритмі round-robin. Це дозволить забезпечити просту та збалансовану систему. Встановимо це програмне забезпечення за допомогою команди:

apt-get install ifenslave*

Налаштування Linux bounding драйвера.

Створимо файл /etc/modprobe.d/bonding.conf nano /etc/modprobe.d/bonding.conf

З таким вмістом: alias bond0 bonding options bonding mode=0 arp_interval=100 arp_ip_target=192.168.1.254, 192.168.1.12

Збережемо та закриємо файл. У цьому випадку опції позначають:

Тепер завантажимо драйвер,використовуючи наступні команди: modprobe -v bonding mode=0 arp_interval=100 arp_ip_target=192.168.1.254, 192.168.1.12

Перевірте журнал та наявність у системі інтерфейсу bond0. tail -f /var/log/messages ifconfig bond0

Налаштування мережних інтерфейсів для спільного використання.

Насамперед зупинимо eth0 і eth1 (не робіть так у ssh сесії): /etc/init.d/networking stop

Відредагуємо /etc/network/interfaces, зробивши його резервну копію (про всяк випадок): cp /etc/network/interfaces /etc/network/interfaces.bak nano /etc/network/interfaces

Видаливши з вмісту eth0 та eth1 конфігурацію та привівши файл до такого вигляду:

Зберігаємо та виходимо. У цьому випадку опції означають:

Дещо про інших Bonding Policies.

Трохи вище ми встановили bounding policy (mode) значення 0, що означає balance-rr. Інші значення можуть бути:

  • active-backup або 1: Тільки один slave активний у одиницю часу. Другий slave активується після аварії з першим slave. Цей режим забезпечує лише стійкість до відмов.
  • balance-xor або 2: Застосовується хеш політика у вигляді MAC-джерела XOR MAC-отримувача. Цей режим забезпечує стійкість до відмов та балансування навантаження.
  • broadcast або 3: Передача йде через усі slave. Цей режим забезпечує лише стійкість до відмов.
  • 802.3ad або 4: Повинен застосовуватись лише якщо комутатор підтримує IEEE 802.3ad Dynamic link aggregation.
  • balance-tlb або 5: Не потрібна підтримка з боку комутатора. Вихідний трафік розподіляється залежно від поточного навантаження кожного slave. Вхідний трафік надходить на поточний slave і якщо він відмовляє, то інший slave бере роботу на себе.
  • balance-alb або 6: alb - Adaptive load balancing.Працює як balance-tlb + балансування навантаження rlb для IPv4.

Запуск інтерфейсу bond0.

Після внесення змін до конфігураційних файлів необхідно запустити або перезапустити сервіси мережі: /etc/init.d/networking restart

або перезавантаження хоста.

Перевірка роботи.

Вводимо до терміналу наступну команду: ifconfig

Висновок буде приблизно наступним:

Використовуємо cat, щоб переглянути поточний стан bond драйвера та мережевих з'єднань:

У разі успіху висновок буде приблизно наступним:

Автор статті Platon Puhlechev aka iFalkorr дозволяє друкувати цей текст.