WebFarm / Internet Information Server Clustering (Bölüm-2)


2007 yılında tasarladığımız ve hayata geçirdiğimiz Türkiye’nin en büyük e-ogrenme portallarından birinin web sunucularının altyapı çalışmaları sırasında hazırladığım ve yayınladığım bir makaleyi tekrar paylaşmak istedim. Makale, Software Network Load Balancing konusunda çeşitli yapılandırma bilgileri içermektedir.

WebFarm / Internet Information Server Clustering (Bölüm-2)

Network Load Balancing(NLB)

Network Load Balancing, adından da anlaşılacağı gibi ağ üzerinden akan veri yükünü dengelemek için kullanılan bir teknolojidir. Network Load Balancing donanımsal ya da yazılımsal olarak sağlanabilir. Clustering konusuna tekrar değinirsek aktif ve pasif kavramlarından bahsetmemiz gerekir. Cluster yapıları Aktif/Aktif ya da Aktif/Pasif çalışabilir. Aktif durumdaki sunucu cluster yapısı içerisinde, cluster yapısına gelen isteklere doğrudan cevap veren sunucudur. Pasif olan sunucu ise cluster yapısı içerisinde Aktif durumdaki makinede donanımsal ya da yazılımsal bir sorun olması durumunda onun yerine geçebilecek şekilde hazırda bekleyen sunucudur. Buradan şu sonuca varabiliriz; Aktif/Aktif Cluster yapısı ağ(dolayısı ile sunucular) üzerinde yük dengeleme işlevini yerine getirir. Aktif/Pasif Cluster yapısı ise hata toleransını sağlamaya yöneliktir. Aktif/ Aktif Cluster yapısına Load-Balancing Cluster, Aktif/Pasif Cluster yapısına ise Fault-Toleranced Cluster denilebilir. Bu açıklamalarla NLB’nin Aktif/Aktif Cluster yapısında olduğunu söyleyebiliriz. Ancak girişte de bahsettiğimiz gibi Network Load Balancing donanımsal ya da yazılımsal olarak sağlanabilir. Donanımsal Load Balancing cihazları NLB’yi Aktif/Aktif yaparlarken Microsoft Server 2003 işletim sistemi içerisinde NLB Manager ile Load Balance yapılandırılırken Aktif/Aktif ya da Aktif/Pasif Cluster yapılabilir. İlk makalede de bahsedildiği gibi bir webfarm yapısı düşünüldüğünde Cluster Node’larından her biri değerinden bağımsız bir şekilde kendi sabit diskinde web sitesi için aynı verileri tutar. Böylece Node’lardaki veriler aynı olduğu için kullanıcı NLB Cluster yapısına istekte bulunduğunda NLB yapısı kullanıcıyı hangi sunucuya yönlendirirse yönlendirsin kullanıcı aynı siteyi görür. Bu olay kullanıcının bilgisi dahilinde olmadan arka planda NLB yapısı içerisinde gerçekleşir. Elbette ki NLB Cluster Node’ları içerisindeki veriler farklı olursa kullanıcının arka arkaya girişlerinde ya da farklı kullanıcıların girişlerinde farklı sitelerle karşılaşılacaktır. O zaman NLB yapısında belli bir replikasyon mimarisi olmalı ve NLB Cluster Node’ları olacak IIS web sunucular arka planda data’larını eşitlemelidir. Replikasyon mimarisi için RoboCopy gibi araçlar kullanılabilir ya da dinamik bir şekilde güncellenmeyen sitelere uygulanacaksa, webmaster’lar ya da sistem yöneticileri tarafından her seferinde el ile yapılabilir. Ancak bir replikasyon mimarisinden söz ederken için bu iki durumda verimli olmayacaktır. Windows işletim sisteminin File Replication Servisi bu durumda oldukça avantajlıdır. Distriubuted File System özelliği altından IIS’lerdeki web sitelerinin verilerini barındıran dosyalar replication partner olarak ayarlanınca DFS, FRS servisi üzerinden replikasyonu gerçekleştirecektir. FRS servisinin asıl amacı Domain ortamında Domain Controller’lar arasında SYSVOL paylaşımını replike etmektir. İkincil bir rol olarak DFS için replikasyon yapabilir. Ancak yine de FRS servisi video vb. büyük boyutlu verilerin replikasyonunda sorun çıkarabilmektedir. Bu yüzden Windows Server 2003 R2 ile beraber gelen DFS Management özelliği beraberinde kendi DFS Replication Servisini kullanmaktadır. Böylelikle FRS sadece SYSVOL replikasyonu yaparak yükü hafiflemekte ve DFS Replication Servisi ile Replikasyon Mimarisi de performans kazanmaktadır. Bu açıklamalardan sonra NLB yapısında sağlıklı replikasyon mimarisi için Windows Server 2003 R2, DFS Management ve DFS Replication servisi kullanılacaktır. Aslında doğası gereği NLB stateless bir yapıdadır. Biraz daha açarsak kullanıcıların session(oturum) bilgileri NLB yapısında tutulmaz. Statefull bir yapı isteniyorsa, yani session bilgileri tutulmak isteniyorsa Microsoft Clustering Service (MSCS) tercih edilmelidir. Internet Information Service(IIS) ile Cluster yapılacaksa NLB, MS-SQL, MS-Exchange gibi session tutması zorunlu uygulamalarda ise MSCS kullanılmalıdır. MSCS tarafında Aktif/Aktif cluster Microsoft tarafından tavsiye edilen bir yapı değildir. MSCS ile Aktif/Akfit Cluster, Network ve Sunucular üzerinde aşırı fragmantasyon yaratacağından performans açısından verimli olmayacaktır. MSCS ile Cluster kelimeleri yan yana getirdiğimizde aklımıza gelen Fault-Toleranced Cluster olacaktır.

NLB ve Session

Buraya kadar her şey güzel, teorik olarak web sunucular üzerinde NLB yapılandırırsak, sunuculardan istekte bulunan 1000 adet kullanıcı varsa, 2 sunuculu bir yapıda 500 tanesi bir sunucuda, diğer 500 tanesi diğer sunucuda tutulacak. Böylelikle NLB Cluster yaparak sunucular üzerindeki yükü dengelemiş olacağız. Arka planda replikasyon mimarisinin de performanslı çalıştığını düşünürsek sitedeki değişiklikler sunuculardan birinde değişiklik yapıldığında otomatik olarak gerçekleşecek. Fakat sunucular için bu performanslı Load-Balancing yapısından vazgeçmek istemiyorsak ve sunuculardaki sitelerin kullanıcıların session bilgilerini tutmaları gerekiyorsa durum ne olacak? NLB’nin stateless yapıda olup session bilgilerini tutamadığını daha önceden söylemiştik. Bu yüzden session bilgilerini IIS Sunucuları yapılandırarak tutmamız gerekir. Web Uygulamaları için session bilgileri IIS tarafından asp.net yardımı ile tutulabilir. Session verilerini tutmanın 3 türlü yöntemi vardır: 1- In Process Mode(inProc) 2- State Server Mode 3- Out of Process – SQL Server Mode(outProc) inProc moda session bilgileri aspnet_wp.exe dosyasına bağlı olarak her sunucu içinde bireysel olarak tutulur. State Server Mode’da ise session bilgileri serileştirilerek sunucuların RAM’lerinde bir birinden bağımsız process’ler olarak tutulur. SQL Server Mode’da session bilgileri serileştirilmiş yani serializable bir şekilde SQL sunucuda tutulur. Sunuculardaki birbirinden bağımsız verileri oluşturduğumuz replikasyon yapısı ile eşitleyebiliyoruz ancak session bilgilerini tutabiliyorsak bunları da eşitleyebilmemiz ya da sunucuların ortaklaşa kullanabilecekleri bir lokasyonda tutmamız gerekir. Çünkü kullanıcıların WebFarm yapısı üzerindeki sitelerde dolaşırken session’larını tutmamız gerekir. Session tutmadığımız durumda kullanıcının NLB yapısından kaynaklanan bir şekilde bir sunucuya ya da diğer sunucuya gönderilmesi sonucu session bilgileri kaybolacaktır. Örneğin kullanıcı, sunuculardan birinde, sayfalardan biri için şifre girdiğinde sayfa içerisindeki linklerden birine basarak başka bir sayfaya gitmek istediğinde, NLB yapısı bu istek sonucu kullanıcıyı başka bir sunucuya yönlendirirse web browser kullanıcıya tekrar şifre soracaktır. Yoğun bir sitede (ki WebFarm yapıldığına göre mutlaka yoğun bir sitedir.) kullanıcının sunucular arası arka planda gezmesiyle, kullanıcıya devamlı şifre sorulacak ya da kullanıcı tarafından girilen bilgiler, kullanıcıdan sunucu tarafından edinilen kaybolacaktır. Kısaca siteler içinde gezinmek hiç verimli olmayacaktır. Session tutmak bunu gerektiren siteler için çok önemlidir. Session tutmak önemli olduğunu ve 3 türde tutulabildiğini söylemiştik. inProc mode cluster oramı için uygun değildir. State Server Mode’da ise session verilerini sunucunun RAM’inde tuttuğuna göre, sunucular arasında session verilerinin eşitliğini sağlayabilmemiz mümkün değildir ve bu durumda session’u tutamayız. Çünkü RAM replikasyonu diye bir durum söz konusu değildir. Session verilerini sunucuların ortak erişebileceği bir alanda outProc yöntem ile SQL sunucu üzerinde tutmamız gerekir. Böylelikle session verilerini sunucuların her ikisinin de erişebileceği ve kullanabileceği bir lokasyon tutmuş böylece session verileri için replikasyon yapmamış oluruz. Bu durumda Windows Server 2003 R2 ve SQL Server 2005 uygulamaları WebFarm Cluster yapısını gerçekleştirebilmek için yeterli gözüküyor. Ancak sunucuların ve network yapısının performansının Cluster yapısının performansını doğrudan etkileyeceği gözden kaçırılmamalıdır. Session verilerini SQL sunucu üzerinde tutabilmek için IIS sunucuların webconfig dosyasını düzenlememiz gerekir. Makalenin ilerleyen bölümlerinde bu uygulama anlatılacaktır.

Ahmet TOPRAKÇI | MCT

Reklamlar

Ocak 27, 2012 tarihinde Makaleler | Yazılar, Windows Server içinde yayınlandı ve , , , , , , , , , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin. Yorum yapın.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: