Nginx ile yük dengeleme nasıl yapılır (Load Balancer)

Yük dengelemenin avantajları

Yük dengeleme, uygulamanızı ölçeklendirmenin, performansını ve artıklığı artırmanın mükemmel bir yoludur. Popüler bir web sunucusu yazılımı olan Nginx, sunucularınızın kaynak kullanılabilirliğini ve verimliliğini artırmak için basit ama güçlü bir yük dengeleyici olarak yapılandırılabilir.

Nginx, birden çok ayrı sunucuda çalışan dağıtılmış bir web uygulamasının tek bir giriş noktası olarak işlev görür.

load-balancer-graph-1-1024x522.png

Bu kılavuzda yük dengelemenin avantajları açıklanmaktadır. Bulut sunucularınız için nginx ile yük dengelemeyi nasıl ayarlayacağınızı öğrenin.

Önkoşul olarak, yük dengeleyicinin yararını görmek için bir web sunucusu yazılımı yüklü ve yapılandırılmış en az iki ana makineye sahip olmanız gerekir.

Nginx Kurulumu

Yapılacak ilk şey, yük dengeleyiciniz olarak hizmet verecek yeni bir ana bilgisayar kurmaktır.

Sunucuyu istediğiniz gibi ayarladıktan sonra, en son kararlı nginx'i yükleyin.

Kod:
# CentOS
# Ek paket deposunu yükleyin
sudo yum install epel-release
# Depoları güncelleyin ve Nginx'i yükleyin
sudo yum update
sudo yum install nginx
Kurulduktan sonra dizini nginx ana yapılandırma klasörüne değiştirin.

Kod:
cd /etc/nginx/
İşletim sisteminize bağlı olarak, web sunucusu yapılandırma dosyaları iki yerden birinde olacaktır.

Ubuntu ve Debian, /etc/nginx/sites-available/dizininde /etc/nginx/sites-enabled/ ile sembolik bağlantılar yoluyla etkinleştirilen sanal ana makine dosyalarını saklamak için bir kurala uyarlar. Yeni sanal ana bilgisayar dosyalarını etkinleştirmek için aşağıdaki komutu kullanabilirsiniz.

Kod:
sudo ln -s /etc/nginx/sites-available/vhost /etc/nginx/sites-enabled/vhost
CentOS kullanıcıları, ana bilgisayar yapılandırma dosyalarını /etc/nginx/conf.d/ altında bulabilir .conf türü sanal ana bilgisayar dosyaları yüklenir.

En azından varsayılan yapılandırmayı bulduğunuzdan emin olun ve nginx'i yeniden başlatın.

Kod:
sudo systemctl restart nginx
Sunucunun HTTP isteklerine yanıt verdiğini test edin. Yük dengeleyici sunucusunun genel IP adresini web tarayıcınızda açın. Nginx için varsayılan karşılama sayfasını gördüğünüzde yükleme başarılı oldu.
nginx-welcome-page.png


Sayfayı yüklemekte sorun yaşıyorsanız, bir güvenlik duvarının bağlantınızı engellemediğinden emin olun. Örneğin, CentOS 7'de varsayılan güvenlik duvarı kuralları HTTP trafiğine izin vermez, aşağıdaki komutlarla etkinleştirin.
Kod:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
Ardından tarayıcınızı yeniden yüklemeyi deneyin.

Nginx'i bir yük dengeleyici olarak yapılandırma

Nginx kurulduğunda ve test edildiğinde, yük dengeleme için yapılandırmaya başlayın. Özünde, yapmanız gereken tek şey nginx'i hangi bağlantı türlerini dinleyeceğiniz ve nereye yönlendireceğinizle ilgili talimatları içeren olarak ayarlamaktır. Tercih ettiğiniz metin düzenleyicisini kullanarak yeni bir yapılandırma dosyası oluşturun. Örneğin nano ile:

Kod:
sudo nano /etc/nginx/conf.d/load-balancer.conf
Load-balancer.conf içinde, yukarı akış ve sunucu olarak aşağıdaki iki segmenti tanımlamanız gerekir, aşağıdaki örneklere bakın.

Kod:
# Yük dengeleme şemasına hangi sunucuların dahil edileceğini tanımlayın.
# Daha iyi performans ve güvenlik için sunucuların özel IP'lerini kullanmak en iyisidir.
# Özel IP'leri UpCloud kontrol paneli Ağ bölümünde bulabilirsiniz.

http {
   upstream backend {
      server 10.1.0.101;
      server 10.1.0.102;
      server 10.1.0.103;
   }
  
# Bu sunucu, bağlantı noktası 80'e giden tüm trafiği kabul eder ve akışa geçirir.
# Akış yukarı adının ve proxy_pass öğesinin eşleşmesi gerektiğine dikkat edin.

server {
      listen 80;

      location / {
          proxy_pass http://backend;
      }
   }
}
Sonra dosyayı kaydedin ve editörden çıkın.

Ardından, kurulumdan sonra daha önce test ettiğiniz varsayılan sunucu yapılandırmasını devre dışı bırakın. Yine işletim sisteminize bağlı olarak, bu bölüm biraz farklıdır.

Debian ve Ubuntu sistemlerinde, siteler etkin klasörden varsayılan sembolik bağlantıyı kaldırmanız gerekir.

Kod:
sudo rm /etc/nginx/sites-enabled/default
CentOS sunucuları aynı bağlantıyı kullanmaz. Bunun yerine, conf.d / dizinindeki default.conf dosyasını .conf ile bitmeyen bir adla yeniden adlandırın, örneğin:

Kod:
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
Ardından nginx'i yeniden başlatmak için aşağıdakileri kullanın.

Kod:
sudo systemctl restart nginx
Nginx'in başarıyla başlatıldığını kontrol edin. Yeniden başlatma başarısız olursa, yanlış yazdığınız veya eksik noktalı virgül olmadığından emin olmak için yeni oluşturduğunuz /etc/nginx/conf.d/load-balancer.conf dosyasına bakın.

Yük dengeleyicinin genel IP adresini web tarayıcınıza girdiğinizde, arka uç sunucularınızdan birine geçmelisiniz.

Yük dengeleme yöntemleri

Nginx ile yük dengeleme, yukarıdaki ilk örnekte olduğu gibi başka bir yöntem tanımlanmadıysa, varsayılan olarak bir yuvarlak döngü algoritması kullanır. Round-robin şeması ile her sunucu, load-balancer.conf dosyasında ayarladığınız sıraya göre sırayla seçilir. Bu, kısa işlemler için istek sayısını eşit olarak dengeler.

En az bağlantı esaslı yük dengeleme bir diğer basit yöntemdir. Adından da anlaşılacağı gibi, bu yöntem istekleri sunucuya o anda en az etkin bağlantılarla yönlendirir. Taleplerin bazen tamamlanmasının daha uzun sürebileceği uygulamalarda, round-robin'den daha adil çalışır.

En az bağlantı dengeleme yöntemini etkinleştirmek için, akış yukarı bölümünüze least_conn parametresini aşağıdaki örnekte gösterildiği gibi ekleyin.

Kod:
upstream backend {
   least_conn;
   server 10.1.0.101;
   server 10.1.0.102;
   server 10.1.0.103;
}
Round-robin ve en az bağlantı dengeleme şemaları adildir ve kullanımları vardır. Ancak, oturum kalıcılığı sağlayamazlar. Web uygulamanız kullanıcıların daha sonra önceki bağlantılarında olduğu gibi aynı arka uç sunucuya yönlendirilmesini gerektiriyorsa, bunun yerine IP karma yöntemini kullanın.

IP karması, ziyaretçinin IP adresini, talebe hizmet vermek için hangi ana bilgisayarın seçilmesi gerektiğini belirlemek için bir anahtar olarak kullanır. Bu, ziyaretçilerin her seferinde aynı sunucuya yönlendirilmesine olanak tanır, sunucunun kullanılabilir olduğunu ve ziyaretçinin IP adresinin değişmediğini kabul eder.

Bu yöntemi kullanmak için, aşağıdaki örnekte olduğu gibi yukarı akış segmentinize ip_hash parametresini ekleyin.

Kod:
upstream backend {
   ip_hash;
   server 10.1.0.101;
   server 10.1.0.102;
   server 10.1.0.103;
}
Farklı ana bilgisayarlar arasındaki kullanılabilir kaynakların eşit olmadığı bir sunucu kurulumunda, bazı sunucuları diğerlerine göre tercih etmek istenebilir. Sunucu ağırlıklarının tanımlanması, nginx ile yük dengelemede daha fazla ince ayar yapmanıza olanak tanır. Yük dengeleyicide en yüksek ağırlığa sahip sunucu en sık seçilir.

Kod:
upstream backend {
   server 10.1.0.101 weight=4;
   server 10.1.0.102 weight=2;
   server 10.1.0.103;
}
Örneğin, yukarıda gösterilen yapılandırmada, birinci sunucu ikincisinden iki kat daha sık seçilir ve bu da üçüncü sunucuya kıyasla iki kat daha fazla istek alır.

HTTPS etkinken yük dengeleme

Siteniz için HTTPS'yi etkinleştirin, ziyaretçilerinizi ve verilerini korumak için harika bir yoldur. Web barındırıcınıza henüz şifreleme uygulamadıysanız, Letgin Encrypt'in nginx'e nasıl yükleneceği ile ilgili kılavuzumuza göz atmanızı kesinlikle öneririz.

Şifrelemeyi bir yük dengeleyici ile kullanmak düşündüğünüzden daha kolaydır. Tek yapmanız gereken, yük dengeleyici yapılandırma dosyanıza SSL ile 443 numaralı bağlantı noktasındaki HTTPS trafiğini dinleyen başka bir sunucu bölümü eklemektir. Ardından, yukarıdaki önceki örnekte HTTP gibi akış yukarı segmentinize bir proxy_pass ayarlayın.

Düzenlemek için yapılandırma dosyanızı tekrar açın.

Kod:
sudo nano /etc/nginx/conf.d/load-balancer.conf
Ardından, aşağıdaki sunucu segmentini dosyanın sonuna ekleyin.

Kod:
server {
   listen 443 ssl;
   server_name domain_name;
   ssl_certificate /etc/letsencrypt/live/domain_name/cert.pem;
   ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

   location / {
      proxy_pass http://backend;
   }
}
Ardından dosyayı kaydedin, düzenleyiciden çıkın ve nginx'i yeniden başlatın.

Kod:
sudo systemctl restart nginx
Arka ucunuza özel ağ bağlantılarını kullanırken yük dengeleyicinizde şifreleme ayarlamanın bazı büyük avantajları vardır.

  • Yalnızca UpCloud sunucularınızın özel ağınıza erişimi olduğundan, SSL'yi yük dengeleyicisinde sonlandırmanıza ve böylece yalnızca HTTP bağlantılarını iletmenize izin verir.
  • Ayrıca sertifika yönetiminizi büyük ölçüde basitleştirir. Sertifikaları tek bir ana bilgisayardan alabilir ve yenileyebilirsiniz.

HTTPS etkinken, yük dengeleyicinize yapılan tüm bağlantılarda şifrelemeyi zorunlu tutma seçeneğiniz de vardır. 80 numaralı bağlantı noktasını dinleyerek sunucu segmentinizi bir sunucu adı ve HTTPS bağlantı noktanıza yeniden yönlendirmeyle güncelleyin. Ardından, artık gerekli olmadığından konum bölümünü kaldırın veya yorum yapın. Aşağıdaki örneğe bakın.

Kod:
server {
   listen 80;
   server_name domain_name;
   return 301 https://$server_name$request_uri;

   #location / {
   #   proxy_pass http://backend;
   #}
}
Değişiklikleri yaptıktan sonra dosyayı tekrar kaydedin. Sonra nginx'i yeniden başlatın.

Kod:
sudo systemctl restart nginx
Şimdi yük dengeleyicinize yapılan tüm bağlantılar şifrelenmiş bir HTTPS bağlantısı üzerinden sunulacaktır. Şifrelenmemiş HTTP'ye yönelik istekler de HTTPS'yi kullanacak şekilde yönlendirilecektir. Bu, şifrelemeye sorunsuz bir geçiş sağlar. Ziyaretçilerinizden hiçbir şey almanız gerekmez.

Sağlık kontrolleri

Hangi sunucuların kullanılabilir olduğunu bilmek için, nginx’in ters proxy uygulamaları pasif sunucu sağlığı denetimlerini içerir. Bir sunucu bir isteğe yanıt veremezse veya bir hatayla yanıt verirse, nginx sunucunun başarısız olduğunu belirtir. Bir süre için o sunucuya bağlantı iletmekten kaçınmaya çalışacaktır.

Belirli bir zaman dilimi içinde ardışık başarısız bağlantı girişimi sayısı yük dengeleyici yapılandırma dosyasında tanımlanabilir. Sunucu satırlarına max_fails parametresini ayarlayın. Varsayılan olarak, max_fails belirtilmediğinde, bu değer 1 olarak ayarlanır. İsteğe bağlı olarak max_fails değerini 0 olarak ayarlamak, o sunucudaki sağlık denetimlerini devre dışı bırakır.

Max_fails 1'den büyük bir değere ayarlanırsa, başarısızlıkların sayılması için sonraki başarısızlıkların belirli bir zaman dilimi içinde gerçekleşmesi gerekir. Bu zaman dilimi, sunucunun ne kadar süre başarısız sayılması gerektiğini tanımlayan fail_timeout parametresi ile belirtilir. Varsayılan olarak, fail_timeout değeri 10 saniyeye ayarlanmıştır.

Bir sunucu başarısız olarak işaretlendikten ve fail_timeout tarafından ayarlanan süre geçtikten sonra, nginx sunucuyu istemci istekleriyle incelikle sorgulamaya başlar. Problar başarılı olursa, sunucu tekrar canlı olarak işaretlenir ve yük dengelemeye normal olarak dahil edilir.

Kod:
upstream backend {
   server 10.1.0.101 weight=5;
   server 10.1.0.102 max_fails=3 fail_timeout=30s;
   server 10.1.0.103;
}
Sağlık kontrollerini kullanın. Ana bilgisayarları gerektiği gibi açıp kapatarak sunucunuzun arka ucunu mevcut talebe uyarlamanıza olanak tanır. Yoğun trafik sırasında ek sunucular başlattığınızda, yük dengeleyiciniz için yeni kaynaklar otomatik olarak kullanılabilir olduğunda uygulama performansınızı kolayca artırabilir.

Sonuçlar

Web uygulamanızın performansını ve kullanılabilirliğini artırmak istiyorsanız, bir yük dengeleyici kesinlikle dikkate alınması gereken bir şeydir. Nginx güçlü ama bir yük dengeleyici olarak kurmak nispeten basit. Let's Encrypt istemcisi gibi kolay bir şifreleme çözümü ile birlikte, web grubunuz için mükemmel bir ön uç oluşturur. Daha fazla bilgi edinmek için nginx.org adresindeki akış yukarı belgelerine göz atın.

Birden fazla ana bilgisayar kullandığınızda, web hizmetinizi artıklık ile korur, yük dengeleyicinin kendisi yine de tek bir hata noktası bırakabilir. Birden çok yük dengeleyici arasında hareketli bir IP ayarladığınızda yüksek kullanılabilirliği daha da artırabilirsiniz.
About author
Slaweally
Ben Ali Çömez (Slaweally) Uzun yıllar internet sektöründe zaman geçirdikten sonra tecrübelerimi sizinle paylaşmak için buradayım.

Comments

There are no comments to display.

linux information

Yazar
Slaweally
Görüntüleme
33,906
Last update
Author rating
4.50 yıldız(lar)

More in Linux - Unix sistem Dökümanları

More from Slaweally