Nginx Load Balancer Kurulumu (Nginx Load Balancer)

Nginx Load Balancer olarak bir konumlama yapmak istiyorsanız aşağıdaki yazıyı kullanabilirsiniz. Nginx Load Balancer

Öncelikle örnek projemizi docker üzerinde konumlandıracağız. Hadi başlayalım. nginx kurulumu için burayı kullanabilirsiniz.

nginx load balancer

Yukarıdaki gibi 3 adet container oluşturalım. Oluşturmak için;

Docker container run d name backend p 8080:80 nginx

Yukarıdaki komutu kullanabiliriz. Diğer servisleri siz oluşturabilirsiniz bence. 🙂

Topoloji için resimdeki gibi bir senaryo kullanabiliriz. Basit ve sade bir topoloji.

nginx load balancer

Dış/iç dünyadan backend sunucularımıza gelen istekleri load balancer ortamına getirip oradan farklı senaryolara göre yük dengeleyip backend sunucularına route edeceğiz.

  1. Öncelikle load balancer olarak kullanmayı planladığımız container içerisinde /etc/nginx/conf.d/ dizini altında bir tane config file oluşturalım.

Bunun için;

touch testing.conf

Komutunu kullanabiliriz. Hemen akabinde

upstream servers {

    server  172.17.0.3;

    server  172.17.0.4;

}

server {

listen 80;

server_name www.inanc1.info;

location / {

proxy_pass http://servers;

}

}

Dizelerini yazabiliriz. Burada;

Load balancer için “upstream” ile başlayan satır ile proxy_pass http://servers; satırını kullanıyoruz.

“server” etiketi yanında bulunan ip adresleri backend sunucularına ait olan ip adresleri.

Container içerisinde yer alan nginx servisini yeniden başlatalım.

Service nginx restart
  1. Backend sunucular tarafında da web projelerimizi /usr/share/nginx/html/ dizini altına bırakabiliriz. Ben bu dizin altında bulunan index.html dosyasını config edip içerisine,
<h3> Bu 1. Backend Sunucusudur </h3>

Gibi tanımlamalar yaptım. Web browser kullanarak yaptığım kontrollerde aşağıdaki gibi her isteğin farklı bir sunucuya gittiğini görüyorum. Buradaki mantık eşit ağırlık yöntemine göre çalışacak şekilde işlemekte. Aslında nginx için default load balance yöntemi bu şekildedir. Devam edelim…

Yukarıdaki örnekte gördüğümüz yönergeleri biraz zenginleştirelim. Yani yeni directive ile neler yapılabilir bir bakalım.

  1. Farlı Syntax kullanımları

least_conn

Yoğun bir sunuculara yeni istekleri yönlendirmeden daha müsait olan sunuculara gelen request paketlerini yönlendirecektir.

IP-hash

IP-hash ile aynı kullanıcıdan gelen istekler her zaman aynı backend sunucusuna ulaştırılır. İlk session (oturum) nerede oluşmuş ise artık nginx ilgili kullanıcıları hep aynı backend suculara yönlendirir. Varsayalın olarak bir kullanıcının hep aynı sunucuya gitmesi gibi bir durum yoktur. Fakat IP-hash ile bu durum sağlanabilir.

Weighted

Bu syntax ile sunuculara verilen ağırlıklara göre kullanıcılardan gelen istek sunuculara dağıtılır. Örnek olarak weight=4; olarak config edilmiş ise gelen istekler 4 tanesi bir sunucuya her 1 tanesi de diğer sunuculara paylaşılır.

upstream servers {

    least_conn;

    ip_hash;

    server  172.17.0.3 weight=4; — 4 istek bu sunucuya

    server  172.17.0.4; — 1 istek

    server  172.17.0.5; — 1 istek dağıtılır.

max_fails ve fail_timeout

Sunucu tarafında yaşanan iletişim hatalarında sunucunun nasıl yönetileceği durumunda kullanılmak için kullanılacak olan yönergedir. Örnek olarak bir sunucu 5 defa iletişim hatası almış ise 60s boyunca nginx sunucu için başarısız olarak işaretleme yapar.

Örnek

upstream servers {

    least_conn; — yoğunluğa göre yönlendirme yapacak

  #  ip_hash; — aktif olduğunda istekler hep aynı sunucuya yönlendirilecek

    server  172.17.0.3 weight=2; — 2 istek bu sunucuya diğerlerine 1 er dağılım

    server  172.17.0.4;

    server  172.17.0.5;

    server  172.17.0.6 max_fails=3 fail_timeout=30s; — bu sunucuya 3 hata olduğunda 30s bekle

}

server {

listen 80;

server_name www.inanc1.info;

location / {

proxy_pass http://servers;

}

}

Author: idelibalta

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir