Blog’a Dön

Load Balancer (Yük Dengeleyici) Nedir? Nasıl Çalışır?

Load balancer nedir, ne işe yarar? Yük dengeleme yöntemleri, sağlık kontrolleri, oturum yönetimi, Nginx ile yük dengeleme, HAProxy ve ne zaman gerekir.

Nodesty Ekibi4 dk okumaSunucular
Koyu Nodesty arka planında Load Balancer yazısı ile Upstream, Health checks ve Failover ifadeleri

Load balancer (yük dengeleyici), gelen istekleri birden fazla sunucu arasında dağıtan bir sistemdir. Ziyaretçiler tek bir adrese bağlanır; load balancer her isteği arkadaki sunuculardan birine iletir. Böylece tek bir sunucunun kaldıramayacağı trafik birkaç sunucuya paylaştırılır ve sunuculardan biri arızalandığında diğerleri hizmet vermeye devam eder.

Bu yazıda load balancer'ın nasıl çalıştığını, yük dağıtım yöntemlerini, sağlık kontrollerini, oturum yönetimini, Nginx ile basit bir yük dengeleme kurulumunu ve load balancer'a ne zaman ihtiyaç duyduğunuzu anlatıyoruz.

Load balancer ne işe yarar?

  • Ölçeklenme: Trafik arttığında daha büyük bir sunucuya geçmek (dikey büyüme) yerine yeni sunucular ekleyerek (yatay büyüme) kapasiteyi artırırsınız.
  • Yüksek erişilebilirlik: Bir sunucu çöktüğünde ya da bakıma alındığında load balancer trafiği diğer sunuculara yönlendirir; ziyaretçiler kesinti fark etmez.
  • Kesintisiz güncelleme: Sunucuları teker teker devreden çıkarıp güncelleyebilirsiniz.
  • Tek giriş noktası: SSL sertifikası, sıkıştırma ve güvenlik kuralları tek bir yerde yönetilir.

Hizmetinizin ne kadar süre erişilebilir olduğunun nasıl ölçüldüğünü Uptime nedir? yazımızda anlattık.

Yük dağıtım yöntemleri

YöntemNasıl çalışır?Ne zaman?
Round robinİstekleri sırayla her sunucuya gönderirSunucular eşit güçte ve istekler benzer
Ağırlıklı round robinGüçlü sunuculara daha fazla istek gönderirSunucuların kapasiteleri farklı
En az bağlantıEn az aktif bağlantısı olan sunucuyu seçerİsteklerin süreleri birbirinden çok farklı
IP hashAynı IP adresini hep aynı sunucuya gönderirOturumların tek sunucuda tutulması gerekiyorsa

Sağlık kontrolleri

Load balancer, arkadaki sunucuların çalışıp çalışmadığını düzenli olarak kontrol eder. Bir sunucu cevap vermezse ya da hata döndürürse ona istek göndermeyi bırakır; sunucu düzeldiğinde tekrar devreye alır. Bu sayede tek bir sunucunun çökmesi ziyaretçilere hata olarak yansımaz. Uygulamanızda veritabanı bağlantısını da kontrol eden basit bir /health adresi hazırlamak, sağlık kontrollerini daha anlamlı kılar.

Oturumlar ve paylaşılan veriler

Load balancer'ın arkasında birden fazla sunucu olduğunda, bir kullanıcının ardışık istekleri farklı sunuculara gidebilir. Bu yüzden:

  • Oturumları ortak bir yerde tutun. Oturumlar tek bir sunucunun belleğinde ya da diskinde durursa kullanıcı başka sunucuya düştüğünde çıkış yapmış olur. Oturumları Redis gibi ortak bir depoda tutmak en temiz çözümdür; ayrıntılar Redis nedir? yazımızda.
  • Yüklenen dosyaları paylaşın. Kullanıcıların yüklediği dosyalar bütün sunucuların erişebileceği bir depolamada ya da nesne depolamada tutulmalıdır.
  • Veritabanı genellikle tektir. Uygulama sunucuları çoğaltılırken hepsi aynı veritabanına bağlanır. Veritabanını sunuculardan yalnızca özel ağ üzerinden erişilebilir yapın.

Bunlar mümkün değilse IP hash ya da yapışkan oturumlar (sticky sessions) ile aynı kullanıcıyı hep aynı sunucuya yönlendirebilirsiniz; ancak bu, yükün dengesiz dağılmasına yol açabilir.

Nginx ile yük dengeleme

Nginx, reverse proxy olarak kullanıldığı gibi basit ve güçlü bir load balancer olarak da çalışır. Arkadaki sunucular bir upstream bloğunda tanımlanır:

upstream uygulama {
    least_conn;
    server 10.8.0.11:3000 max_fails=3 fail_timeout=30s;
    server 10.8.0.12:3000 max_fails=3 fail_timeout=30s;
    server 10.8.0.13:3000 backup;
}

server {
    listen 443 ssl;
    server_name alanadiniz.com;

    location / {
        proxy_pass http://uygulama;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  • least_conn: İstekleri en az aktif bağlantısı olan sunucuya gönderir. Satırı kaldırırsanız varsayılan yöntem round robin olur.
  • max_fails ve fail_timeout: Bir sunucu belirtilen sürede art arda hata verirse bir süre devreden çıkarılır.
  • backup: Yalnızca diğer bütün sunucular devre dışıyken kullanılan yedek sunucu.

Nginx'in temel yapılandırmasını ve SSL'i Nginx kurulumu rehberimizde anlattık. Arkadaki sunucuların portlarını internete açmak yerine yalnızca load balancer'ın erişebileceği bir özel ağda tutun; sunucuları birbirine güvenle bağlamak için WireGuard kullanabilirsiniz.

HAProxy ve diğer seçenekler

  • HAProxy: Yalnızca yük dengeleme ve proxy işine odaklanan, çok yüksek trafikte kendini kanıtlamış açık kaynaklı bir araçtır. Gelişmiş sağlık kontrolleri ve ayrıntılı istatistikler sunar; TCP düzeyinde de yük dengeleyebilir.
  • DNS round robin: Aynı alan adı için birden fazla A kaydı yayınlamak, en basit dağıtım yöntemidir. Ancak DNS, çöken bir sunucuyu bilmez ve ziyaretçileri ona göndermeye devam edebilir; gerçek bir load balancer'ın yerini tutmaz.
  • Bulut ve sağlayıcı load balancer'ları: Bazı sağlayıcılar yönetilen load balancer hizmetleri sunar; kurulum ve yedeklilik sağlayıcının sorumluluğundadır.

Load balancer'ın kendisini yedeklemek

Tek bir load balancer, kendisi de bir tek hata noktası olur: O çökerse arkadaki bütün sunucular sağlam olsa bile siteye ulaşılamaz. Kritik sistemlerde iki load balancer çalıştırılır ve biri çöktüğünde diğeri trafiği devralır. Bu tür bir yapıyı kurmadan önce sağlayıcınızın ağ olanaklarını öğrenin.

Load balancer'a ne zaman ihtiyacınız olur?

Çoğu proje için load balancer gerekmez. Önce şunları deneyin:

  1. Uygulamayı ve veritabanını optimize edin. Yavaş sorgular ve önbellek eksikliği, sunucu eklemekten çok daha ucuz çözülür; Sunucu neden yavaş? yazımıza göz atın.
  2. Önbellek ve CDN kullanın. Statik içerikleri CDN'e, tekrarlanan sorguları Redis'e taşıyın.
  3. Daha güçlü bir sunucuya geçin. Dikey büyüme, yatay büyümeden çok daha basittir.

Load balancer şu durumlarda anlam kazanır:

  • Tek sunucunun kaynakları, optimizasyondan sonra bile trafiği taşımıyorsa.
  • Bir sunucunun arızalanması ya da bakımı sırasında hizmetin kesilmemesi gerekiyorsa.
  • Uygulamanızın yeni sürümlerini kesintisiz yayınlamak istiyorsanız.

Load balancing için Nodesty sunucuları

Nodesty AMD Ryzen 9 9950X VDS paketleri yüksek tek çekirdek hızıyla uygulama sunucusu olarak, AMD EPYC 7763 VDS paketleri ise bol RAM'iyle veritabanı ve önbellek sunucusu olarak kullanılabilir. 9950X paketlerindeki Frankfurt ve New York konumları, farklı bölgelerde sunucu çalıştırmanıza olanak tanır. Bütün paketlerde NVMe disk, nShield DDoS koruması ve 7 gün saklanan ücretsiz günlük yedekleme bulunur. Sanal sunucularda bant genişliği kullanımı ve yüksek trafikli ters proxy uygulamaları Adil Kullanım Politikamıza tabidir; çok yüksek trafik taşıyacak yapılar için donanımı tamamen size ayrılmış fiziksel sunucularımızı değerlendirin.

Sıkça Sorulan Sorular

Küçük bir site için load balancer gerekir mi?

Genellikle hayır. Tek bir güçlü sunucu, önbellek ve CDN ile çoğu site ve uygulama rahatça çalışır. Load balancer, tek sunucunun kaynakları yetmediğinde ya da bir sunucu arızalandığında hizmetin kesilmemesi gerektiğinde anlam kazanır.

Load balancer ile reverse proxy arasındaki fark nedir?

Reverse proxy, istekleri arkadaki bir uygulamaya iletir; load balancer ise bunu birden fazla sunucu arasında dağıtarak yapar. Nginx ve HAProxy gibi araçlar her iki işi de yapabilir; tek bir arka uç varsa reverse proxy, birden fazla arka uç varsa load balancer olarak çalışırlar.

Oturumlar sunucular arasında nasıl korunur?

Kullanıcı oturumları tek bir sunucunun belleğinde ya da diskinde tutulursa, isteği başka bir sunucu karşıladığında oturum kaybolur. Bunu önlemek için oturumları Redis gibi ortak bir depoda tutabilir ya da aynı kullanıcıyı hep aynı sunucuya yönlendiren yapışkan oturumları (sticky sessions) kullanabilirsiniz.

Load balancer'ın kendisi çökerse ne olur?

Tek bir load balancer, kendisi de tek hata noktası olur. Kritik sistemlerde iki load balancer çalıştırılır ve bunlardan biri çöktüğünde diğerinin trafiği devralması sağlanır. Daha basit kurulumlarda DNS üzerinden birden fazla adres yayınlamak da kısmi bir yedeklilik sağlar.

Oyun sunucularında load balancer kullanılır mı?

Bir oyun dünyası genellikle tek bir sunucu sürecinde çalıştığı için klasik yük dengeleme oyun sunucularında pek kullanılmaz. Minecraft ağlarındaki proxy'ler (örneğin Velocity) oyuncuları farklı alt sunuculara dağıtır ve buna benzer bir rol üstlenir.

Veritabanını da yük dengelemeli miyim?

Uygulama sunucularını çoğaltmak kolaydır, ama veritabanı genellikle tek bir ana sunucuda kalır ve tüm uygulama sunucuları ona bağlanır. Okuma yükü çok yüksekse okuma replikaları eklenebilir; bu, uygulama sunucularını çoğaltmaktan daha karmaşık bir iştir.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································