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.
Mod | Adı | Açıklama | Switch Desteği | Kullanım Örneği |
---|---|---|---|---|
0 | balance-rr | Round-robin yük dengeleme | ❌ | Test ortamı, UDP servisleri |
1 | active-backup | Aktif yedekleme | ❌ | Kritik servisler, veri tabanı sunucuları |
2 | balance-xor | Hash tabanlı dengeleme | ⚠️ | Web sunucusu farm’ı |
3 | broadcast | Tüm arayüzlere gönder | ❌ | Multicast/dynamic routing senaryoları |
4 | 802.3ad (LACP) | IEEE standardı Link Aggregation | ✅ | Switch destekli kurumsal sistemler |
5 | balance-tlb | Trafiği dinamik olarak gönder | ❌ | Donanımsal kısıtlı sistemler |
6 | balance-alb | Dinamik gönderme ve alma | ❌ | Yü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şen | Açıklama |
---|---|
İstemci & Sunucu | iperf3 kurulu Linux makineler (Ubuntu 22.04 önerilir) |
Ağ arayüzleri | En az 2 fiziksel ya da sanal NIC |
Bonding Yapılandırması | balance-rr ya da 802.3ad gibi performans odaklı mod |
Switch | Eğer mode=802.3ad kullanılıyorsa LACP destekli switch |
Uçlar Arası Mesafe | Doğruluk için mümkünse aynı subnet |
Ağ yükü yokluğu | Test 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
Sorun | Olası Neden | Çözüm |
---|---|---|
bond0 trafik taşımıyor | Netplan yapılandırması eksik | sudo netplan try ile doğrula |
ens33 inaktif kalıyor | primary ayarı yapılmamış | parameters: primary: ens33 ekle |
LACP modu çalışmıyor | Switch konfigürasyonu eksik | LACP (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.