Nginx Load Balancer Yapılandırması: Round Robin ve IP Hash
Nginx upstream bloğu ile round robin, least connections ve IP hash yük dengeleme algoritmaları ve SSL terminasyonu.
Nginx Load Balancer Nedir?
Load balancing (yük dengeleme), gelen ağ trafiğini birden fazla backend sunucusu arasında dağıtarak hiçbir sunucunun aşırı yüklenmesini engeller. Nginx, yüksek performanslı reverse proxy özellikleri sayesinde aynı zamanda mükemmel bir load balancer olarak da kullanılabilir. E-ticaret siteleri, API gateway'ler ve yüksek trafikli web uygulamaları için özellikle değerlidir.
Nginx'in load balancing algoritmaları: Round Robin (varsayılan, sırayla dağıt), Least Connections (en az bağlantılı sunucuya gönder), IP Hash (aynı IP'yi her zaman aynı sunucuya yönlendir - session tutma). Nginx Plus (ücretli) ek olarak health check ve least time algoritmalarını da sunar.
Temel Upstream Yapılandırması
sudo nano /etc/nginx/nginx.conf
http {
# Round Robin (varsayılan) - sırayla dağıt
upstream backend_rr {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
# Least Connections - en az meşgul sunucu
upstream backend_lc {
least_conn;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
# IP Hash - aynı IP hep aynı sunucuya (sticky session)
upstream backend_ip {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
}
Sunucu Ağırlığı (Weight)
upstream backend {
server 192.168.1.10:8080 weight=5; # Trafiğin %62'si
server 192.168.1.11:8080 weight=3; # Trafiğin %37'si
server 192.168.1.12:8080 weight=1; # Trafiğin %12'si
}
Yedek (Backup) ve Kalıcı Devre Dışı Sunucu
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080 backup; # Diğerleri çöktüğünde devreye girer
server 192.168.1.13:8080 down; # Geçici olarak devre dışı
}
Health Check (Pasif)
upstream backend {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
# 30 saniye içinde 3 hata olursa sunucuyu 30 saniyeliğine devre dışı bırak
}
Load Balancer Sunucu Bloğu
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
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;
# Zaman aşımları
proxy_connect_timeout 10s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Hata durumunda diğer sunucuya geç
proxy_next_upstream error timeout http_500 http_502 http_503;
}
}
SSL Terminasyonu
SSL'i load balancer'da sonlandırarak backend sunucularının yükünü azaltın:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
location / {
proxy_pass http://backend;
proxy_set_header X-Forwarded-Proto https;
}
}
# HTTP'yi HTTPS'e yönlendir
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
Keepalive ile Performans Optimizasyonu
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
keepalive 32; # 32 kalıcı bağlantı havuzu
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection ""; # Keep-alive için boş bırakın
}
}
Durum İzleme (stub_status)
server {
listen 8080;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
curl http://localhost:8080/nginx_status
# Active connections: 291
# server accepts handled requests
# Reading: 6 Writing: 179 Waiting: 106
Yapılandırmayı Uygulama
sudo nginx -t
sudo systemctl reload nginx
Test Etme
# Backend sunucularını test et
for i in $(seq 1 9); do curl -s http://example.com/ | grep "Server"; done
# Load dağılımını gör
sudo awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
Sık Karşılaşılan Sorunlar
502 Bad Gateway - Tüm Backend'ler Çökmüş
sudo tail -f /var/log/nginx/error.log
# Backend sunucularının durumunu kontrol et:
curl http://192.168.1.10:8080/health
Sonuç
Nginx ile round robin, least connections ve IP hash algoritmalarını kullanarak load balancing yapılandırdınız. SSL terminasyonu, keepalive optimizasyonu ve pasif health check ile yüksek erişilebilirlik ve performanslı bir altyapı oluşturdunuz.
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!