Linux İşletim Sistemlerinde Nic Bonding Yapılandırması

BondingKesintisizlik adına yapılan en önemli işlemlerden biridir network teaming. Yani birden fazla network kartının tek network kartı gibi tanınması ve bağlantılardan birinin kopması durumunda diğer bağlantılardan kesintisizlik sağlanması. Öncelikle bu işlemin artılarına bakıldığında çok önemli etkiler görebiliriz. Farklı 2 switchten gelen kabloları farklı 2 ethernet kartına bağlayıp 1 ethernet portu altında topladığımızda switchlerden biri donanımsal olarak göçtüğü anda kesintisiz çalışma diğer sağlam olan network bağlantısı ile devam edecektir. Bu yapıyı 4 adet nic kartına çıkardığımızı 4 farklı switch’ten fiziksel bağlantı aldığımızı düşünelim. 3 switch donanımsal olarak çökse bile kesintisizlik devam edecektir.


Bu işlemleri Windows altında donanım üreticileri tarafından sağlanan yazılımlarla yapmak mümkün. Bir takım kısıtlarla birlikte sorunsuz denilebilecek seviyede çalışabilmektedir. Aslen araya bir balancer koymadığınız takdirde yazılım bile olsa tam olarak yük dengelemesi yapılamamaktadır.

Donanım üreticilerinin bu konudaki yazılımlarınada ihtiyaç duymamaktayız. Linux bunu kendi yeteneği ile yapabilmektedir. Nasıl yapılır onu inceleyelim.

Bonding modülü Linux işletim sistemi çekirdeği desteği ile gelir. Ethernet kartı standartı olarak IEEE 802 kullanılır. Bonding modülünün 6 farklı şekilde çalışma yapısı bulunur.

mode=0 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 Aktif-yedek mantığı ile çalışır. Sadece bir arayüz aktiftir. Diğerleri sadece ve sadece asıl olan çalışmaz ise devreye girer. Hata toleransı sağlar.

mode=2 [(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 çeşididir. Tüm paketleri tüm arayüzlerden gönderir. Hata toleransı sağlar.

mode=4 IEEE 802.3ad Dynamic link aggregation. Belirtilen standarda göre çalışır. Çalışması için sürücülerinin ethtool desteğinin olması gerekir. Ayrıca anahtarlama cihazı üzerinde de 802.3ad ayarlarının yapılması gerekir.

mode=5 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.

mode=6 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.

Bu seçeneklerin uygulanacağı yer bond0 dosyası oluşturulurken girilen satırlardan BONDING_OPTS=”mode=1 miimon=100″ satırıdır. Burada mode=x olacak yere çalıştırmak istediğimiz bonding modunu yazmalıyız.

1. Şimdi yapılandırmaya geçelim; Öncelikle “NetworkManager” servisimizi durduruyoruz. “Bonding” yapılandırmamızı manuel bir araç olmadan elle yapacağımız için ve ayarlarımızın sunucumuzu yeniden başlattığımızda silinmemsi için servisimizin durdurulması gerekmektedir.

-- Servisimizi durduruyoruz.

# service NetworkManager stop

-- Sunucumuzu yeniden başlattığımızda servisimizin yeniden başlamaması için
kapalı duruma getiriyoruz.

# chkconfig NetworkManager off


2.Bond işlemi için bir bond0 adında sanal interface oluşturuyoruz. Bond yapılandırılması yapılmadan önce ağ kartlarına atanmış bir TCP/IP adresi varsa bunlar temizlenmelidir. İşletim sisteminde “root” kullanıcısı ile oturum açıyoruz.

# vim /etc/sysconfig/network-scripts/ifcfg-bond0

-- dosyasına aşağıdaki satırlarını giriyoruz. 
Verilen IP Adresi, Netmask ve DNS gibi değerler örnek
olarak yazılmıştır. Bunları kendi ağ ayarlarınıza göre
düzenlemelisiniz.

DEVICE="bond0"
IPADDR=192.168.71.128
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=192.168.71.1
DNS2=192.168.71.2
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=1 miimon=100"

3. Oluşturduğumuz “bond0” interface dahil edeceğimiz bond üyesi kartları yapılandırıyoruz. Bu işlemi “eth0” gibi “eth1”, “eth2” gibi diğer kartlarımızda da aşağıdaki gibi yapmalıyız.

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

-- Dosyasına aşağıdaki aşağıdaki satırları giriyoruz. "HWADDR" değişkeni yerine
"MAC" adresini yazıyoruz. Bu değerleri "eth1", "eth2" gibi ağ kartlarımızda
aşağıdaki gibi ayarlıyoruz.

HWADDR=XX:XX:XX:XX:XX:XX
DEVICE="eth0"
NM_CONTROLLED=no
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

4. Bond interface kartı için alias ve diğer ayarları yazacağımız conf dosyasını oluşturuyoruz.

# vim /etc/modprobe.d/bonding.conf
-- Dosyasına aşağıdaki satırları giriyoruz.

alias bond0 bonding
alias netdev-bond0 bonding

5. Bonding işleminin aktif olabilmesi için modülün kernele yüklenmesini sağlıyoruz.

# modprobe bonding
# service network restart

6. Bu işlemler tamamlandıktan sonra bonding işleminde oluşan default gateway sorununu “Static Route” parametresi ekleyerek çözüyoruz. Genelde ortamlarda birden fazla Vlan var ve her Vlanda tanımlanmış farklı bir gateway varsa sunucuya kendi Vlan’ı dışındanda makinelerin erişebilmesi için aşağıdaki ayarları giriyoruz. Ayrıca isim çözümlemesi için “resolv.conf” dosyamızda gerekli düzenlemeleri yapıyoruz.

-- Eğer olursa "gateway" sorunu için aşağıdaki işlemleri uyguluyoruz.

# vim /etc/rc.d/rc.local
-- Dosyasına aşağıdaki satırları giriyoruz.
"gw" olarak "VLan" ınızda bulunan Default Gateway adresi girilmelidir.

/sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.2.1

-- İsim çözümlemesi için gerekli DNS sunucu düzenlemelerimizi yapıyoruz.

# vim /etc/resolv.conf

DNS1=192.168.2.1
DNS2=192.168.2.2

7. Tavsiye olarak bu işlemlerden sonra yeniden başlatma önerilir.

# shutdown -r now

8. “/proc/net/bonding/bond0” dosyasının çıktısı (bonding durumunu) aşağıdaki komut ile öğrenilebilir.

# cat /proc/net/bonding/bond0
veya
# less /proc/net/bonding/bond0

9. Bonding durumunu anlık görüntülemek için aşağıdaki komut uygulanır. 

# watch cat /proc/net/bonding/bond0

Bonding yapılandırmamız kullanıma hazır. Oracle Enterprise Linux 6 Update 4 için test edilmiştir. Tüm Linux versiyonlarında özellikle Red Hat türevlerinde aynı ayarlar geçerlidir.

Başka bir makalede görüşmek üzere…

Bu yazı Unix / Linux kategorisine gönderilmiş ve , , , , , , , , , , , , , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.