Yük Dengeleme (Load Balancing), sunucu kümesi içerisindeki sınırlı kaynaklar içerisinde artan trafiğin karşılanabilmesi için geleneksel yöntem olan Dikey Ölçeklendirme’nin (Vertical Scaling) aksine Yatay Ölçeklendirme (Horizontal Scaling) ile yapıya ilave sunucu ekleme şeklide ilerleyen yönteme yük dağılımını sağlamaktır.

Her geçen gün artan request trafiğinin, belirlenen algoritmaya göre paylaştıran böylelikle her sunucuya belirli client request’lerin ulaştığı bu yapılandırmada günümüzde Load Balancing oldukça büyük öneme sahiptir.

Nginx ile Load Balancing Yapılandırması için ilk olarak sisteminizde nginx kurulu olması gereklidir. Varsayılan olarak kurulumunda oluşan “default” konfigrasyon dosyası silip, aynı isimle devam ediyor olacağız.

root@mertkarakulak:~# rm -rf /etc/nginx/sites-available/default

Aynı isimle dosyayı tekrar oluşturuyoruz.

root@mertkarakulak:~# nano /etc/nginx/sites-available/default

LBService olarak isimlendirdiğimiz method üzerinde back-end üzerinde tanımlı olan web sunucularımızı tanımlıyor ve akabinde sunucunun herhangi bir hostname üzerinden gelecek 80 portuna air requestleri dinelemesi gerektiğini ve gelen trafiğinin ise method üzerindeki sunuculara iletilmesi yönünde oluşturduğumuz dosyanın yapılandırmasını aşağıdaki gibi düzenliyorum.

upstream lbservice {
        server 10.20.30.40:81;
        server 10.20.30.41:82;
        server 10.20.30.42:83;
}

server {
        listen 80;
        server_name _;
        location / {
                proxy_pass http://lbservice;
        }
}

Bu konfigürasyonun doğru şekilde çalıştığını doğrulamak için aşağıdaki komutu kullanıyorum. Bu işlem, yapılandırmaların hatasız bir şekilde çözümlendiğini hızlıca kontrol etmeme olanak tanır.

root@mertkarakulak:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Herhangi bir problem olmadığına göre, nginx servisini yeniden başlatarak yeni configleri okumasını sağlıyorum.

root@mertkarakulak:~# systemctl restart nginx

Ve sonuç aşağıdaki gibi, istekleri sırasıyla web sunucularına paylaştırmaktadır. Varsayılan olarak gelen bu paylaştırma algoritmasının adı “Round Robin” şeklindedir.

Least Connection:

Ancak her zaman isteklerin sırasıyla her sunucuyu dolaşmasını istemeyebiliriz, bu durumlarda ise alternatifler yer almaktadır.

root@mertkarakulak:~# nano /etc/nginx/sites-available/default
upstream lbservice {
        least_conn;
        server 10.20.30.40:81;
        server 10.20.30.41:82;
        server 10.20.30.42:83;
}

Yukarıdaki gibi yapılandırıldığında, gelen her isteği en az yoğunlukta ve aktif konumda olan sunucuya yönlendirecektir. Dolayısıyla bu yapılandırma ağır trafik beklendiği durumlarda sıklıkla tercih edilir. Bu yapılandırma ise “Least Connection” şeklinde adlandırılmaktadır.

Farklı bir tarayıcıdan giriş yaptığımda, ilk olarak “Web Server 2” sunucusundan yanıt aldım. Diğer sunucular boş olduğu için sistem, yalnızca “Web Server 1” ve “Web Server 3” sunucularına gelen istekleri dağıtıyor.

IP Hash:

Bazı durumlarda, kullanıcı isteklerinin belirli bir sunucuya sürekli yönlendirilmesi gerekebilir. Bu ihtiyaç, özellikle oturum bilgileri değişmeden işlemlerin devam etmesi istendiğinde ortaya çıkar. Bu tür durumlarda, IP Hash yöntemi etkili bir çözüm sağlar.

root@mertkarakulak:~# nano /etc/nginx/sites-available/default
upstream lbservice {
        ip_hash;
        server 10.20.30.40:81;
        server 10.20.30.41:82;
        server 10.20.30.42:83;
}

Bu durumda ise ilk olarak isteğim teslim edildiği sunucunun “Web Server 1” olması nedeniyle devamında gelen isteklerinde “Web Server 1” üzerine teslim edildiği görülmektedir.


Nginx ile ilgili teknik dökümanlara resmi web sitesi üzerinden kolayca erişebilirsiniz. Eğer işlem sırasında bir problemle karşılaşırsanız, yorumlar veya iletişim alanı üzerinden bana doğrudan ulaşabilirsiniz.

Veya

Nginx’e ait forumlar aracılığıyla topluluk ve yetkililer ile iletişim kurabilirsiniz.

Düzenlenme Tarihi: 4 Ocak 2025

Yorumlar

Güzel gözüküyor. Eline sağlık.

Selam Mert, Oldukça ayrıntılı olmuş, tebrik ederim.

Merhaba, Tesadüfen gördüm, gerçekten başarılı bir makale.

Cevabınızı Yazınız

Kişisel bilgilerinizi ve yorumunuzu herkese açık bir şekile paylaşacağınızı unutmayınız.