Bugünkü yazımda, Linux İşletim Sisteminde Network yedekliliği (redundant links, fault tolerance) olarak bilinen Linux Bonding konusu hakkında bilgilendirme yapacağım.
Bonding Linux için kullanılan terimdir. Diğer işletim sistemlerinde Teaming (Windows), Network dünyasındaTrunking olarak bilinmektedir.
Bonding birden fazla Network interface (NIC)’in bir mantıksal gurup olarak tek bir interface olarak kullanablmemize olanak sağlar.
Bonding yedeklilik sağladığı gibi, band genişliğini (load balancing networks) artırmak için de kullanılabilmektedir.
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.
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 7 farklı şekilde çalışma yapısı bulunur, Kullanılan Mod’a bağlı olarak Bonding Layer 2 veya Layer 3 OSI Network katmanında kullanılmakta.
• mode = 0 (balance-rr) : 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-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 (balance-xor) : XOR formüle dayalı olarak paketleri iletir. Bu modda paketler kaynak MAC adresi ve hedef MAC adresi ile handle edilir. Tüm hedef MAC adresleri için aynı aynı istemciyi seçer ve yük dengeleme ve hata toleransı sağlar.
• mode = 3 (broadcast) : Bu mod ile tüm interfaceler üzerinden paketler iletilir. Bu mod genelde sık kullanılmaz (sadece belirli bir amaçlar için kullanılır). Diğer modlar gibi hata tolefansı sağlamaktadır.
• mode = 4 (802.3ad) : 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 (balance-tlb) : 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 (balance-alb) : 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.
Şimdi bir örnek yapalım; Örneğimizi, Oracle Enterprise Linux 6.4 üzerinde iki interface eth0 ev eth1’i bond0 olarak yapılandıracağız.
1.) Ö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 silinmemesi için servisimizin durdurulması gerekmektedir.
[root@localhost ~]# /etc/init.d/NetworkManager stop Stopping NetworkManager daemon: [ OK ]
2.) Sunucumuzu yeniden başlattığımızda servisimizin yeniden başlamaması için kapalı duruma getiriyoruz.
[root@localhost ~]# chkconfig NetworkManager off
3.) 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.
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.
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE="bond0" IPADDR=192.168.100.105 NETMASK=255.255.255.0 GATEWAY=192.168.100.1 DNS1=192.168.100.1 ONBOOT=yes BOOTPROTO=none USERCTL=no BONDING_OPTS="mode=1 miimon=100"
• miimon = Ne kadar milisaniyede interface durumunu kontrol etsin.
• mode = Bond interface’in çalışma prensibi
4.) Oluşturduğumuz “bond0” interface’e 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.
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:1B:1E:97 BOOTPROTO=none ONBOOT=yes NM_CONTROLLED=no USERCTL=no MASTER=bond0 SLAVE=yes
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 HWADDR=00:0C:29:1B:1E:A1 BOOTPROTO=none ONBOOT=yes NM_CONTROLLED=no USERCTL=no MASTER=bond0 SLAVE=yes
ifcfg-* dosyası içinde kısaca kullanabileceğimiz parametreleri tanıyacak olursak;
• DEVICE : Sürücüye vereceğimiz isim.
• HWADDR : Ethernet kartının mac adresi
• 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.
• NETMASK : Ağ maskemiz.
• USERCTL : root kullanıcısı dışındaki kullanıcılar etherneti kullanabilsinminin 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.
5.) Bonding ayarlarının yapmak için bond interface kartının alias ve diğer ayarları yazacağımız conf dosyasını oluşturuyoruz.
[root@localhost ~]# cat /etc/modprobe.d/bonding.conf alias bond0 bonding alias netdev-bond0 bonding
• bond0 = Oluşturduğumuz bond interface ismi.
6.) Bonding işleminin aktif olabilmesi için modülün kernele yüklenmesini sağlıyoruz.
[root@localhost ~]# modprobe bonding
7.) Yapmış olduğumuz ayarların aktif edilebilmesi için; network servisinin restart edilesi gerekektedir.
service network restart
8.) ifconfig ile baktığımızda gördüğünüz gibi bond0’ın geldiğini görürüz.
[root@localhost ~]# ifconfig bond0 Link encap:Ethernet HWaddr 00:0C:29:1B:1E:97 inet addr:192.168.100.105 Bcast:192.168.100.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe1b:1e97/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:506 errors:0 dropped:45 overruns:0 frame:0 TX packets:362 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:48649 (47.5 KiB) TX bytes:44635 (43.5 KiB) eth0 Link encap:Ethernet HWaddr 00:0C:29:1B:1E:97 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:414 errors:0 dropped:0 overruns:0 frame:0 TX packets:347 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:38412 (37.5 KiB) TX bytes:42453 (41.4 KiB) eth1 Link encap:Ethernet HWaddr 00:0C:29:1B:1E:97 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:92 errors:0 dropped:45 overruns:0 frame:0 TX packets:17 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10237 (9.9 KiB) TX bytes:2570 (2.5 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:78 errors:0 dropped:0 overruns:0 frame:0 TX packets:78 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6180 (6.0 KiB) TX bytes:6180 (6.0 KiB)
9. “/proc/net/bonding/bond0” dosyasının çıktısı (bonding durumunu) aşağıdaki komut ile öğrenilebilir.
[root@localhost ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:1b:1e:97 Slave queue ID: 0 Slave Interface: eth1 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:1b:1e:a1 Slave queue ID: 0
[root@localhost ~]# less /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:1b:1e:97 Slave queue ID: 0 Slave Interface: eth1 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:1b:1e:a1 Slave queue ID: 0
10.) Bonding durumunu anlık görüntülemek için aşağıdaki komut uygulanır.
watch cat /proc/net/bonding/bond0
NOT : 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.
# vim /etc/rc.d/rc.local /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.2.1
vim /etc/resolv.conf DNS1=192.168.2.1 DNS2=192.168.2.2
shutdown -r now
Referanslar;
http://ensunucu.com/?p=68
http://www.koraykey.com/?p=298
https://www.brennan.id.au/04-Network_Configuration.html
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/ch-configure_network_bonding
İyi Çalışmalar…
Mustafa Bektaş Tepe
8,344 total views, 2 views today