Network Interface Bonding Yapılandırması - RedHat / Centos
4 min read

Network Interface Bonding Yapılandırması - RedHat / Centos

Network Interface Bonding Yapılandırması - RedHat / Centos

Network Interface Bonding; NIC bonding, Port trunking, Teaming, Link Aggregation Groups (LAG) veya Link Aggregation Control Protocol (LACP) olarak da bilinir ve birden çok NIC’in tek bir bond arayüzünde toplanması veya birleşimi olarak tanımlanabilir. RedHat tabanlı işletim sistemlerinde iki veya daha fazla ethernet interface olması durumunda bonding network interface kullanarak, ethernetlerin load balance bondround-robin bond ya da fault tolerant bond şeklinde çalışması sağlanabilmektedir. Bu sayede bir interface down olması durumunda sunucuya erişim ikinci interface üzerinden devam edecektir.

Bonding terimi trunking terimiyle aynı şeyi ifade eder. Bende aşağıda bonding kelimesini kullanacağım çünkü pratik olarak arayüzleri tek interface olarak bağlayacağız. Bonding, birden fazla bağlantı noktasını tek bir grupta toplamanıza ve bant genişliğini etkili bir şekilde tek bir bağlantıda birleştirmenize olanak tanır. Bonding ayrıca, yoğun network trafiğinizi multi-gigabit hatlara bölüştürmenize de olanak tanır.

Bonding Nerelerde Kullanılabilir?

Yedekli bağlantılara, hata toleransına veya yük dengeleme ağlarına ihtiyaç duyduğunuz her yerde kullanabilirsiniz. Yüksek kullanılabilirlikli (High Availability) bir ağ segmentine sahip olmanın en iyi yoludur. Bonding kullanırken seçebileceğiniz modlar ise şu şekildedir;

  • mode = 0 (Round-robin) Round-robin çalışır. Yani ağ trafiğini çalışan arayüzlere sırası ile göndermektedir. Yük paylaşımı ve hata toleransı sağlar.
  • mode = 1 (active-backup) Aktif yedekleme politikası: Bonddaki sadece bir slave aktiftir. Farklı bir slave, ancak aktif slave başarısız olursa aktif hale gelir. Switchin kafasının karışmasını önlemek için bondun MAC adresi harici olarak yalnızca bir bağlantı noktasında (ağ bağdaştırıcısı) görülebilir. Bu mod, hata toleransı sağlar. Birincil seçenek, bu modun davranışını etkiler.
  • mod = 2 (balance-xor) XOR politikası: [(Kaynak MAC adresi XOR hedef MAC adresi) % arayüz sayısı] algoritmasına göre paketleri gönderir. Böylece her hedef için aynı arayüzü seçmiş olur. Yük paylaşımı ve hata toleransı sağlar.
  • mode = 3 (broadcast) Yayın politikası: Broadcast çeşididir. Tüm paketleri tüm arayüzlerden gönderir. Hata toleransı sağlar.
  • mode = 4 (802.3ad) IEEE 802.3ad Dinamik bağlantı toplama. Aynı hız ve çift yönlü ayarları paylaşan toplama grupları oluşturur. Aktif toplayıcıdaki tüm slave’leri 802.3ad spesifikasyonuna göre kullanır. Önkoşullarda; her slave’in hızını ve dupleksini almak için sürücülerde Ethtool desteği ve IEEE 802.3ad Dinamik bağlantı toplamayı destekleyen bir switch gereklidir. Çoğu switch, 802.3ad modunu etkinleştirmek için bir tür yapılandırma gerektirecektir.
  • mod = 5 (balance-tlb) Uyarlanabilir iletim yük dengeleme: Bu modda ise toplam yük her arayüzün kendi yüküne göre paylaşılır. Her arayüzün yükü hızına oranla ölçülür. Gelen trafik aktif ilk arayüz tarafından alınır. Eğer bu arayüz çalışmaz ise herhangi diğer bir arayüz aynı MAC adresi ile işlemi devralır. Çalışması için sürücülerinin ethtool desteğinin olması gerekir.
  • mod = 6 (balance-alb) Uyarlanabilir yük dengeleme: Bu modda ise hem gidiş hemde geliş trafiği yük paylaşımı yapılır ve özel bir anahtarlama cihazı desteği gerektirmez. IPv4 üzerinden bu işlemi gerçekleştirir.

Bonding Yapılandırması Nasıl Yapılır?

İlk olarak NetworkManager servisimizi durduruyoruz. Bonding yapılandırmamızı manuel olarak yapacağımızdan dolayı ayarlarımızın sunucumuzu yeniden başladığında silinmemesi için servisimizin durdurulması gerekmektedir.

systemctl disable --now NetworkManager

Bonding servisini kullanabilmek için kernel modülünü aktif ediyoruz.

modprobe bonding

/etc/sysconfig/network-scripts dizininde ifcfg-bond0 adlı yeni bir yapılandırma dosyası oluşturun. Bunu yapmak için metin düzenleyicilerinden vim veya nano’yu kullanabiliriz.

nano /etc/sysconfig/network-scripts/ifcfg-bond0

Dosyanın içeriğini aşağıdaki gibi düzenliyoruz. Ip adres bilgilerini kendi network bilgilerinizle güncellemeyi unutmayınız. Ayrıca BONDING_OPTS parametresinde yer alan mode kullanacağımız bonding modu, miimon ise adapter durumlarının kaç milisaniyede bir kontrol edileceğidir.

DEVICE=bond0
Type=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=none
ONBOOT=yes
IPADDR=10.150.131.xx
PREFIX=24
GATEWAY=10.150.131.1
NM_CONTROLLED=no
BONDING_OPTS="mode=1 miimon=100"

Oluşturduğumuz bond0 interface dahil edeceğimiz bond üyesi kartları yapılandırıyoruz. Bu işlem için eth0 ve eth1 gibi bondige katacağımız kartlarımızda aşağıdaki parametreler yoksa eklemeli, varsa düzenlemeliyiz.

eth0 için nano /etc/sysconfig/network-scripts/ifcfg-eth0;

TYPE=Ethernet
DEVICE=eth0
HWADDR=xx:xx:xx:xx:xx:xx
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

eth1 için nano /etc/sysconfig/network-scripts/ifcfg-eth1;

TYPE=Ethernet
DEVICE=eth1
HWADDR=xx:xx:xx:xx:xx:xx
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

Kullandığımız parametreleri de kısaca açıklayalım;

  • DEVICE: Sürücüye vereceğimiz isim.
  • HWADDR: Ethernet kartının mac adresi. (ip addr show [ethx] komutuyla görebilirsiniz)
  • TYPE: Sürücü cinsi. (Ethernet, IPsec vb)
  • UUID: Universal Unique Identifier
  • ONBOOT: Reboot olduktan sonra otomatik açılmasını istiyor musunuz yoksa manuel mi açacaksınız.
  • NM_CONTROLLED: NetworkManager tarafından yönetilip yönetilmediğini belirler.
  • BOOTPROTO: Kısaca DHCP kullanıp kullanmayacağımızı soruyor.
  • IPADDR: Tanımladığımız ip adresi.
  • GATEWAY: Ağ geçidi.
  • PREFIX: Ağ geçidinin prefix hali • NETMASK: Ağ maskemiz. • USERCTL: root kullanıcısı dışındaki kullanıcılar etherneti kullanabilsin mi cevabını verir. • MASTER: Bu parametre SLAVE parametresiyle birlikte kullanılır ve ethernetin bağlı olduğu bondingi belirler. • SLAVE: Bu ethernet’in bonding tarafından kontrol edilip edilmediğini belirler.

Yapmış olduğumuz ayarların aktif edilebilmesi için; network servisinin restart edilmesi gerekmektedir.

systemctl restart network

Artık bonding servisimiz hazır oldu ve belirlediğimiz ip üzerinden her iki network adapterimizde yedekli olarak hizmet veriyor. Bonding durumunu öğrenmek için ip addr show bond0 ve cat /proc/net/bonding/bond0 komutlarının çıktısını kontrol edebilirsiniz.