Nginx Üzerinde Load Balancing (Yük Dengeleme) Algoritmaları

Nginx, yüksek performanslı bir web sunucusu ve ters proxy olarak, modern altyapılarda yük dengeleme (load balancing) ihtiyacını etkin bir şekilde karşılar.

Nginx, yüksek performanslı bir web sunucusu ve ters proxy olarak, modern altyapılarda yük dengeleme (load balancing) ihtiyacını etkin bir şekilde karşılar. Yük dengeleme, gelen trafiği birden fazla arka uç sunucusuna dağıtarak sistem kaynaklarını optimize eder, kesinti riskini azaltır ve ölçeklenebilirlik sağlar. Nginx’in upstream modülü, çeşitli algoritmalarla bu dağılımı yönetir. Bu algoritmalar, trafik paternlerine göre seçilerek en uygun performansı sunar. Makalede, Nginx’in temel ve gelişmiş yük dengeleme algoritmalarını inceleyecek, yapılandırma örnekleri verecek ve pratik ipuçları paylaşacağız. Bu bilgiler, kurumsal ortamlarınızda Nginx’i verimli kullanmanız için rehber niteliğindedir.

Nginx’in Temel Yük Dengeleme Algoritmaları

Nginx’in varsayılan upstream yapılandırması, round-robin algoritmasını kullanır. Bu algoritmalar, basitlikleri ve etkin performanslarıyla giriş seviyesi uygulamalardan karmaşık sistemlere kadar geniş bir yelpazede tercih edilir. Aşağıda, en yaygın iki algoritmayı detaylandıracağız.

Round Robin Algoritması

Round Robin, istekleri upstream sunucular arasında sırayla dağıtır. Her sunucu eşit ağırlıkta kabul edilir ve trafik döngüsel olarak yönlendirilir. Bu yöntem, sunucuların benzer kapasitede olduğu senaryolarda idealdir. Örneğin, üç sunucunuz varsa (server1, server2, server3), ilk istek server1’e, ikincisi server2’ye gider ve döngü devam eder.

Yapılandırma için nginx.conf dosyasındaki upstream bloğunda algoritma belirtilmez; varsayılan olarak çalışır:

upstream backend {
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

Bu yaklaşım, failover desteğiyle birleştiğinde güvenilirlik sağlar. Sunucu ağırlıklarını ayarlamak için weight parametresi ekleyin: server 192.168.1.10 weight=2;. Pratikte, statik trafik için uygundur ancak dinamik yüklerde dengesizlik yaratabilir. Test ederken nginx -t komutuyla yapılandırmayı doğrulayın ve nginx -s reload ile yeniden yükleyin.

Least Connections Algoritması

Least Connections (least_conn), aktif bağlantı sayısı en az olan sunucuya istek yönlendirir. Dinamik ortamlarda, örneğin veritabanı sorguları gibi uzun süren işlemler için üstündür. Nginx, her sunucunun mevcut bağlantılarını izleyerek en boş sunucuyu seçer.

Upstream bloğunda least_conn; direktifiyle etkinleştirin:

upstream backend {
    least_conn;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

Bu algoritma, health check’lerle (örneğin, Nginx Plus’ta veya açık kaynak eklentilerle) entegre edildiğinde daha etkilidir. Kurumsal uygulamalarda, CPU yoğun iş yüklerinde %20-30 daha iyi kaynak kullanımı sağlar. İzleme için stub_status modülünü etkinleştirin ve logları analiz edin. Ağırlık desteğiyle (weight=3) dengeli dağıtım elde edin.

Gelişmiş Yük Dengeleme Algoritmaları

IP tabanlı ve özel hash algoritmaları, oturum tutarlılığı (session persistence) gerektiren senaryolarda kritik rol oynar. Bu yöntemler, trafiği istemci özelliklerine göre sabitler ve stateful uygulamalar için uygundur.

IP Hash Algoritması

IP Hash (ip_hash), istemcinin IP adresini hash’leyerek sunucu seçer. Aynı IP’den gelen istekler her zaman aynı sunucuya gider, böylece oturum bilgileri korunur. E-ticaret siteleri veya API’ler için idealdir.

Yapılandırma basitçe upstream’de ip_hash; ile yapılır:

upstream backend {
    ip_hash;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

Proxy protokolüyle (real_ip_header) gerçek IP’leri kullanın. Dezavantajı, IP spoofing veya NAT arkasındaki trafiğin dengesizliği. zone direktifiyle (ip_hash_zone=backend:64k;) bellek kullanımını sınırlayın. Pratikte, location bloğunda proxy_pass http://backend; ile entegre edin ve erişim loglarında dağılımı gözlemleyin.

Hash Algoritması

Hash algoritması, özel bir anahtara (header, cookie, variable) göre hash hesaplar. Esneklik sağlar; örneğin $request_uri veya $cookie_session ile oturum sticky yapın.

Örnek yapılandırma:

upstream backend {
    hash $request_uri consistent;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

Consistent parametresi, sunucu ekleme/çıkarma sırasında yeniden hash’lemeyi önler (Ketama benzeri). Kurumsal ölçekte, JWT token’lara göre ($http_authorization) kullanın. Performans için MD5 hash varsayılanı yeterlidir. Testlerde, ab -n 10000 -c 100 ile yük testi yapın ve dengesizliği kontrol edin.

Pratik Yapılandırma ve En İyi Uygulamalar

Yük dengeleme optimizasyonu, health check, timeout ve keepalive gibi ek ayarlarla tamamlanır. Kurumsal ortamda, bu adımları izleyerek %99.9 uptime hedefleyin.

  1. Upstream bloğunu tanımlayın ve algoritmayı seçin.
  2. Sunucu parametreleri ekleyin: max_fails=3 fail_timeout=30s; ile arızalı sunucuları izole edin.
  3. Location bloğunda proxy_pass http://backend; proxy_next_upstream error timeout invalid_header http_500; ayarlayın.
  4. Keepalive için upstream’e keepalive 32; ekleyin.

Bu ayarlar, trafiği %40 daha verimli dağıtır. Log formatını özelleştirin (log_format main ‘$remote_addr – $upstream_addr’;) ve Grafana/Prometheus ile izleyin. Algoritma seçiminde, uygulamanızın trafiğini analiz edin: statik için round-robin, dinamik için least_conn tercih edin. Düzenli testlerle (load testing tools) yapılandırmayı doğrulayın.

Sonuç olarak, Nginx’in yük dengeleme algoritmaları, esnek ve güçlü bir altyapı sunar. İhtiyaçlarınıza göre round-robin’den hash’e geçiş yaparak sisteminizi ölçeklendirin. Pratik uygulamalarla başlayın, izleyin ve optimize edin; bu yaklaşım, kurumsal başarıyı garanti eder.

Kategori: Web Sunucu
Yazar: Lorem
çerik: 651 kelime
Okuma Süresi: 5 dakika
Zaman: Bugün
Yayım: 24-02-2026
Güncelleme: 24-02-2026