Ağ Yük Dengelemesi (Network Load Balancing - NLB) üyeler arasında IP trafiğini bölüştürerek, her üyesine tek başlarına bulundukları durumdan daha az ağ yükü binmesini sağlayan bir teknolojidir. Büyük ağ yapılarında Web sunucularının performansı düştüğünde, "proxy" sunucusu isteklere yeterince hızlı cevap veremediğinde, terminal servisi sunucusu istemci yoğunluğundan yavaşlamaya başladığında NLB yapma gereği doğar. NLB birkaç sunucuyu bir araya getirip bunlardan bir NLB kümesi (cluster) oluşturur. Küme, ortak uygulamaları birlikte çalıştırıp, uygulamaya ya da istemciye tek bir sistem imajı üreten bilgisayar grubudur. Bilgisayarlar birbirine donanımsal ve yazılımsal olarak bağlıdır. Bu bağlantılar bilgisayarlara hata toleransı ve ağ yük paylaşımı olanağı sağlar.
Yük dengeleme çözümleri 4 ana kategoride toplanır;
Round Robin DNS: DNS tabanlı bu çözüm kısıtlı ve statik bir yük dağılımı sağlar. Örneğin, itu.edu.tr etki alanı altında bulunan 'www' kaydı için DNS'de aşağıdaki gibi 3 farklı A kaydı oluşturulmuş olsun:
www 160.75.2.10 www 160.75.2.11 www 160.75.2.12
DNS sunucu kendisine www.itu.edu.tr ismini çözmek için yollanan sorgulardan ilkine cevap olarak sırasıyla 160.75.2.10, 160.75.2.11 ve 160.75.2.12 ‘yi yollar ve bu cevabı alan istemci ilk olarak 160.75.2.10 IP adresine bağlanır. Bir sonraki sorgu için DNS sunucu 160.75.2.11, 160.75.2.12 ve 160.75.2.10 cevabını yollar ve bu cevabı alan istemci ilk olarak 192.168.1.11 IP adresine sahip Web sunucusuna bağlanmaya çalışır. Bu yapı her ne kadar Web sunucuları arasında yük dağılımını sağlayan bir yapı olarak görülse bile aslında tam manasıyla Web sunucuları arasında bir yük dağılımı sağlamaz; çünkü 192.168.1.10 IP adresine bağlanan bir istemcinin bu Web sunucusuna yollayacağı istek sayısı ile 192.168.1.11 IP adresine sahip Web sunucusuna bağlanan istemcinin bu Web sunucusuna yollayacağı istek sayısı birbirinden farklı olabilir. Ayrıca DNS’e girilen ve istemcilere cevap olarak yollanan IP adreslerinden herhangi birisine sahip bir Web sunucusunun hizmet veremediği bir durumunda kendisine cevap olarak dönen listedeki sıralamanın başında çöken Web sunucusunun IP adresinin bulunduğu bir istemci belirli bir süre hizmet alamayacaktır. İstemcilerin hizmet veremeyen bir Web Server’a bağlantı isteği yollamalarını önlemek için DNS’teki bu A kaydını silmek gerekecektir. Bu durum da "Round Robin DNS" yapısının statik olduğunu gösterir.
Hardware-Based Load Balancing (Donanım Bazlı Ağ Yükü Dengeleme): Belli donanımlar kullanılarak gerçekleştirilen çözümdür. Bu yapıda kümenin IP adresi donanıma atanır ve donanım kendisine gelen istekleri tipik bir NAT (Network Adress Translation - Ağ Adres Çevrimi) işleminden geçirerek kendisine bağlı sunuculara kendi üzerinde tanımlı kurallar çerçevesinde iletir.
Dispatcher Software Load Balancing (Yazılım Bazlı Ağ Yükü Dengeleme): Bu yapı, yukarıda anlatılan "Hardware-Based Load Balancing" ile çok benzerdir. Tek farkı yük dağılımı için bir donanım değil de bir yazılım kullanılmasıdır. Bu yapıda yük dağılım işleminin performansı, yazılımın çalıştığı bilgisayarın performansıyla doğru orantılıdır.
Network Load Balancing (Ağ Yükü Dengeleme): Yazılım temelli bu çözüm herhangi bir donanıma ya da üçüncü parti bir yazılıma ihtiyaç duymadan çalıştırılabilir. Bu dökümanda bu yapı üzerinde durulacaktır.
Ağ Yükü Dengeleme (Network Load Balancing - NLB); Windows 2000 ve 2003 Server ailesi işletim sistemlerinin bir parçası olarak Microsoft’un sağladığı bir teknolojidir.
Windows Server ailesindeki Network Load Balancing servisini kullanarak kümeleme (clustering) sayesinde herhangi bir ağdaki Web sunucusu, FTP sunucusu, firewall sunucusu, proxy sunucusu, VPN sunucusu, media sunucusu, terminal sunucusu gibi sunucuların istemcilere kesintisiz ve kabul edilebilir bir kalitede hizmet vermesini sağlanabilir.
NLB özelliğini destekleyen Windows Server versiyonları:
• Windows 2000 Advanced Server
• Windows 2000 Datacenter Server
• Windows Server 2003 Web Edition
• Windows Server 2003 Server Edition
• Windows Server 2003 Enterprise Edition
• Windows Server 2003 Datacenter Edition
Temel olarak, NLB açıldığında, NLB sürücüsü NIC sürücüsü ile IP protokolü arasına yerleşir ve tüm NLB kümesi üyelerine gelen her paketi alıp inceler. Paket kablodan kümeye geldiğinde her nod paketi alır, inceler ve küme çapında belirtilmiş kurallara göre paketi üst katmanda bulunan IP protokolüne iletir veya paket daha NLB sürücüsündeyken dışarı atılır. Böylece trafik nodlar arasında paylaştırılır. Kısaca tüm nodlar kümeye gelen trafiği alır; ama bazıları cevap verir.
NLB kümeleri iki farklı modda çalışabilir. Birincisi, aynı zamanda varsayılan mod olan "unicast mod"’dur. "Unicast mod"'da kümeyi oluşturan nodlarca kullanılan bir tek sanal MAC adresi vardır. Bu adres daima 02-BF ile başlar. Tüm küme üyelerinin bu tek adresi kullanması, onların bu adresi kullanan (NLB sürücüsü çalışan) ağ kartı üzerinden görüşebilmelerini engeller. Örneğin; nod A, nod B’ye bir paket gönderirken hedef ve kaynak MAC adreslerini aynı yazar. Bu paketi alan nod B kaynak MAC adresi ile paketin hedefi olan kendi MAC adresini karşılaştırınca bunların aynı olduğunu görüp bir hata oluştuğunu düşünerek paketi atar. Sonuç olarak "unicast mod" çalışan bir NLB kümesi üyeleri NLB çalıştıran ağ kartı üzerinden birbirleriyle görüşemezler. Bu sorunu ortadan kaldırmak için iki yöntem vardır. Birincisi nodlara ikinci bir ağ kartı takmaktır. İkinci ağ kartı, NLB kümesi ile aynı ağa veya farklı ağa bağlı olabilir. Nodlar arasında ilave bir bağlantı sağlaması yeterlidir. İkinci çözüm ise ikinci NLB küme modu olan "multicast mod"'u kullanmaktır. "Multicast mod"'da NLB küme üyeleri hem sanal MAC adresini hem de kendi MAC adreslerini kullanırlar. Bu modda paylaşılan MAC adresi (sanal MAC) daima 03-BF ile başlar. Üyeler bu modda NLB kurulu ve çalışan ağ kartı üzerinden birbirleri ile görüşebilirler. Bu küme üyelerinde tek ağ kartı olduğu durumlarda tavsiye edilen küme modudur.
NLB küme üyelerinin birbirleri ile sürekli haberleşmek zorundadır. Yakınsama (Convergence), NLB küme durumunun belirlenmesi ve yükün dağıtılması sürecidir. Kısacası NLB algoritması nod sayısı, varsa belirlenen port kuralları ve küme IP’lerini göz önüne alarak bir hesap yapar, bu hesap sonucuna göre üyelerin küme IP’sine gelen trafiği kabul ya da reddetmesini sağlar.
NLB küme üyeleri için yakınsama süresi 3 saniyedir. Yani bir NLB küme üyeleri devre dışı kaldığında, diğer üyelerin bunu farkettikten sonra tekrar yük dağılımını düzenlemesi 3 saniye sürer. Örneğin, üç üyeli bir NLB kümesine gelen trafik 33% olarak paylaştırılırken, bir nod devre dışı kalınca 3 saniyede yakınsanmış olur ve trafiği 50% olarak paylaştırmaya başlar.
NLB ile ilgili diğer bir kavram “Heartbeat”dir. "Heartbeat" bir NLB üyesinin diğer üyelere devrede olduğunu söyleme sistemidir. Bu sayede birbirlerinin durumundan haberdar olurlar. NLB kümesine bir nod eklenince, bir nod devre dışı kalınca veya bir nod yeniden devreye girince bunu tesbit etmelerini sağlayan Heartbeat paketleridir. Heartbeat NLB çalışır durumdaki ağ kartı üzerinden yapılan bir broadcast'tir. Heartbeat NLB üyesinin üzerinde bulunan ilave ağ kartlarından yapılmaz. Her NLB küme üyesi 1,5 KB l'ik bu heartbeat mesajlarını saniyede bir kere gönderir. Bu gönderilme aralığı kayıt defterinden (registry) değiştirilebilir; fakat bu ayar tüm üyelerde aynı olmalıdır.
Varsayılan olarak bir nod arka arkaya 5 heartbeat kaçırırsa diğer NLB küme üyeleri o nodun kümeden düştüğüne karar verirler. Böylece yeni üye sayısı ile birlikte NLB algoritması yeniden çalışır, yakınsama başlar. Ne kadar heartbeat mesajı kaçtıktan sonra o nod devre dışı kabul edileceği de kayıt defterinde modifiye edilebilir (bu ayar da tüm üyelerde aynı olmalıdır).
Sonuç olarak, yeni bir nod eklenirse bunun tesbit edilip yükün tekrar dağıtılması 3 saniye sürer. Bir nod devre dışı kalırsa bunun diğer nodlarca farkedilmesi ve "convergence"’a başlanması için 5 saniye gereklidir (yani arka arkaya 5 heartbeat kaçırma). Convergence 3 saniye süreceği için yükün tekrar paylaştırılması toplam 8 saniye sürecektir.
NLB ile ilgili bir diğer önemli kavram ise "affinity" (eğilim) 'dir. Eğilim, NLB nin nasıl çalışacağıdır yani bir üye NLB kümesine gelen IP paketlerini kabul edilip edilmeyeceğini belirler. None, Single ve Class C olmak üzere 3 tip eğilim vardır. Affinity, None olarak ayarlanmışsa gelen paketler kaynak port ve kaynak IP bazında işlenir. Örneğin, Web sunucusu NLB kümesi oluşturmak isteniyorsa seçilecek olan eğilim bu olmalıdır. Böylece küme sanal IP adresine gelen trafik tüm üyelerce eşit şekilde paylaşılır. Bir istemci, örneğin bir Web sunucusu, NLB kümesinin sanal IP adresine geldiğinde küme üyelerinden biri tarafından kabul edilir. İstemci tekrar bağlandığında rasgele başka bir üye tarafından kabul edilir ve bağlantı kurulur.
Single Affinity ise kaynak IP adresine göre NLB kümesine gelen trafiği dağıtır. Örneğin, bir istemci iki terminal sunucudan oluşan bir NLB kümesinde sanal IP adresini yazarak bir terminal bağlantısı kurup, küme üyelerinden nod A tarafından kabul edildiğinde bu sunucu üzerinde kendisine ait oturumla çalışırken bağlantı kesilirse ve istemci tekrar bağlantı kurmak için NLB kümesine giderse NLB istemciyi belki nod B'ye yönlendirir. Bu durumda nod A'da bekleyen oturumuna (açık olan dokümanlar, programlar, vs.) ulaşamaz. Dolayısıyla istemcinin tekrar nod A'ya bağlanması için kullanılması gereken affinity Single’dır.
Son eğilim tipi olan Class C Affinity ise aslında Single Affinity benzeri bir NLB yöntemidir. Single Affinity'ye göre daha az kısıtlayıcıdır. Kısaca aynı C sınıfı aly ağdan gelen kullanıcılar hep aynı küme üyesi tarafından karşılanır. Fazla kullanışlı görünmemesine rağmen özellikler Proxy sunucuların yük paylaşımı için kullanılabilir.
Ağda yük paylaşımı yönetimi için temel olarak Network Load Balancing Manager snap-in’i kullanılır. Bununla birlikte ağ kartı özellikleri penceresinden de NLB ayarları yapılabilir. Yalnız NLB ayarları yapılırken Network Load Balancing Manager snap-in ve ağ kartı özelliklerinin birlikte kullanılması bazı tutarsız sonuçlara yol açabilir. Bunun dışında komut satırından NLB konfigürasyonu yapmak için wlbs ve nlb gibi araçlar da mevcuttur.
Ağ Yük Dengeleme ayarları üç temel bölümden oluşur;
Cluster Parameters (Küme Parametreleri)
Host Parameters (Sunucu Parametreleri)
Port Rules (Port Kuralları)
Bu ayarlardan Küme Parametreleri tüm NLB kümesi üyelerinde aynı olmalıdır. Cluster IP configuration kısmında NLB kümesine atanacak sanal IP adresi bunu alt ağ maskesi ile kümenin FQDN’i ve kümenin sanal MAC adresi ayarları bulunur.
Küme Operation Mod kısmında da küme çalışma mod’u ayarlanabilir. "Remote control" kısmında ise NLB kümesinin uzaktan yönetimine izin verilebilir ve bu uzaktan yönetim için şifre belirlenebilir.
Host Parameters sekmesinde küme üyelerinin herbiri için spesifik olan ayarlar yapılabilir. İlk değişken olan Priority 1-32 arası değerler alır ve Priority değeri 1 olan NLB kümesi üyesine "Default Host" denir. NLB kümesine bir "Port Rule" tarafından belirlenmemiş bir trafik ulaşırsa bunun kimin tarafından işleneceğini belirleyen bir değerdir. Aslında varsayılan olarak tüm portları kapsayan bir kural olduğu için Priority’nin değeri bu Port Rule silinmeden bir anlam taşımaz. Dedicated IP kısmında sadece o küme üyesine ait olacak ve ona ulaşılırken kullanılabilecek bir IP adresi belirtilebilir.
Host Parameters kısmındaki bir diğer ayar olan Initial Host State ise küme üyesi olan makina tekrar başladıktan sonra NLB servisinin durumunun ne olacağını belirtir. Varsayılan değer olan “Started” makina açıldığına NLB servisinin tekrar çalışmasını ve bu üyenin tekrar NLB kümesine dahil olmasını sağlar.
NLB ayarları içinde belki de en önemlisi olan "Port Rule", port kurallarının yapıldığı bölümdür. Daha önce bahsedilen "affinity" ayarlarının yapıldığı yer de burasıdır.
"Port Rule", tüm port ve protokolleri içeren, bu trafik için "Single Affinity" uygulayan ve bunu da eşit bir şekilde tüm küme üyelerine dağıtan bir kuraldır. Kural içeriğini görmek için kural seçiliyken "Düzenle" seçmek yeterlidir.
Buradaki ayarlardan ilki olan Küme "IP address", NLB kümesinin hangi IP'leri için kuralın geçerli olacağını belirler. Bunun altındaki "Port Range" kuralın hangi portları içeren bir kural olacağını ayarlar. "Protocols" ise hangi protokollerle gelen trafiğin NLB sürecine dahil edileceğini ayarlar.
"Filtering Mod" kısaca yük dengeleme trafiğinin birkaç üye arasında dağıtılıp dağıtılmayacağını ve bu dağılımın (Affinity) nasıl yapılacağını belirler. Üç Affinity tipi de burada görülmektedir. Yük üyeler arasında eşit dağıtılabileceği gibi oranlı bir şekilde de dağıtılabilir. Bunu için Equal seçeneği kaldırılmalı ve üyeler arasında toplam 100 olacak şekilde istenilen değerler verilmelidir. Filtering Mod kısmındaki bir diğer seçenek olan, "Single Host" ise kümeye gelen trafiği tek bir küme üyesinin karşılaması prensibiyle çalışır. Burada ayırıcı olan kriter Handling Priority’dir. Handling Priority değeri düşük olan NLB kümesi üyesi bu kural tarafından belirtilen trafiğin tek hedefidir. Bu üye devredışı kalırsa trafik bir diğer üyeye yönlendirilir.
Son ayar olan "Disable This Port Range" ise aslında TCP/IP filtering’den farksızdır. Kısaca kural tarafından belirlenen portları kapatır.
Özetle, Ağda Yük Paylaşımı sadece TCP ve UDP trafiğini desteklemez. GRE trafiği için de yük dengelemesi yapabilir. Bununla birlikte 2003 NLB servisi VPN bağlantısı için PPTP ile birlikte IPsec protokollerini de destekler. Yalnız kümeye yeni üye eklenmesi durumunda bazı istemci bağlantıları kesilebilir (Bu sorun XP SP1 ve 2003 için giderilmiştir). Son olarak, NLB ve Microsoft Server Clustering Services aynı makinaya kurulamazlar.