Linux dünyasında ağ yedekliliği ve ağ üzerindeki yük paylaşımı (load balancing) BOND olarak tabir edilen bir mekanizma ile sağlanır. BOND sunucu sistemi üzerinde bulunan birden fazla ağ kartının yedeklilik ve yük dağılımı için belirlenen tek bir ağ kartı gibi davranması esasına dayanır. Bunun için öncelikle BOND'un kullanacağı sanal bir arayüzünün oluşturumlası gerekmektedir.
vi /etc/sysconfig/network-scripts/ifcfg-bond0
bu komut ile metin tabanlı bir dosya oluşturup sanal ağ arayüzü için gerekli tanımlama bilgileri girilmelidir.
DEVICE=bond0
IPADDR=192.168.1.2
NETWORK=192.168.1.0
NETMASK=255.255.255.0
USERCTL=no
BOOTPROTO=static
ONBOOT=yes
Buna göre BOND'a dahil edilecek tüm ağ kartlarının kullanacağı ortak IP adresi "192.168.1.2" olarak ayarlanmış ve sanal olarak oluşturulan"bond0" aygıtına atanmıştır. Bundan sonra BOND yapısında kullanılacak arayüzlerin konfigürasyonlarının düzenlenmesi gerekmektedir. Bunun için yapıya dahil olan bütün kartların konfigürasyon dosyaları aşağıdaki gibi düzenlenmelidir.
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
Burada görüldüğü gibi her iki ağ kartı içinde "MASTER" olarak oluşturduğumuz "bond0" sanal kartı gösterip bu kartları da "SLAVE" durumuna getirdik. Yapılacak son iş ise BOND sürücüsünün Linux çekirdeği tarafından kullanılmasını sağlamaktır. bunun için aşağıdaki komutla modeprobe dosyası düzenlelebilir.
vi /etc/modprobe.conf
Bu dosyaya yeni oluşturduğmuz bond0 sanal arayüzü ve özellikleri belirtilmelidir.
alias bond0 bonding
options bond0 mode=1
options bond0 mode=1
Yukarıda görüldüğü gibi çekirdeğe bond0'ın bir BOND arayüzü olduğu gösterilir. "Options" da ise bond0 ın hangi parametrelere göre çalışacağı gösterilir. Bu paramatreler temel olarak aşağıdaki değerleri alabilir.
mode=0
Bu mod "round robin " metodunu kullanır. Yani bond0 arayüzüne gelen trafik bu arayüze atanan ağ kartlarından sırası ile gönderilir. Örneğin 4 ağ kartının bu arayüze dahil edildiğini düşünelim. buna göre çekirdek gönderilecek 4 paket sırasıyla bu kartlara iletilir. Böylelikle toplam bant genişliği (bant-width) 4xherbir ağ kartının bant genişliği olacaktır. Ancak burada dikkat edilmesi gereken konu bu ağ kartlarının bağlı bulunduğu "Switch" üzerinde de gerekli tanımlamalarının yapılmış olması gerekir. Bu tanımlamaya Cisco Switch'lerde "Etherchannel" denilir. Temel olarak switch üzerindeki bağlantı portlarını gruplayarak "span-tree" den kaçınmaktır. BOND mekanizması dahil olan tüm ağ kartları için aynı MAC adresini kullanacağı için Switch bu bağlantıları "span-tree" olarak algılayacak ve bu bağlantı portlarını bloklayacaktır. Bu nedenle "etherchannel" yapılarak bu durumdan kaçınılabilir.
Bu modu kullanırken göz önüne alınacak başka bir husus ise gönderilen paketlerin karşı tarafa ulaşmasıyla ilgilidir. Paketler sırayla birden fazla karttan gönderildiğinde hedef sunucu yada sunuculara ulaşması herzaman aynı sıryala gerçekleşmeyebilir. Burada kullanılan donanımlar vs. den dolayı oluşan gecikmeler paketlerdeki sıranın bozlumasına ve "out-off-order" oluşmasına neden olur. "out-off-order" paketler hedef sistemde eksik paketlerin beklenmesi ve yeniden oluşturtulması gibi süreçlerden dolayı belirli bir performans kaybına neden olacaktır. Bu nedenle mode 0 genellikle "back to back" yani ağ üzerinden haberleşecek sistemlerin arada bir ağ cihazı olmadan direk olarak birbirine bağlanarak oluşturulan ağlarda kullanılması tavsiye edilir.
mode=1
Bu mode "aktif-backu"p modudur. Asıl amaç yazının başında belirttiğimiz ağ kartı yedekliliğinin sağlanmasıdır. Bu mode da aynı anda yalnızca tek bir ağ kartı aktif olarak kullanılır. Bu nedenle Switch(ler) üzerinde herhangi bir etherchannel konfigürasyonuna gerek yoktur. Aktif kullanılan ağ kartında bir hata oluşması durumunda bir sonraki ağ kartı devreye girerek bağlantının devamı sağlanır. Burada switch üzerinde dikkat edilecek tek nokta eğer VLAN yapısı kullanılıyorsa bu ağ kartların bağlı olduğu porlar aynı VLAN'a alınmaldır.
mode=2
bu mode "balance-xor" modudur. Bu modda hedef MAC adresi ile kaynak MAC adresi mantıksal XOR işlemine tabi turulur ve bu değer ağ kartı sayısı ile mod işlemine tabi tutulur. Çıkan sonuca göre bir ağ kartı seçilir ve paket bu karttan gönderilir. Switch üzerinde "etherchannel" konfigürasonu yapmak gerekir. Genelde çok fazla kayanktan gelen talpelere cevap veren sunucular için tercih edilir. (Örneğin uygulama sunucuları).
Bununla beraber BOND için kullanılan birçok mod mevcuttur. detayları aşağıdaki bağlantıdan incelenebilir.
http://www.cyberciti.biz/howto/question/static/linux-ethernet-bonding-driver-howto.php#section_4
Tüm konfigürasyon tamamlandıktan sonra artık BOND aktif edilebilir. Bunun için öncelikle çekirdeğe "bonding " sürücüsünün yüklenmesi gerekmektedir.
bond0 Link encap:Ethernet HWaddr B8:AC:6F:96:2A:F0
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:48735527 errors:0 dropped:0 overruns:0 frame:0
TX packets:27641371 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:324733191 (309.6 MiB) TX bytes:3555399758 (3.3 GiB)
eth0 Link encap:Ethernet HWaddr B8:AC:6F:96:2A:F0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:48706477 errors:0 dropped:0 overruns:0 frame:0
TX packets:27641371 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:321519068 (306.6 MiB) TX bytes:3555399758 (3.3 GiB)
Interrupt:106 Memory:d6000000-d6012800
eth2 Link encap:Ethernet HWaddr B8:AC:6F:96:2A:F0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:29050 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3214123 (3.0 MiB) TX bytes:0 (0.0 b)
Interrupt:122 Memory:da000000-da012800
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:163422 errors:0 dropped:0 overruns:0 frame:0
TX packets:163422 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11442666 (10.9 MiB) TX bytes:11442666 (10.9 MiB)
Burada görüleceği gibi her iki ağ kartıda bond0 sanal kartının MAC adresini kullanmaktadır. Bunun dışında aşağıdaki komut da kullanılabilir
mode=0
Bu mod "round robin " metodunu kullanır. Yani bond0 arayüzüne gelen trafik bu arayüze atanan ağ kartlarından sırası ile gönderilir. Örneğin 4 ağ kartının bu arayüze dahil edildiğini düşünelim. buna göre çekirdek gönderilecek 4 paket sırasıyla bu kartlara iletilir. Böylelikle toplam bant genişliği (bant-width) 4xherbir ağ kartının bant genişliği olacaktır. Ancak burada dikkat edilmesi gereken konu bu ağ kartlarının bağlı bulunduğu "Switch" üzerinde de gerekli tanımlamalarının yapılmış olması gerekir. Bu tanımlamaya Cisco Switch'lerde "Etherchannel" denilir. Temel olarak switch üzerindeki bağlantı portlarını gruplayarak "span-tree" den kaçınmaktır. BOND mekanizması dahil olan tüm ağ kartları için aynı MAC adresini kullanacağı için Switch bu bağlantıları "span-tree" olarak algılayacak ve bu bağlantı portlarını bloklayacaktır. Bu nedenle "etherchannel" yapılarak bu durumdan kaçınılabilir.
Bu modu kullanırken göz önüne alınacak başka bir husus ise gönderilen paketlerin karşı tarafa ulaşmasıyla ilgilidir. Paketler sırayla birden fazla karttan gönderildiğinde hedef sunucu yada sunuculara ulaşması herzaman aynı sıryala gerçekleşmeyebilir. Burada kullanılan donanımlar vs. den dolayı oluşan gecikmeler paketlerdeki sıranın bozlumasına ve "out-off-order" oluşmasına neden olur. "out-off-order" paketler hedef sistemde eksik paketlerin beklenmesi ve yeniden oluşturtulması gibi süreçlerden dolayı belirli bir performans kaybına neden olacaktır. Bu nedenle mode 0 genellikle "back to back" yani ağ üzerinden haberleşecek sistemlerin arada bir ağ cihazı olmadan direk olarak birbirine bağlanarak oluşturulan ağlarda kullanılması tavsiye edilir.
mode=1
Bu mode "aktif-backu"p modudur. Asıl amaç yazının başında belirttiğimiz ağ kartı yedekliliğinin sağlanmasıdır. Bu mode da aynı anda yalnızca tek bir ağ kartı aktif olarak kullanılır. Bu nedenle Switch(ler) üzerinde herhangi bir etherchannel konfigürasyonuna gerek yoktur. Aktif kullanılan ağ kartında bir hata oluşması durumunda bir sonraki ağ kartı devreye girerek bağlantının devamı sağlanır. Burada switch üzerinde dikkat edilecek tek nokta eğer VLAN yapısı kullanılıyorsa bu ağ kartların bağlı olduğu porlar aynı VLAN'a alınmaldır.
mode=2
bu mode "balance-xor" modudur. Bu modda hedef MAC adresi ile kaynak MAC adresi mantıksal XOR işlemine tabi turulur ve bu değer ağ kartı sayısı ile mod işlemine tabi tutulur. Çıkan sonuca göre bir ağ kartı seçilir ve paket bu karttan gönderilir. Switch üzerinde "etherchannel" konfigürasonu yapmak gerekir. Genelde çok fazla kayanktan gelen talpelere cevap veren sunucular için tercih edilir. (Örneğin uygulama sunucuları).
Bununla beraber BOND için kullanılan birçok mod mevcuttur. detayları aşağıdaki bağlantıdan incelenebilir.
http://www.cyberciti.biz/howto/question/static/linux-ethernet-bonding-driver-howto.php#section_4
Tüm konfigürasyon tamamlandıktan sonra artık BOND aktif edilebilir. Bunun için öncelikle çekirdeğe "bonding " sürücüsünün yüklenmesi gerekmektedir.
modeprobe bonding
sürücü yükleme işleminden sonra aşağıdaki komut yazılarak "network" servisi yeniden başlatılmaldır.
service network restart
Bu işlemde tamamlandıktan sonra aşağıdaki komutla yapılan konfigürasyon kontrol edilir.
ifconfig
bond0 Link encap:Ethernet HWaddr B8:AC:6F:96:2A:F0
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:48735527 errors:0 dropped:0 overruns:0 frame:0
TX packets:27641371 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:324733191 (309.6 MiB) TX bytes:3555399758 (3.3 GiB)
eth0 Link encap:Ethernet HWaddr B8:AC:6F:96:2A:F0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:48706477 errors:0 dropped:0 overruns:0 frame:0
TX packets:27641371 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:321519068 (306.6 MiB) TX bytes:3555399758 (3.3 GiB)
Interrupt:106 Memory:d6000000-d6012800
eth2 Link encap:Ethernet HWaddr B8:AC:6F:96:2A:F0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:29050 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3214123 (3.0 MiB) TX bytes:0 (0.0 b)
Interrupt:122 Memory:da000000-da012800
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:163422 errors:0 dropped:0 overruns:0 frame:0
TX packets:163422 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11442666 (10.9 MiB) TX bytes:11442666 (10.9 MiB)
Burada görüleceği gibi her iki ağ kartıda bond0 sanal kartının MAC adresini kullanmaktadır. Bunun dışında aşağıdaki komut da kullanılabilir
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)
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: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f0
Slave Interface: eth2
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f4
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)
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: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f0
Slave Interface: eth2
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f4
Oluşturulan yedekli yapının test eilmesi için yapılacak en basit işlem o an aktif olan ağ kartının network kablosunun çekilmesidir. Eğer tüm bağlantılar doğruysa ağ trafiği hiç etkilenmeyecektir. Kablo çekildikten sonraki durumu kontrol etmek için;
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: down
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f0
Slave Interface: eth2
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f4
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: down
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f0
Slave Interface: eth2
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ac:6f:96:2a:f4
Hiç yorum yok:
Yorum Gönder