Спільне використання кількох мережних інтерфейсів в 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 дозволяє друкувати цей текст.