Sobes.tech
Middle

Yük dengeleme ayarları için Nginx ile ilgili deneyiminiz nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Yüksek performanslı ters proxy ve web sunucusu olarak Nginx'i biliyorum ve yük dengeleme yapılandırması için aktif olarak kullanıyorum.

Çalıştığım yük dengeleme türleri:

  • Round Robin: İstekleri havuzdaki sunuculara eşit şekilde dağıtır. Basit, ancak sunucu yükünü dikkate almaz.
    upstream backend {
        server 192.168.1.100;
        server 192.168.1.101;
        server 192.168.1.102;
    }
    
    server {
        listen 80;
    
        location / {
            proxy_pass http://backend;
        }
    }
    
  • Least Conn (En Az Bağlantı): İsteği, en az aktif bağlantıya sahip sunucuya gönderir. Dengesiz yüklerde daha etkilidir.
    upstream backend {
        least_conn;
        server 192.168.1.100;
        server 192.168.1.101;
        server 192.168.1.102;
    }
    
    // ... diğer sunucu yapılandırması
    
  • IP Hash: İsteği, istemcinin IP adresine göre dağıtır. Aynı istemciden gelen isteklerin aynı sunucuya gitmesini sağlar, durumlu uygulamalar için faydalıdır.
    upstream backend {
        ip_hash;
        server 192.168.1.100;
        server 192.168.1.101;
        server 192.168.1.102;
    }
    
    // ... diğer sunucu yapılandırması
    
  • Genel Hash: İsteği, rastgele metin, anahtar veya değişkene göre dağıtır, hash fonksiyonu kullanılır.
    upstream backend {
        hash $request_uri consistent; # İsteğin URI'sini kullanma
        server 192.168.1.100;
        server 192.168.1.101;
        server 192.168.1.102;
    }
    
    // ... diğer sunucu yapılandırması
    
  • Rastgele: Sunucudan rastgele seçim yapar. Opsiyonel olarak two least_conn kullanılabilir, bu da iki rastgele seçilen sunucu arasından en az bağlantıya sahip olanı tercih eder.
    upstream backend {
        random two least_conn;
        server 192.168.1.100;
        server 192.168.1.101;
        server 192.168.1.102;
    }
    
    // ... diğer sunucu yapılandırması
    

proxy_next_upstream yönergelerini kullanarak, isteklerin hangi durumlarda bir sonraki sunucuya yönlendirileceğini belirlerim (örneğin, 502, 503 hatası veya zaman aşımı durumunda). Ayrıca, health_check seçeneğiyle (Nginx Plus'ta mevcut) veya harici araçlar kullanarak sunucuların erişilebilirliğini kontrol eder ve Nginx yapılandırma dosyasını dinamik olarak güncellerim.

Backend sunucularla bağlantı maliyetlerini azaltmak için keepalive bağlantılarını yapılandırırım. SSL/TLS terminasyonu yaparak backend üzerindeki yükü azaltırım.

Upstream sunucuların durumunu izlemek için Nginx'in durum sayfasını kullanıyorum, bu sayfa ngx_http_stub_status_module veya ngx_http_api_module (Nginx Plus için) modülleri aracılığıyla erişilebilir. İzleme verilerini Prometheus ve Grafana ile entegre ederek görselleştirir ve uyarılar kurarım.

Nginx'i Docker konteynerleri ve Kubernetes gibi orkestrasyon araçlarında kullanıyorum, genellikle trafik yönlendirmesi için Ingress denetleyicisi olarak yapılandırıyorum.

Çeşitli senaryolar üzerinde çalıştım, bunlar arasında:

  • Web uygulamaları için HTTP/S trafik yük dengeleme.
  • Veritabanları veya diğer servisler için TCP trafik yük dengeleme.
  • Backend sunucular önünde önbelleğe alma proxy'si olarak Nginx kullanımı.

Yüksek performans için Nginx yapılandırmasını optimize edebiliyorum, worker süreçleri, worker bağlantıları ve tamponlama ayarlarını içerir. nginx -t komutunu kullanarak yapılandırma sözdizimini kontrol ederim ve nginx -s reload ile değişiklikleri hizmeti durdurmadan uygularım.

Genel olarak, üretim ortamlarında çeşitli yük dengeleme stratejilerini uygulamak için Nginx yapılandırmasını güvenle kullanıyorum.