Web Sunucusu

Nginx ile Load Balancing Yapılandırması

3 Dakika Okuma Süresi.

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.

Nginx ile Load Balancing Yapılandırması

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;
        }
}
Nginx ile Load Balancing Yapılandırması

Yapılan bu konfügrasyonun üzerindeki yapılandırmalarımızın doğru bir şekilde çözümlendiğini doğrulayabilmek için aşağıdaki komutu kullanıyorum.

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.

Nginx ile Load Balancing Yapılandırması

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.

Nginx ile Load Balancing Yapılandırması

Aşağıda görüldüğü gibi farklı bir tarayıcıdan giriş yaptığımda bana ilk olarak “Web Server 2” sonucusu verdiği için, diğer sunucuların boş olması nedeniyle yalnızca “Web Server 1” ve “Web Server 3” sunucularına gelen request’i dağıtmaktadır.

Nginx ile Load Balancing Yapılandırması

Bazı özel durumlarda gelen isteğin üzerindeki session bilgilerinin değişmemesi, kullanıcının girdiği sunucuya isteklerin devamlı gelmesi için algoritma kullanılması gerekebilir bu durumlar için “IP Hash” şeklinde ifade edilen bir yapıdır.

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;
}
Nginx ile Load Balancing Yapılandırması

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 Load Balancing Yapılandırması

Nginx resmi web sitesi üzerinde ilgili teknik dökümanlara ulaşabilir veya işlem sırasında bir problem ile karşılaşırsanız yorumlardan, iletişim alanından bana ulaşabilirsiniz.

Veya

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

3 Yorumlar

  1. Vuslat

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

  2. Ayhan

    Selam Mert,

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

  3. Hüseyin

    Merhaba,

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

Bir yanıt yazın