İçeriğe geç
NetDevOps
4 dk okuma DevOps

Nginx Load Balancing: Adim Adim Rehber

Web uygulamalarinin artan kullanicı trafigiyle birlikte yuku dagitmak, sistem performansi ve kullanilabilirlik acisindan kritik oneme sahiptir. Nginx Load Balancing ozelligi, bu soruna etkili bir cozum sunar. Bu rehberde Nginx'in load balancing yeteneklerini, farkli algoritmalarini ve pratik yapilandirma orneklerini detayli olarak inceleyecegiz.

Load Balancing Nedir?

Load balancing, gelen istekleri birden fazla sunucu arasinda dagitarak tek bir sunucunun asiri yuklenmesini onleyen bir tekniktir. Yatay olceklenebilirlik saglayan bu yaklasim, hem performansi artirir hem de yuksek sureklilik gereksinimlerini karsilar. Bir sunucu devre disi kaldiginda, load balancer diger sunuculara trafigi yonlendirerek kesintisiz hizmet sunmaya devam eder.

Nginx, reverse proxy ozelliklerinin yaninda gomulu load balancing destegi ile bu alanda en yaygin kullanilan cozumlerden biridir. Hem TCP hem HTTP/HTTPS protokolleri icin load balancing yapabilir, farkli algoritmalarla istek dagilimi ayarlayabilir ve health check mekanizmalari ile arka plandaki sunuculari izleyebilir.

Nginx Load Balancing Yapilandirmasi

Nginx ile load balancing yapilandirmasi oldukca basittir. Oncelikle upstream tanimlamasi yapilmasi gerekir. Upstream, arka plandaki sunucu havuzunu tanimlar:

upstream backend {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080;
}

Bu yapilandirmada uc farkli backend sunucu tanimlanmistir. Nginx, gelen istekleri bu sunuculara otomatik olarak dagitacaktir. Yapilandirmayi tamamlamak icin location blogunda proxy_pass direktifi kullanilir:

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Load Balancing Algoritmalari

Nginx, farkli yuk dengeleme algoritmalari destekler. Hangi algoritmanin kullanilacagi, uygulamanin yapısina ve gereksinimlerine gore degisir.

Round Robin (Varsayilan)

Round Robin, varsayilan algoritma olup istekleri sirayla her sunucuya esit olarak dagitir. Basit ve dengeli dagilim gerektiren senaryolarda idealdir. Sunucularin kapasiteleri esitse tercih edilir.

upstream backend {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080;
}

Least Connections

Least Connections algoritmasi, en az baglantiya sahip sunucuya istek gonderir. Uzun suren isteklerin oldugu uygulamalar icin idealdir. Bir sunucu meşgulken digerlerine istek dagitir.

upstream backend {
    least_conn;
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080;
}

IP Hash

IP Hash, ayni istemciden gelen isteklerin ayni sunucuya yonlendirilmesini saglar. Oturum yonetimi gerektiren uygulamalar icin kullanislidir. Kullanici ayni sunucuya bagli kalir.

upstream backend {
    ip_hash;
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080;
}

Weighted Load Balancing

Agirlikli yuk dengeleme, farkli kapasitedeki sunucularin oldugu durumlarda kullanislidir. Daha guclu sunuculara daha fazla istek yonlendirilebilir.

upstream backend {
    server 10.0.0.1:8080 weight=3;
    server 10.0.0.2:8080 weight=2;
    server 10.0.0.3:8080 weight=1;
}

Health Check ve Failover

Nginx'in load balancing yapilandirmasinda health check ozelligi, arka plandaki sunucularin sagligini izler. Bir sunucu yanit vermezse, Nginx otomatik olarak devre disi birakir ve trafigi diger sunuculara yonlendirir.

upstream backend {
    server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;
    server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;
    server 10.0.0.3:8080 max_fails=3 fail_timeout=30s;
}

Bu yapilandirmada, bir sunucu 30 saniye icinde 3 kez basarisiz olursa, 30 saniye boyunca devre disi olarak isaretlenir. Bu ozellik, yuksek sureklilik gerektiren sistemlerde kritik oneme sahiptir.

SSL/TLS Terminasyonu

Load balancer uzerinde SSL sonlandirmasi yapmak, backend sunucularin yukunu hafifletir ve merkezi guvenlik yonetimi saglar:

server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Pratik Kullanim Ornekleri

Nginx load balancing, bir cok senaryoda kullanilabilir. Web uygulamalari icin en yaygin yapilandirma asagidaki sekildedir:

upstream web_backend {
    least_conn;
    server 10.0.0.1:80 weight=2;
    server 10.0.0.2:80 weight=2;
    server 10.0.0.3:80 weight=1;
    server 10.0.0.4:80 backup;
}
server {
    listen 80;
    server_name example.com www.example.com;
    location / {
        proxy_pass http://web_backend;
        proxy_http_version 1.1;
        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_connect_timeout 5s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

Bu ornekte least_conn algoritmasi kullanilmakta, iki ana sunucu ve bir yedek sunucu tanimlanmistir. Timeout degerleri, uzun suren istekler icin ayarlanmistir.

Sonuc

Nginx Load Balancing, modern web altyapilarinin vazgecilmez bir parcasidir. Nginx'in esnek yapilandirma secenekleri, farkli algoritmalari ve gomulu health check ozellikleri, profesyonel load balancing cozumleri sunar. Dogru algoritma secimi, sunucu kapasiteleri ve uygulama gereksinimleri dusunulerek yapilandirma, sistem performansini ve guvenilirligini onemli olcuyle artiracaktir.