Kesintisizlik 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. Peki biz bu işi Linux sunucularda nasıl yapabiliriz? Ya da yapabilirmiyiz?
Elbette yapabiliriz. 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.
Benim test ortamımda 1 adet CentOS 6.2 linux sunucu mevcut. Bu sunucu üzerinde 4 adet NIC mevcut. Bu NIC kartların nasıl bir ethernet altında toplanacağını ve nasıl HA çalıştığını görelim.
NIC kartlarımızı bir inceleyelim,
# ifconfig
Bu ethernet kartlarımdan birine 192.168.1.30 olarak ip verdim. Diğer 3 ethernet kartının DHCP’den ip almasını sağladım. Ben buradaki tüm ethernetleri tek bir etherhernet teaming altında toplayacağım. Bu işlem için bir adet bond0 aygıtı tanımlamam gerekiyor. Hemen gerekli lokasyona giderek dosyayı oluşturalım. Bu dosya normalde ortalıkta yoktur. Biz oluşturacağız.
# cd /etc/sysconfig/network-scripts
# nano ifcfg-bond0
Ve içeriğini aşağıdaki gibi yazıyoruz.
DEVICE=bond0
IPADDR=192.168.1.30
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
BONDING_OPTS="miimon=100 mode=balance-alb"
BOOTPROTO=none
TYPE=Ethernet
ONBOOT=yes
IPV6INIT=no
Daha sonra ctrl+x ve y diyerek çıkıyoruz. Bu işlem sonrası bonding (bağ) device tanımlanmış oluyor. Şimdi ethernet kartlarının modifikasyonu nu yapıyoruz. Bu işlemi 4 device içinde yapmak gerekiyor.
# nano /etc/sysconfig/network-scripts/ifcfg-eth0
Dosyanın içeriğini aşağıdaki gibi değiştiriyoruz. Burada mac adresine dokunmuyoruz. 4ncü satırdan sonrasını silerek aşağıdaki bold şekilde yazılı olan ilave satırları yazıyoruz.
DEVICE=eth0
HWADDR=00:0c:29:49:7b:9a
NM_CONTROLLED=yes
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
TYPE=Ethernet
Dosyanın modifiye olmuş son hali yukarıdaki gibi olacaktır. Gördüğünüz gibi ip adresi vermedim. Çünkü ip’yi bond0 device’ına verdim. Aynı işlemi diğer 3 adet ethernet kartınada vereceğiz. İçerikleri aşağıdaki gibi olacak,
# nano /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=00:0C:29:49:7B:A4
NM_CONTROLLED=yes
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
TYPE=Ethernet
# nano /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
HWADDR=00:0C:29:49:7B:AE
NM_CONTROLLED=yes
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
TYPE=Ethernet
# nano /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
HWADDR=00:0C:29:49:7B:B8
NM_CONTROLLED=yes
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
TYPE=Ethernet
Gördüğünüz üzere dosyaların içindeki bold kısımları ilave ederek diğer bölümleri sildim. Bu işlem sonrasında ortamımız hazır olacaktır. Şimdi network servisini restart edelim.
#service network restart
Bu işlem sonunda varolan bağlantılar kesilecektir. Sunucuyu restart etmenizi şiddetle öneririm. J Şimdi ifconfig komutu ile durumu inceleyelim.
#ifconfig
Yukarıdaki screenshotta göreceğiniz üzere bond0 device dışında hiçbir ethernet kartında ip yok. Ama bağlantıda sıkıntı yaşamıyoruz. Çünkü 4 adet ethernet kartımız bond0 aygıtı altında toplandı. Şimdi test edelim. Hemen ilk 3 device’ı disable edelim. Göreceksiniz bağlantınız kesilmeyecek.
# ifdown eth0
# ifdown eth1
# ifdown eth2
İlk 3 aygıtı disable ettikten sonra ifconfig komutuna, ping komutuna ve networksel işlemlere sunucu cevap verecektir. Gördüğünüz gibi sadece eth3 ve bond0 device ayakta. bond0 device eth3 üzerinden isteklere cevap veriyor. Ve göreceğiniz üzere eth0, eth1 ve eth2 ifconfig listesinde yoklar. Şimdi enable edelim ve inceleyelim
# ifup eth0
# ifup eth1
# ifup eth2
Bütün device’lar geri geldi. Nic teaming kullanıma hazır. Bu aşamadan sonra biraz daha detaylandırmak gerekirse 2nci bir bonding device tanımlanarak istediğiniz ethernetleri bu bonding altında toplayabilirsiniz. Mesela iSCSI networkünü ikinci teaming’de normal network’ü ilk teaming’te kullanabilirsiniz.
Yapılacak işlem çok basit. bond0 gibi bond1 device yazacağız. Buna bağlanması gereken ethernetlerinin içinde değiştirdiğimiz MASTER=bond0‘u MASTER=bond1 yapacağız. Dolayısı ile bond1 ethernetleri 2nci bonding (bağ) içinde yer alacaklar.
Kolay gelsin.