Load Balancing Nedir?

Yük dengeleme, web trafiğinizi bölmek ve bir grup özdeş sunucuya eşit olarak dağıtmak anlamına gelir. Yük dengeleme, bugün web uygulamalarını barındırmak için kritik öneme sahiptir.

Çalışmayı paylaşarak, sunucularınız daha az zorlanır, bu da sürekli hızlı bir hizmete dönüşür. Ayrıca hizmetinizi daha güvenilir hale getirir. Bir grup sunucuya trafik göndererek kendinizi kesinti süresinden korursunuz çünkü sunucularınızdan biri veya hatta birkaçı başarısız olursa, hala etkin olan başka sunucular olduğu sürece hizmetiniz kesintisiz devam edecektir.

Load Balancing Algorithms Nedir?

Doğru yük dengelemesi uygulandığında, web trafiğini artırma talebi yönetilebilir hale gelebilir, ancak uygulamalarınız için hangi yük dengeleme algoritmasının en uygun olduğunu nasıl belirlersiniz? Statik yük dengelemesinin kullanım kolaylığı sağladığınız hizmetlere daha uygun mu yoksa sisteminiz verimliliği en üst düzeye çıkarmak için daha karmaşık ve dinamik bir algoritma setinden yararlanabilir mi? 

Statik ve Dinamik Algoritmalar

Yük dengeleme algoritmaları iki ana kategoriye ayrılabilir: statik ve dinamik. Başlıkların da belirttiği gibi, statik yük dengelemesi daha sabittir ve gelen trafiğin durumuna bakılmaksızın değişmez, dinamik yük dengeleme uyarlanabilir ve gelen istekleri geçerli istek sunucularının yüzüne göre nasıl sıraladığını değiştirebilir.

Statik yük dengeleme algoritması, konuşlandırılması en kolay olanıdır. Sistem yükünü veya bilgi taleplerinin boyutunu aktif olarak açıklamaz. Bunun yerine, önceden belirlenmiş bir sıralama kuralına dayalı olarak gelen trafiği yönetmek için mevcut sistem bilgileriyle birlikte daha pasif bir yaklaşım gerektirir, web uygulamasını desteklemek için kullanılabilir sunucu sayısı gibi. Algoritma bunu alır statik bilgi ve gelen trafiği buna göre yönetir. Değişen ortamlara uyum sağlamaz ve sıralama kuralına uyar.

Statik yük dengelemeye bir örnek yuvarlak robin algoritmasıdır. Yuvarlak robin ile istemci istekleri sırayla sunucular arasında dağıtılır. Kullanılabilir son sunucu bir istek aldığında, algoritma sunucu listesinin üstünden tekrar dağıtılır. Bu algoritma, istemci isteklerini sunuculara alındıkları sırayla dağıtır. Anlamak ve çalışmaya başlamak için basit bir algoritmadır ve hızlı, öngörülebilir istekler alan web uygulamaları için işe yarayabilir, ancak bazı uygulamalar trafiği yönetmek için daha karmaşık yük dengeleme gerektirir.

Dinamik yük dengeleme aktif olarak mevcut yük sistemlerini açıklamaktadır. Gelen trafiği yönetmek için gerçek zamanlı bir yaklaşım gerektirir ve desenli veya rastgele dağılımlarına bağlı değildir. Yük arttıkça ve azaldıkça trafiğe uyum sağlayabilir ve değişebilir. Dinamik yük dengeleme, trafiği zaten zorlanmış olan sunuculardan uzaklaştırabilir ve bu istekleri daha az bağlantıyı yöneten sunuculara gönderebilir. Bu tür yük dengeleme algoritması, sistemlerin mümkün olduğunca verimli çalışmasını sağlar.

Dinamik yük dengeleme örneği en az bağlantı algoritmasıdır. Bu algoritma, daha az bağlantıyı yöneten sunuculara gelen trafiği gönderir. Bu durumlarda, yük dengeleyici, her sunucunun gelen istekleri işleme kapasitesi daha yüksek olanlara etkin ve doğrudan trafiğe sahip olduğu bağlantı sayısını izler. Algoritma, bağlantıları geldikleri sırayla devretmek yerine, esasen tüm kaynaklardaki yükü eşit olarak yönetmeye çalışır. Bu tür yük dengeleme, yuvarlak robin gibi statik algoritmaların daha yüzeysel dengelenmesine göre verimliliğe öncelik verir.

Peki En iyisi nedir?

Hangi algoritmanın ihtiyaçlarınıza en uygun olduğunu belirleme konusunda doğru veya yanlış kararlar yoktur. Hem statik hem de dinamik algoritmalar, web uygulamaları için gelen trafiği yönetmeye yardımcı olacaktır ve yük dengeleyicisine sahip olmak kesinlikle hiç yoktan daha iyidir.

Elinizdeki kaynaklar statik ve dinamik yük dengeleme arasında belirleyici bir faktör olabilir. Sınırlı kaynaklar ve öngörülebilir istemci istekleri, statik algoritmaların sistemleriniz için daha uygun olduğu anlamına gelebilir, ancak o zaman bile statik algoritmaları daha dinamik hale getirmenin yolları vardır.

HAProxy daha dinamik bir yuvarlak robin seçeneği sunar ve bu algoritma ile kullanıcılar yük dengeleme sunucularının ağırlığını ayarlayabilir. Ağırlık yapılandırıldıktan sonra Çalışma Zamanı API'sı ile dinamik olarak ayarlanabilir. Daha ağır ağırlıklı sunucular, yuvarlak robinin dönen doğasını korurken trafiğin daha büyük bir bölümünü alacaktır. Sunucularınızı yavaş bir başlangıç yapmak ve aracı denetimlerini yapılandırmak gibi diğer alternatifler, statik yük dengeleyicilerinin sunucuların geçerli durumunu hesaba katmasına ve buna göre uyum sağlamasına olanak sağlayabilir.

Bu kılavuz haproxy uygulamasının yüklü ve çalıştığını varsayar.

HA Proxy Load Balancing Kullanımı

Load balancing işlemini test etmek ve anlamak için birden fazla sunucu olması gerekmektedir. İlk aşamada HAProxy sunucusu ve  2 tane web server kullanacağız.  Kısaca aşağıdaki görseli uygulamış olacağız.

 Hızlı ve kolay olması için web sunucularını docker üzerinde oluşturacağım. İsterseniz farklı sanal makinalarda kullanabilirsiniz.

İlk olarak 2 adet nginx web server ayağa kaldırıyorum.

docker run -d --name nginx1 -p 81:80 nginx
docker run -d --name nginx2 -p 82:80 nginx 

Şimdi web sunucuların kolay bir şekilde ayrımını yapmak için index sayfalarını değiştirelim.

docker exec -it nginx1 sh -c "echo WS1 > /usr/share/nginx/html/index.html"
docker exec -it nginx2 sh -c "echo WS2 > /usr/share/nginx/html/index.html" 

Web sunucuların çalıştığını herhangi bir tarayıcı üzerinden kontrol edelim.

Haproxy sunucu yapılandırma dosyasını editör yardımı ile açınız.

sudo vi /etc/haproxy/haproxy.cnf 

Gelen pencere ilgili kısımları kendi yapımıza göre düzenlememiz gerekmektedir.

  • server yazan satırlardaki ip ve port bilgilerini kendi yapılarınıza göre değiştirmeniz gerekmektedir.
frontend demo_haproxy
        bind *:80
        mode http
        default_backend demo_test

backend demo_test
        mode http
        balance roundrobin
        server WS1 192.168.1.10:80 check
        server WS2 192.168.1.11:80 check

Gerekli değişiklikleri yaptıktan sonra, dosyanın en son satırına gelip yapıştıralım.

Yapılandırma dosyasını düzenledikten sonra kayıt edip çıkalım.

:wq!

HAProxy yapılandırma dosyanızı düzgün bir şekilde test etmek, yük dengeleyicinizi yönetmenin basit ama çok önemli bir parçasıdır. Yapılandırma dosyanızda bir değişiklik yaptıktan sonra basit bir komutu çalıştırmayı hatırlamak, yük dengeleyicinizi istemeden durdurmaktan ve hizmetlerinizi kapatmaktan kurtarabilir.

Sabırsızlar için, bir konfigürasyon dosyasını test etmek için basit bir komut.

haproxy -f /ech/haproxy/haproxy.cfg -c 

Eğer herhangi bir hata yok ise configuration file is valid  çıktısı alacaksınız.

  • c harfi "kontrol modunu" etkinleştirir ve HAProxy'ye gerçekten HAProxy'yi başlatmadan veya yeniden başlatmadan test etmesini söyleyen bayraktır.

Servisi restart komutu ile yeniden başlatmak yerine, reload ile kesintisiz yeniden yüklemeler yeni yapılandırmayla yeni bağlantılar getirirken aktif bağlantıların eski yapılandırmayı kullanarak zarif bir şekilde bitmesini sağlayabiliriz. Bozuk bir yapılandırma ile yeniden yükleme girişiminde bulunursanız, bir hata verir, ancak daha önce çalışan hizmeti kesintiye uğratmaz.

sudo systemctl reload haproxy 

Test için bir döngüye curl aracı ile istek yazalım.

for a in {1..100};do curl 10.106.250.35;done 

Yukarıdaki görsele baktığımız zaman, başarılı bir şekilde yük dağıtma işlemi sırasıyla sunuculara dağıtılmıştır. Kısa bir süre sonra Web Sunucusu 1 olanı kapattım. Yine görseldeki gibi diğer sunucudan devam ettiği gözükmektedir. Bu sayede hem performans hemde yedekli bir yapı sağladığımızı anlayabiliriz.

Blog'a Dön