Kurumsal ağlarda yüksek erişilebilirlik (HA) ve ağ performansı artık bir lüks değil temel bir gerekliliktir. Kritik servislerin kesintisiz çalışması ve yüksek bant genişliği talepleri ağ altyapısında yeni yaklaşımları gerekli kılmıştır. NIC Bonding (ağ arayüzü birleştirme) bu ihtiyaçlara yanıt veren Linux sistemlerde yaygın olarak kullanılan güçlü bir ağ yapılandırma yöntemidir.

Bu makalede:

  • NIC bonding’in ne olduğu ve nasıl çalıştığı
  • Hangi senaryolarda tercih edilmesi gerektiği
  • Linux (özellikle Ubuntu 22.04) üzerinde nasıl yapılandırılacağı
  • Farklı bonding modlarının avantaj ve dezavantajları
  • Performans testi ve hata ayıklama yöntemleri gibi konular detaylı şekilde ele alınacaktır.

NIC Bonding Nedir?

NIC Bonding birden fazla fiziksel ağ arayüzünü (NIC – Network Interface Card) tek bir mantıksal arayüz altında birleştirerek aşağıdaki iki temel amacı hedefler:

  • Redundancy (Yedeklilik): Bir arayüz arızalanırsa diğeri devreye girerek bağlantı kesintisini önler.
  • Throughput Artışı: Trafik birden fazla NIC’e dağıtılarak toplam bant genişliği artırılır.

Bu yapılandırma Linux kernel seviyesinde bonding sürücüsü aracılığıyla gerçekleştirilir ve ifenslave aracı ile yönetilir.

Neden NIC Bonding Kullanılmalı?

  • Yedeklilik: Servis devamlılığı için güvencedir. Ağ bağlantınız tek bir fiziksel kart üzerindeyse bu kartın veya switch portunun arızalanması durumunda sistem dış dünya ile iletişimini tamamen kaybeder. NIC bonding sayesinde bu tür kesintilerin önüne geçilir.

Senaryo: Bir PostgreSQL veritabanı sunucusunda iki NIC vardır: ens33 ve ens37. Bunlar bond0 altında mode=active-backup ile birleştirilmiştir. Bir gece ens33’ün bağlı olduğu switch portu arızalanır. Sistem 100ms içinde bu arızayı algılar ve trafiği ens37 üzerinden yönlendirir.
Sonuç: Hiçbir kullanıcı bağlantı kesintisi yaşamaz. Sistem yöneticisi durumu sadece syslog kayıtlarından fark eder.

  • Performans: Özellikle veri merkezlerinde büyük dosya transferlerinde veya web sunucularında eş zamanlı birçok istemciye hizmet verilirken performans kritik hale gelir. Bonding trafik yükünü birden çok arayüze yayarak toplam throughput’u artırabilir.

Örnek:
– 2 adet 1Gbps NIC → teorik 2Gbps toplam kapasite (protokol overhead hariç)
– 3 adet 1Gbps NIC → 3Gbps’ye kadar çıkabilir.

NIC Bonding Modları, Avantajları ve Kullanım Alanları

Linux kernel’de tanımlı toplam 7 bonding modu vardır. Her birinin davranışı, gereksinimi ve kullanım amacı farklıdır.

ModAdıAçıklamaSwitch DesteğiKullanım Örneği
0balance-rrRound-robin yük dengelemeTest ortamı, UDP servisleri
1active-backupAktif yedeklemeKritik servisler, veri tabanı sunucuları
2balance-xorHash tabanlı dengeleme⚠️Web sunucusu farm’ı
3broadcastTüm arayüzlere gönderMulticast/dynamic routing senaryoları
4802.3ad (LACP)IEEE standardı Link AggregationSwitch destekli kurumsal sistemler
5balance-tlbTrafiği dinamik olarak gönderDonanımsal kısıtlı sistemler
6balance-albDinamik gönderme ve almaYüksek bant genişliği gerektiren ev ağları

Dikkat: Mod 4 (802.3ad) kullanacaksanız, switch tarafında LACP yapılandırmasının yapılmış olması gerekir. Aksi takdirde bağlantı problemleri yaşanabilir.

Ubuntu 22.04 Üzerinde NIC Bonding Uygulaması
Ubuntu 22.04 ağ yapılandırması için Netplan adlı YAML tabanlı bir sistemi kullanır. İşlem adımlarını aşağıda sıraladık.

Gerekli Paketlerin Kurulması

sudo apt update
sudo apt install ifenslave -y

Kernel Bonding Modülünün Aktif Edilmesi

sudo modprobe bonding

Kalıcı olması için;

echo "bonding" | sudo tee -a /etc/modules

Netplan ile Active-Backup (mod=1) Yapılandırması

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33: {}
    ens37: {}
  bonds:
    bond0:
      interfaces:
        - ens33
        - ens37
      addresses:
        - 192.168.100.200/24
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
      parameters:
        mode: active-backup
        primary: ens33
        mii-monitor-interval: 100

Netplan ile Balance-RR (mod=0) Yapılandırması

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33: {}
    ens37: {}
    ens38: {}
  bonds:
    bond0:
      interfaces:
        - ens33
        - ens37
        - ens38
      addresses:
        - 192.168.100.200/24
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
      parameters:
        mode: balance-rr
        mii-monitor-interval: 100

Yapılandırmanın Uygulanması

sudo netplan apply

Performans Testi: iperf3 Kullanarak

NIC Bonding yapısının gerçekten performans sağladığını doğrulamak için doğru yapılandırılmış bir test ortamı gereklidir.

BileşenAçıklama
İstemci & Sunucuiperf3 kurulu Linux makineler (Ubuntu 22.04 önerilir)
Ağ arayüzleriEn az 2 fiziksel ya da sanal NIC
Bonding Yapılandırmasıbalance-rr ya da 802.3ad gibi performans odaklı mod
SwitchEğer mode=802.3ad kullanılıyorsa LACP destekli switch
Uçlar Arası MesafeDoğruluk için mümkünse aynı subnet
Ağ yükü yokluğuTest sırasında arka planda trafiği kesmeniz önerilir

Her iki uçta da aşağıdaki komutla kurulumu gerçekleştirin:

sudo apt install iperf3 -y

Sunucu IP Adresi : 192.168.100.165

iperf3 -s

Bonding tarafı (192.168.100.200):

iperf3 -c 192.168.199.165 -t 10 -P 4

Not: -P değeri paralel bağlantı sayısını ifade eder. Daha yüksek -P değeri, bonding performansını daha iyi yansıtır. Bu test istemciden sunucuya tek bir TCP bağlantısı üzerinden 10 saniyelik veri akışı yapar.

Çoklu Paralel Akış Testi (-P Parametresi)
Bonding’in gerçek gücü paralel bağlantılarda görülür.

iperf3 -c 192.168.100.165 -t 15 -P 4

-P 4: 4 paralel TCP akışı başlatılır.

Daha yüksek P değeri = bonding üzerinden daha fazla NIC’in kullanılması

UDP Performans ve Jitter Testi

TCP’nin aksine UDP’de paket sırası, gecikme ve kayıp gibi metrikler test edilebilir.

iperf3 -c 192.168.100.165 -u -b 2G -t 10

-u: UDP kullan

-b 2G: Hedef bant genişliği

Sonuçlarda jitter, lost packets ve packet loss ratio gibi değerler elde edilir.

Trafiğin Gerçekte Dağıldığını İzleme

Canlı takip için;

watch -n 1 cat /sys/class/net/ens33/statistics/tx_bytes

Script ile Otomatik Takip:

#!/bin/bash
interfaces=("ens33" "ens37" "ens38")
declare -A last
for iface in "${interfaces[@]}"; do
  last[$iface]=$(cat /sys/class/net/$iface/statistics/tx_bytes)
done

while true; do
  clear
  echo "NIC Bonding Trafik İzleme (tx_bytes/sn)"
  echo "-------------------------------------------"
  for iface in "${interfaces[@]}"; do
    current=$(cat /sys/class/net/$iface/statistics/tx_bytes)
    diff=$((current - last[$iface]))
    kbps=$((diff / 1024))
    printf "%-8s: %8d KB/s\n" "$iface" "$kbps"
    last[$iface]=$current
  done
  sleep 1
done

Sanal Ortamlar (VMware, VirtualBox) ile Uyum

  • mode=802.3ad sanal ortamlarda genelde çalışmaz.
  • balance-rr en uyumlu moddur.
  • Tüm sanal NIC’lerin bağlı (“connected”) olması gerekir.
  • Hypervisor üzerinden NIC’lere promiscuous mod verilmesi bazı durumlarda gerekebilir.

Hata Ayıklama ve Sık Karşılaşılan Problemler

SorunOlası NedenÇözüm
bond0 trafik taşımıyorNetplan yapılandırması eksiksudo netplan try ile doğrula
ens33 inaktif kalıyorprimary ayarı yapılmamışparameters: primary: ens33 ekle
LACP modu çalışmıyorSwitch konfigürasyonu eksikLACP (802.3ad) aktif edilmeli
Paket sıralama hatasıbalance-rr + TCP kullanımıUDP ya da LACP tercih et

Gelişmiş Test Senaryoları

CPU ve Kernel Katmanında Darboğaz Testi

NIC bonding yapılandırmanız yeterli olsa bile CPU tek çekirdekte sıkışabilir. Bunu görmek için htop veya dstat ile testi izlemeniz gerekir;

dstat -cdnm --top-cpu

Eğer iperf3 testleri sırasında bir çekirdek %100’deyse, irqbalance servisinin devrede olduğuna emin olun.

sudo systemctl enable irqbalance

İki Yönlü Simetrik Test

iperf3 -c 192.168.100.165 --bidir -P 4

Bu test hem sunucu hem istemcinin aynı anda veri gönderip almasını sağlar. Gerçek hayatta dosya paylaşımı ve veritabanı replikasyonu gibi çift yönlü trafiğe uygundur.